[med-svn] [fw4spl] 01/01: New upstream version 11.0.4

Flavien Bridault fbridault-guest at moszumanska.debian.org
Thu Mar 2 13:03:59 UTC 2017


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

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

commit d7432793ce282a43ece7ea9c9f2b7007398ea86a
Author: Flavien Bridault <fbridault at ircad.fr>
Date:   Thu Mar 2 12:24:57 2017 +0000

    New upstream version 11.0.4
---
 .hgignore => .gitignore                            |    7 +-
 .hgtags                                            |  123 --
 .travis.yml                                        |   15 +-
 Apps/VRRender/Properties.cmake                     |    9 +
 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 219192 -> 0 bytes
 .../doc/source/_static/3D-Planning-View-00.png     |  Bin 207145 -> 0 bytes
 .../doc/source/_static/3D-Resect-First.png         |  Bin 252338 -> 0 bytes
 .../source/_static/3D-Resect-cutting-planes.png    |  Bin 284064 -> 0 bytes
 .../doc/source/_static/3D-Resect-manage.png        |  Bin 171825 -> 0 bytes
 .../doc/source/_static/3D-Resect-plane-side.png    |  Bin 263504 -> 0 bytes
 .../doc/source/_static/3D-Resect-start.png         |  Bin 189534 -> 0 bytes
 .../doc/source/_static/3D-Resect-volume.png        |  Bin 242396 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-distance.png   |  Bin 142029 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-landmark.png   |  Bin 163292 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-rotate.png     |  Bin 191571 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-scan-1-3.png   |  Bin 222456 -> 0 bytes
 .../doc/source/_static/3D-scan-GL-value.png        |  Bin 157133 -> 0 bytes
 .../doc/source/_static/3D-scan-ax-front-sag.png    |  Bin 190004 -> 0 bytes
 .../doc/source/_static/3D-scan-contrast.png        |  Bin 160927 -> 0 bytes
 .../doc/source/_static/3D-show-hide-organs.png     |  Bin 208376 -> 0 bytes
 .../doc/source/_static/3D-show-hide-scan.png       |  Bin 230334 -> 0 bytes
 .../VRRender/doc/source/_static/3D-translation.png |  Bin 79500 -> 0 bytes
 .../doc/source/_static/3D-transparency.png         |  Bin 188677 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-turn.png       |  Bin 152259 -> 0 bytes
 Apps/VRRender/doc/source/_static/3D-zoom.png       |  Bin 93864 -> 0 bytes
 .../doc/source/_static/Add-Find-View-landmark.png  |  Bin 5482 -> 0 bytes
 Apps/VRRender/doc/source/_static/Add-landmark.png  |  Bin 1577 -> 0 bytes
 Apps/VRRender/doc/source/_static/Add-plan1.png     |  Bin 2312 -> 0 bytes
 Apps/VRRender/doc/source/_static/Add-plan2.png     |  Bin 2846 -> 0 bytes
 Apps/VRRender/doc/source/_static/AddTool.png       |  Bin 1052 -> 0 bytes
 Apps/VRRender/doc/source/_static/Find-landmark.png |  Bin 2122 -> 0 bytes
 Apps/VRRender/doc/source/_static/Mode-VR.png       |  Bin 1981 -> 0 bytes
 Apps/VRRender/doc/source/_static/Negato-01.png     |  Bin 291839 -> 0 bytes
 .../doc/source/_static/Negato-Distance.png         |  Bin 223655 -> 0 bytes
 Apps/VRRender/doc/source/_static/Negato-Zoom.png   |  Bin 209461 -> 0 bytes
 Apps/VRRender/doc/source/_static/Negato-axes.png   |  Bin 298175 -> 0 bytes
 .../doc/source/_static/Negato-contrast.png         |  Bin 152816 -> 0 bytes
 Apps/VRRender/doc/source/_static/Negato-filter.png |  Bin 164233 -> 0 bytes
 Apps/VRRender/doc/source/_static/Negato-info.png   |  Bin 276129 -> 0 bytes
 .../doc/source/_static/Negato-landmarks.png        |  Bin 325920 -> 0 bytes
 .../doc/source/_static/Negato-translate.png        |  Bin 240307 -> 0 bytes
 Apps/VRRender/doc/source/_static/Resection.png     |  Bin 1439 -> 0 bytes
 Apps/VRRender/doc/source/_static/Resection2.png    |  Bin 2287 -> 0 bytes
 .../doc/source/_static/Tool-bar-planning.png       |  Bin 24281 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-01.jpg         |  Bin 79308 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-DEF.jpg        |  Bin 24294 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-01.jpg      |  Bin 34932 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-02.jpg      |  Bin 28750 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png |  Bin 239456 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg |  Bin 34801 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png |  Bin 370325 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg     |  Bin 56208 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg  |  Bin 99344 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg  |  Bin 101031 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-cutting.jpg    |  Bin 33487 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR-manip.jpg      |  Bin 23377 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR.png            |  Bin 49100 -> 0 bytes
 Apps/VRRender/doc/source/_static/VRPlanning.png    |  Bin 40972 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR_WLE_html.png   |  Bin 20559 -> 0 bytes
 Apps/VRRender/doc/source/_static/VR_html.png       |  Bin 35500 -> 0 bytes
 Apps/VRRender/doc/source/_static/View-INFO.png     |  Bin 260 -> 0 bytes
 Apps/VRRender/doc/source/_static/View-landmark.png |  Bin 2538 -> 0 bytes
 .../doc/source/_static/acknowledgment/apple.png    |  Bin 65027 -> 0 bytes
 .../doc/source/_static/acknowledgment/boost.png    |  Bin 7192 -> 0 bytes
 .../doc/source/_static/acknowledgment/bzip2.png    |  Bin 6589 -> 0 bytes
 .../doc/source/_static/acknowledgment/cfitsio.png  |  Bin 7683 -> 0 bytes
 .../doc/source/_static/acknowledgment/dcmtk.png    |  Bin 6761 -> 0 bytes
 .../doc/source/_static/acknowledgment/doxygen.png  |  Bin 11988 -> 0 bytes
 .../doc/source/_static/acknowledgment/eclipse.png  |  Bin 13860 -> 0 bytes
 .../doc/source/_static/acknowledgment/ehealth.png  |  Bin 411007 -> 0 bytes
 .../doc/source/_static/acknowledgment/fits2itk.png |  Bin 7367 -> 0 bytes
 .../doc/source/_static/acknowledgment/fsf.png      |  Bin 6409 -> 0 bytes
 .../doc/source/_static/acknowledgment/gcc.png      |  Bin 28137 -> 0 bytes
 .../doc/source/_static/acknowledgment/gdcm.png     |  Bin 9736 -> 0 bytes
 .../doc/source/_static/acknowledgment/itk.png      |  Bin 9372 -> 0 bytes
 .../doc/source/_static/acknowledgment/libjpeg.png  |  Bin 2829 -> 0 bytes
 .../doc/source/_static/acknowledgment/libpng.png   |  Bin 2655 -> 0 bytes
 .../doc/source/_static/acknowledgment/libtiff.png  |  Bin 2118 -> 0 bytes
 .../doc/source/_static/acknowledgment/libxml2.png  |  Bin 7940 -> 0 bytes
 .../doc/source/_static/acknowledgment/linux-64.png |  Bin 29352 -> 0 bytes
 .../doc/source/_static/acknowledgment/linux.png    |  Bin 31211 -> 0 bytes
 .../doc/source/_static/acknowledgment/log4cxx.png  |  Bin 6161 -> 0 bytes
 .../doc/source/_static/acknowledgment/ms.png       |  Bin 13902 -> 0 bytes
 .../doc/source/_static/acknowledgment/opengl.png   |  Bin 7428 -> 0 bytes
 .../doc/source/_static/acknowledgment/python.png   |  Bin 2641 -> 0 bytes
 .../doc/source/_static/acknowledgment/scons.png    |  Bin 5926 -> 0 bytes
 .../doc/source/_static/acknowledgment/sphinx.png   |  Bin 4624 -> 0 bytes
 .../doc/source/_static/acknowledgment/vim.png      |  Bin 15549 -> 0 bytes
 .../doc/source/_static/acknowledgment/visualc.png  |  Bin 7902 -> 0 bytes
 .../doc/source/_static/acknowledgment/vtk.png      |  Bin 8157 -> 0 bytes
 .../source/_static/acknowledgment/vtkinria3d.png   |  Bin 10656 -> 0 bytes
 .../doc/source/_static/acknowledgment/wix.png      |  Bin 17600 -> 0 bytes
 .../doc/source/_static/acknowledgment/wx.png       |  Bin 9304 -> 0 bytes
 .../doc/source/_static/acknowledgment/zlib.png     |  Bin 9172 -> 0 bytes
 Apps/VRRender/doc/source/_static/axial-view.jpg    |  Bin 16033 -> 0 bytes
 Apps/VRRender/doc/source/_static/basic.css         |  414 -------
 Apps/VRRender/doc/source/_static/camera-photo.png  |  Bin 864 -> 0 bytes
 Apps/VRRender/doc/source/_static/danger.png        |  Bin 18201 -> 0 bytes
 Apps/VRRender/doc/source/_static/default.css       |  201 ----
 Apps/VRRender/doc/source/_static/distance.png      |  Bin 763 -> 0 bytes
 Apps/VRRender/doc/source/_static/doctools.js       |  232 ----
 Apps/VRRender/doc/source/_static/ehealth.png       |  Bin 411007 -> 0 bytes
 Apps/VRRender/doc/source/_static/file.png          |  Bin 392 -> 0 bytes
 Apps/VRRender/doc/source/_static/frontal-view.jpg  |  Bin 11859 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-2D.png       |  Bin 1383 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-3D.png       |  Bin 1796 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-VR.png       |  Bin 1487 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-axial.png    |  Bin 1556 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-frontal.png  |  Bin 1883 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-sagittal.png |  Bin 2000 -> 0 bytes
 Apps/VRRender/doc/source/_static/icon-windows.jpg  |  Bin 768 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-F9.png      |  Bin 1906 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-01.jpg   |  Bin 947 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-02.jpg   |  Bin 820 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-03.jpg   |  Bin 904 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-04.jpg   |  Bin 849 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-05.jpg   |  Bin 898 -> 0 bytes
 Apps/VRRender/doc/source/_static/icone-VR-06.jpg   |  Bin 984 -> 0 bytes
 Apps/VRRender/doc/source/_static/info-patient.png  |  Bin 188609 -> 0 bytes
 Apps/VRRender/doc/source/_static/jquery.js         |   32 -
 Apps/VRRender/doc/source/_static/minus.png         |  Bin 199 -> 0 bytes
 Apps/VRRender/doc/source/_static/openDicom.png     |  Bin 1786 -> 0 bytes
 .../doc/source/_static/openDicom_openFxz.png       |  Bin 2880 -> 0 bytes
 Apps/VRRender/doc/source/_static/openFxz.png       |  Bin 1632 -> 0 bytes
 Apps/VRRender/doc/source/_static/operation.png     |  Bin 3316 -> 0 bytes
 Apps/VRRender/doc/source/_static/plus.png          |  Bin 199 -> 0 bytes
 Apps/VRRender/doc/source/_static/pygments.css      |   61 -
 Apps/VRRender/doc/source/_static/sagittal-view.jpg |  Bin 10483 -> 0 bytes
 Apps/VRRender/doc/source/_static/searchtools.js    |  467 --------
 Apps/VRRender/doc/source/_static/sliceHide.png     |  Bin 947 -> 0 bytes
 Apps/VRRender/doc/source/_static/sliceShow.png     |  Bin 545 -> 0 bytes
 Apps/VRRender/doc/source/_static/video.png         |  Bin 3717 -> 0 bytes
 Apps/VRRender/doc/source/_static/view_frontal.png  |  Bin 2048 -> 0 bytes
 Apps/VRRender/doc/source/_static/view_profil.png   |  Bin 2215 -> 0 bytes
 Apps/VRRender/doc/source/conf.py                   |  208 ----
 Apps/VRRender/doc/source/index.rst                 |   37 -
 .../rc/configurations/2DVisualization.xml          |    2 +-
 .../rc/configurations/3DNegatoWithAcq.xml          |    9 +-
 .../rc/configurations/3DVisualization.xml          |   23 +-
 .../rc/configurations/ManageOrganWithSeries.xml    |    4 +
 .../rc/configurations/TransferFunctionEditor.xml   |    3 +
 .../rc/configurations/2DLocalPreviewConfig.xml     |    4 +
 .../rc/configurations/2DPacsPreviewConfig.xml      |    4 +
 Bundles/LeafActivity/ioActivity/Properties.cmake   |    1 +
 Bundles/LeafActivity/ioActivity/rc/plugin.xml      |   52 +
 .../rc/configurations/VolumeRendering.xml          |    4 +
 .../LeafAtomFilter/filterVRRender/CMakeLists.txt   |    2 +-
 .../LeafAtomFilter/filterVRRender/Properties.cmake |    2 +-
 .../include/filterVRRender/namespace.hpp           |   10 +-
 Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp   |   11 +-
 Bundles/LeafCtrl/ctrlSelection/Properties.cmake    |   13 +-
 .../include/ctrlSelection/SManage.hpp              |  150 +++
 .../include/ctrlSelection/manager/SField.hpp       |   26 +-
 .../include/ctrlSelection/updater/SObjFromSlot.hpp |    8 +-
 .../include/ctrlSelection/updater/SObjFromUid.hpp  |  116 --
 .../wrapper/SImageSignalForwarder.hpp              |    7 +-
 Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml       |    4 +-
 .../ctrlSelection/src/ctrlSelection/SManage.cpp    |  369 ++++++
 .../src/ctrlSelection/updater/SObjFromUid.cpp      |  168 ---
 .../monitor/include/monitor/action/namespace.hpp   |   24 -
 .../LeafCtrl/monitor/include/monitor/namespace.hpp |   11 +-
 Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp     |   12 +-
 Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp     |   41 +-
 Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp |   23 +-
 Bundles/LeafIO/ioData/Properties.cmake             |    1 +
 .../include/ioData/SAttachmentSeriesReader.hpp     |  111 ++
 Bundles/LeafIO/ioData/rc/plugin.xml                |    7 +
 .../ioData/src/ioData/SAttachmentSeriesReader.cpp  |  181 +++
 Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp     |   17 +-
 .../src/ioPacs/SPacsConfigurationInitializer.cpp   |    3 +-
 Bundles/LeafIO/ioQt/CMakeLists.txt                 |   11 +
 Bundles/LeafIO/ioQt/Properties.cmake               |   17 +
 Bundles/LeafIO/ioQt/include/ioQt/Plugin.hpp        |   32 +
 Bundles/LeafIO/ioQt/include/ioQt/SPdfWriter.hpp    |  175 +++
 Bundles/LeafIO/ioQt/rc/plugin.xml                  |   14 +
 Bundles/LeafIO/ioQt/src/ioQt/Plugin.cpp            |   37 +
 Bundles/LeafIO/ioQt/src/ioQt/SPdfWriter.cpp        |  303 +++++
 .../include/opImageFilter/action/SThreshold.hpp    |   40 +-
 .../src/opImageFilter/action/SThreshold.cpp        |   27 +-
 .../include/opVTKMesh/action/SMeshCreation.hpp     |   45 +-
 .../src/opVTKMesh/action/SMeshCreation.cpp         |   37 +-
 .../include/patchMedicalData/namespace.hpp         |    9 +-
 .../patchMedicalData/test/tu/src/PatchTest.cpp     |   18 +-
 .../include/basicRegistration/STransformMesh.hpp   |   53 -
 .../basicRegistration/rc/plugin.xml                |    8 +-
 .../src/basicRegistration/STransformMesh.cpp       |  100 --
 Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp   |   24 +-
 .../guiQt/include/guiQt/editor/SSignalButton.hpp   |   10 +-
 Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp          |   34 +-
 .../LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp |   30 +-
 .../LeafUI/guiQt/src/guiQt/editor/SParameters.cpp  |   29 +-
 Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp  |   41 +-
 .../LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp  |  181 +--
 .../action/LaunchBrowserActionService.cpp          |   19 +-
 .../src/uiGenericQt/action/SShowAbout.cpp          |    8 +-
 .../src/uiImageQt/SliceIndexPositionEditor.cpp     |    5 +-
 .../include/uiMeasurement/action/LoadLandmark.hpp  |   22 +-
 .../include/uiMeasurement/action/SaveLandmark.hpp  |   22 +-
 Bundles/LeafUI/uiMeasurement/rc/plugin.xml         |   38 +
 .../src/uiMeasurement/action/LoadLandmark.cpp      |   99 +-
 .../src/uiMeasurement/action/SaveLandmark.cpp      |   79 +-
 .../include/uiMedDataQt/InsertSeries.hpp           |   15 +-
 .../action/SPreferencesConfiguration.cpp           |   24 +-
 .../uiTF/include/uiTF/TransferFunctionEditor.hpp   |   27 +-
 Bundles/LeafVisu/scene2D/CMakeLists.txt            |    1 -
 .../scene2D/include/scene2D/adaptor/namespace.hpp  |   23 -
 .../LeafVisu/scene2D/include/scene2D/data/Axis.hpp |    4 +-
 .../scene2D/include/scene2D/data/Coord.hpp         |   14 +-
 .../scene2D/include/scene2D/data/Event.hpp         |    8 +-
 .../LeafVisu/scene2D/include/scene2D/data/Size.hpp |   15 +-
 .../scene2D/include/scene2D/data/Viewport.hpp      |    6 +-
 .../scene2D/include/scene2D/data/namespace.hpp     |   23 -
 .../LeafVisu/scene2D/include/scene2D/namespace.hpp |   10 +-
 Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp    |   88 +-
 .../LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp  |   27 +-
 .../scene2D/src/scene2D/adaptor/Grid2D.cpp         |   30 +-
 .../scene2D/src/scene2D/adaptor/Histogram.cpp      |   17 +-
 .../src/scene2D/adaptor/HistogramCursor.cpp        |   23 +-
 .../scene2D/src/scene2D/adaptor/HistogramValue.cpp |   21 +-
 .../scene2D/src/scene2D/adaptor/IAdaptor.cpp       |   18 +-
 .../LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp  |   25 +-
 .../scene2D/src/scene2D/adaptor/ScaleValues.cpp    |   37 +-
 .../scene2D/src/scene2D/adaptor/Square.cpp         |   23 +-
 .../src/scene2D/adaptor/TransferFunction.cpp       |   28 +-
 .../src/scene2D/adaptor/ViewportRangeSelector.cpp  |   21 +-
 Bundles/LeafVisu/visuVTK/Properties.cmake          |    1 +
 Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt     |    6 -
 Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake   |    1 +
 .../visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp |   33 +-
 .../include/visuVTKAdaptor/BoxWidget.hpp           |    9 +-
 .../include/visuVTKAdaptor/ImageLandmarks.hpp      |   24 +-
 .../include/visuVTKAdaptor/ImageSlice.hpp          |   48 +-
 .../include/visuVTKAdaptor/NegatoMPR.hpp           |   17 +-
 .../visuVTKAdaptor/PlaneSelectionNotifier.hpp      |   11 +-
 .../include/visuVTKAdaptor/PlaneSelector.hpp       |   10 +-
 .../include/visuVTKAdaptor/ProbeCursor.hpp         |   21 +
 .../include/visuVTKAdaptor/SlicesCursor.hpp        |   37 +-
 .../include/visuVTKAdaptor/Snapshot.hpp            |   41 +-
 .../include/visuVTKAdaptor/Transform.hpp           |   13 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp     |   70 +-
 .../src/visuVTKAdaptor/BoxWidget.cpp               |   50 +-
 .../src/visuVTKAdaptor/ImageLandmarks.cpp          |   19 +-
 .../src/visuVTKAdaptor/ImagePickerInteractor.cpp   |   18 +-
 .../src/visuVTKAdaptor/ImageSlice.cpp              |    1 +
 .../src/visuVTKAdaptor/InteractorStyle.cpp         |   15 +-
 .../src/visuVTKAdaptor/Medical3DCamera.cpp         |   24 +-
 .../src/visuVTKAdaptor/PickerInteractor.cpp        |   29 +-
 .../src/visuVTKAdaptor/PlaneSelector.cpp           |    5 +-
 .../src/visuVTKAdaptor/ProbeCursor.cpp             |    3 +-
 .../src/visuVTKAdaptor/SlicesCursor.cpp            |   36 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp |   47 +-
 Bundles/LeafVisu/visuVTKQt/CMakeLists.txt          |   10 +-
 Bundles/LeafVisu/visuVTKQt/Properties.cmake        |    1 +
 .../visuVTKQt/include/visuVTKQt/Namespace.hpp      |   12 +-
 Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake |    1 -
 .../src/visuVTKVRAdaptor/Volume.cpp                |   19 +-
 .../include/vtkSimpleMesh/SRenderer.hpp            |   48 +-
 .../vtkSimpleMesh/SSimpleMeshDeformation.hpp       |   34 +-
 .../vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp  |   61 +-
 .../src/vtkSimpleMesh/SSimpleMeshDeformation.cpp   |   28 +-
 .../include/vtkSimpleNegato/SRenderer.hpp          |   46 +-
 .../src/vtkSimpleNegato/SRenderer.cpp              |   51 +-
 .../activities/include/activities/namespace.hpp    |   10 +-
 Bundles/core/appXml/include/appXml/Namespace.hpp   |   10 +-
 Bundles/core/appXml2/include/appXml2/Namespace.hpp |   25 +-
 Bundles/core/dataReg/Properties.cmake              |    2 +
 Bundles/core/dataReg/include/dataReg/Namespace.hpp |   46 +-
 Bundles/core/dataReg/include/dataReg/pch.hpp       |   16 +
 Bundles/core/dataReg/src/dataReg/Plugin.cpp        |   28 +-
 Bundles/core/dataReg/src/dataReg/parser/Object.cpp |    6 +-
 .../src/dataReg/parser/TransferFunction.cpp        |   23 +-
 Bundles/core/gui/include/gui/Namespace.hpp         |    5 +-
 Bundles/core/gui/src/gui/action/SStarter.cpp       |   13 +-
 .../core/gui/src/gui/aspect/SDefaultToolBar.cpp    |    7 +-
 Bundles/core/gui/src/gui/view/SDefaultView.cpp     |    8 +-
 Bundles/core/io/include/io/Namespace.hpp           |    9 +-
 Bundles/core/io/src/io/IReader.cpp                 |   30 +-
 Bundles/core/io/src/io/IWriter.cpp                 |   26 +-
 Bundles/core/memory/include/memory/Namespace.hpp   |   14 +-
 Bundles/core/memory/src/memory/SDumpPolicy.cpp     |   20 +-
 Bundles/core/preferences/Properties.cmake          |    1 +
 .../preferences/include/preferences/Plugin.hpp     |   16 +-
 .../include/preferences/SPreferences.hpp           |   12 +-
 .../preferences/include/preferences/namespace.hpp  |   23 +
 Bundles/core/preferences/rc/plugin.xml             |    2 +-
 .../core/preferences/src/preferences/Plugin.cpp    |   32 +-
 .../preferences/src/preferences/SPreferences.cpp   |   10 +-
 .../servicesReg/include/servicesReg/Namespace.hpp  |    9 +-
 Bundles/core/servicesReg/rc/serviceFactory.xsd     |    5 +-
 Bundles/media/rc/icons/AttachmentSeries.svg        |  135 +++
 Bundles/style/CMakeLists.txt                       |   11 +
 Bundles/style/Properties.cmake                     |    7 +
 Bundles/style/rc/darkstyle.qrc                     |   46 +
 Bundles/style/rc/darkstyle.qss                     | 1223 ++++++++++++++++++++
 Bundles/style/rc/darkstyle/Hmovetoolbar.png        |  Bin 0 -> 220 bytes
 Bundles/style/rc/darkstyle/Hsepartoolbar.png       |  Bin 0 -> 172 bytes
 Bundles/style/rc/darkstyle/Vmovetoolbar.png        |  Bin 0 -> 228 bytes
 Bundles/style/rc/darkstyle/Vsepartoolbar.png       |  Bin 0 -> 187 bytes
 Bundles/style/rc/darkstyle/branch_closed-on.png    |  Bin 0 -> 147 bytes
 Bundles/style/rc/darkstyle/branch_closed.png       |  Bin 0 -> 160 bytes
 Bundles/style/rc/darkstyle/branch_open-on.png      |  Bin 0 -> 150 bytes
 Bundles/style/rc/darkstyle/branch_open.png         |  Bin 0 -> 166 bytes
 Bundles/style/rc/darkstyle/checkbox_checked.png    |  Bin 0 -> 492 bytes
 .../rc/darkstyle/checkbox_checked_disabled.png     |  Bin 0 -> 491 bytes
 .../style/rc/darkstyle/checkbox_checked_focus.png  |  Bin 0 -> 512 bytes
 .../style/rc/darkstyle/checkbox_indeterminate.png  |  Bin 0 -> 493 bytes
 .../darkstyle/checkbox_indeterminate_disabled.png  |  Bin 0 -> 492 bytes
 .../rc/darkstyle/checkbox_indeterminate_focus.png  |  Bin 0 -> 514 bytes
 Bundles/style/rc/darkstyle/checkbox_unchecked.png  |  Bin 0 -> 464 bytes
 .../rc/darkstyle/checkbox_unchecked_disabled.png   |  Bin 0 -> 464 bytes
 .../rc/darkstyle/checkbox_unchecked_focus.png      |  Bin 0 -> 483 bytes
 Bundles/style/rc/darkstyle/close-hover.png         |  Bin 0 -> 598 bytes
 Bundles/style/rc/darkstyle/close-pressed.png       |  Bin 0 -> 598 bytes
 Bundles/style/rc/darkstyle/close.png               |  Bin 0 -> 586 bytes
 Bundles/style/rc/darkstyle/down_arrow.png          |  Bin 0 -> 165 bytes
 Bundles/style/rc/darkstyle/down_arrow_disabled.png |  Bin 0 -> 166 bytes
 Bundles/style/rc/darkstyle/left_arrow.png          |  Bin 0 -> 166 bytes
 Bundles/style/rc/darkstyle/left_arrow_disabled.png |  Bin 0 -> 166 bytes
 Bundles/style/rc/darkstyle/radio_checked.png       |  Bin 0 -> 940 bytes
 .../style/rc/darkstyle/radio_checked_disabled.png  |  Bin 0 -> 972 bytes
 Bundles/style/rc/darkstyle/radio_checked_focus.png |  Bin 0 -> 933 bytes
 Bundles/style/rc/darkstyle/radio_unchecked.png     |  Bin 0 -> 728 bytes
 .../rc/darkstyle/radio_unchecked_disabled.png      |  Bin 0 -> 760 bytes
 .../style/rc/darkstyle/radio_unchecked_focus.png   |  Bin 0 -> 724 bytes
 Bundles/style/rc/darkstyle/right_arrow.png         |  Bin 0 -> 160 bytes
 .../style/rc/darkstyle/right_arrow_disabled.png    |  Bin 0 -> 160 bytes
 Bundles/style/rc/darkstyle/sizegrip.png            |  Bin 0 -> 129 bytes
 .../style/rc/darkstyle/stylesheet-branch-end.png   |  Bin 0 -> 224 bytes
 .../style/rc/darkstyle/stylesheet-branch-more.png  |  Bin 0 -> 182 bytes
 Bundles/style/rc/darkstyle/stylesheet-vline.png    |  Bin 0 -> 239 bytes
 Bundles/style/rc/darkstyle/transparent.png         |  Bin 0 -> 195 bytes
 Bundles/style/rc/darkstyle/undock.png              |  Bin 0 -> 578 bytes
 Bundles/style/rc/darkstyle/up_arrow.png            |  Bin 0 -> 158 bytes
 Bundles/style/rc/darkstyle/up_arrow_disabled.png   |  Bin 0 -> 159 bytes
 Bundles/style/rc/plugin.xml                        |    2 +
 CMake/build/config.hpp.in                          |   10 +
 CMake/build/pch.cpp                                |    7 +
 CMake/build/plugin_config.cmake                    |   26 +-
 CMake/build/spyLogLevel.hpp.in                     |   25 +
 CMake/install/generic_install.cmake                |    2 +
 CMake/install/linux/linux_fixup.cmake.in           |   12 +-
 CMake/install/linux/template.sh.in                 |    2 +-
 CMake/install/linux_install.cmake                  |   11 +-
 CMake/modules/PrecompiledHeader.cmake              |  437 +++++++
 CMake/modules/fw-Qt5.cmake                         |    1 -
 CMakeLists.txt                                     |  181 ++-
 README.md                                          |   10 +-
 Samples/Examples/Ex01VolumeRendering/rc/plugin.xml |    3 +
 Samples/Examples/Ex02ImageMix/rc/plugin.xml        |    4 +-
 Samples/Examples/Ex03Registration/Properties.cmake |    4 +-
 Samples/Examples/Ex03Registration/rc/plugin.xml    |  368 +++---
 .../src/Tuto02DataServiceBasicCtrl/Plugin.cpp      |   20 +-
 .../Tutorials/Tuto03DataService/Properties.cmake   |    5 +-
 Samples/Tutorials/Tuto03DataService/rc/plugin.xml  |  208 ++--
 .../Tutorials/Tuto04SignalSlot/Properties.cmake    |    5 +-
 Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml   |  237 ++--
 Samples/Tutorials/Tuto05Mesher/Properties.cmake    |    5 +-
 Samples/Tutorials/Tuto05Mesher/rc/plugin.xml       |  314 +++--
 Samples/Tutorials/Tuto06Filter/Properties.cmake    |    5 +-
 Samples/Tutorials/Tuto06Filter/rc/plugin.xml       |  230 ++--
 .../Tutorials/Tuto08GenericScene/Properties.cmake  |    5 +-
 Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml |  536 +++++----
 .../Tuto09MesherWithGenericScene/rc/plugin.xml     |    4 +
 .../Tutorials/Tuto15Multithread/Properties.cmake   |    5 +-
 .../Tuto15Multithread/rc/configurations/config.xml |  255 ++--
 Samples/Tutorials/Tuto15Multithread/rc/plugin.xml  |    1 -
 .../src/Tuto15MultithreadCtrl/Plugin.cpp           |    8 +-
 SrcLib/core/fwActivities/Properties.cmake          |    1 +
 .../include/fwActivities/builder/factory/new.hpp   |   13 +-
 .../include/fwActivities/validator/factory/new.hpp |   11 +-
 .../src/fwActivities/registry/ActivityMsg.cpp      |   12 +-
 SrcLib/core/fwActivities/test/Properties.cmake     |    2 +-
 .../test/tu/src/validator/DefaultActivityTest.cpp  |   14 +-
 SrcLib/core/fwAtomConversion/CMakeLists.txt        |    2 +-
 SrcLib/core/fwAtomConversion/Properties.cmake      |   13 +-
 .../{camp => camp_ext}/ValueMapper.hpp             |   28 +-
 .../fwAtomConversion/mapper/AttachmentSeries.hpp   |   61 +
 .../fwAtomConversion/mapper/factory/new.hpp        |   10 +-
 .../include/fwAtomConversion/pch.hpp               |   14 +
 .../fwAtomConversion/AtomToDataMappingVisitor.cpp  |  129 ++-
 .../src/fwAtomConversion/DataVisitor.cpp           |   63 +-
 .../fwAtomConversion/mapper/AttachmentSeries.cpp   |   65 ++
 SrcLib/core/fwAtomConversion/test/CMakeLists.txt   |    4 +-
 .../core/fwAtoms/include/fwAtoms/factory/new.hpp   |   12 +-
 SrcLib/core/fwAtomsFilter/CMakeLists.txt           |    2 +-
 SrcLib/core/fwAtomsFilter/Properties.cmake         |    3 +-
 .../include/fwAtomsFilter/factory/new.hpp          |   11 +-
 SrcLib/core/fwAtomsPatch/CMakeLists.txt            |    1 +
 SrcLib/core/fwAtomsPatch/Properties.cmake          |    2 +-
 .../include/fwAtomsPatch/VersionsGraph.hpp         |   17 +-
 .../fwAtomsPatch/patcher/factory/namespace.hpp     |   32 -
 .../include/fwAtomsPatch/patcher/factory/new.hpp   |   12 +-
 .../fwAtomsPatch/patcher/registry/namespace.hpp    |   32 -
 .../fwCamp/include/fwCamp/camp/MapValueMapper.hpp  |    9 +-
 .../include/fwCamp/camp/detail/MapPropertyImpl.hxx |   22 +-
 .../fwCamp/include/fwCamp/factory/namespace.hpp    |   27 -
 SrcLib/core/fwCamp/include/fwCamp/macros.hpp       |   43 +-
 SrcLib/core/fwCamp/include/fwCamp/namespace.hpp    |   19 +-
 .../fwCamp/include/fwCamp/registry/namespace.hpp   |   26 -
 .../fwCom/src/fwCom/helper/SigSlotConnection.cpp   |   10 +-
 SrcLib/core/fwCommand/include/fwCommand/Empty.hpp  |    7 +-
 .../core/fwCommand/include/fwCommand/ICommand.hpp  |   23 +-
 .../core/fwCommand/include/fwCommand/Manager.hpp   |   25 +-
 .../fwCommand/include/fwCommand/PaintCommand.hpp   |    7 +-
 .../include/fwCommand/UndoRedoManager.hpp          |   25 +-
 SrcLib/core/fwCore/include/fwCore/base.hpp         |   14 +-
 SrcLib/core/fwCore/include/fwCore/macros.hpp       |   35 +-
 SrcLib/core/fwCore/include/fwCore/pch.hpp          |   41 +
 SrcLib/core/fwCore/include/fwCore/spyLog.hpp       |  140 +--
 SrcLib/core/fwCore/src/fwCore/Exception.cpp        |   10 +-
 SrcLib/core/fwData/include/fwData/Object.hpp       |   67 +-
 .../include/fwData/TransformationMatrix3D.hpp      |   15 +-
 SrcLib/core/fwData/include/fwData/factory/new.hpp  |   16 +-
 .../fwData/include/fwData/location/ILocation.hpp   |   11 +-
 SrcLib/core/fwData/include/fwData/pch.hpp          |   23 +
 SrcLib/core/fwData/src/fwData/Boolean.cpp          |   16 +-
 SrcLib/core/fwData/src/fwData/Float.cpp            |   14 +-
 SrcLib/core/fwData/src/fwData/Image.cpp            |   39 +-
 SrcLib/core/fwData/src/fwData/Integer.cpp          |   14 +-
 SrcLib/core/fwData/test/tu/src/CopyTest.cpp        |   30 +-
 SrcLib/core/fwData/test/tu/src/ObjectTest.cpp      |    9 +-
 SrcLib/core/fwDataCamp/CMakeLists.txt              |    1 +
 SrcLib/core/fwDataCamp/Properties.cmake            |    3 +-
 SrcLib/core/fwDataCamp/include/fwDataCamp/pch.hpp  |   20 +
 SrcLib/core/fwDataCamp/src/autoload.cpp            |    9 +-
 SrcLib/core/fwDataCamp/test/CMakeLists.txt         |    2 +
 SrcLib/core/fwDataCamp/test/Properties.cmake       |    3 +-
 .../test/tu/include/CompareObjectsTest.hpp         |    4 +-
 .../fwDataCamp/test/tu/src/CompareObjectsTest.cpp  |   65 +-
 .../core/fwDataCamp/test/tu/src/GetObjectTest.cpp  |   31 +-
 SrcLib/core/fwDataIO/CMakeLists.txt                |    3 +-
 SrcLib/core/fwDataIO/Properties.cmake              |    2 +-
 .../core/fwDataIO/include/fwDataIO/Namespace.hpp   |   43 +-
 .../fwDataIO/include/fwDataIO/reader/Namespace.hpp |   24 -
 .../include/fwDataIO/reader/factory/namespace.hpp  |   30 -
 .../include/fwDataIO/reader/factory/new.hpp        |   14 +-
 .../include/fwDataIO/reader/registry/namespace.hpp |   30 -
 .../fwDataIO/include/fwDataIO/writer/Namespace.hpp |   24 -
 .../include/fwDataIO/writer/factory/namespace.hpp  |   30 -
 .../include/fwDataIO/writer/factory/new.hpp        |   14 +-
 .../include/fwDataIO/writer/registry/namespace.hpp |   30 -
 .../src/fwDataIO/reader/DictionaryReader.cpp       |   37 +-
 .../src/fwDataIO/reader/GzBufferImageReader.cpp    |   14 +-
 .../fwDataIO/src/fwDataIO/reader/MeshReader.cpp    |   36 +-
 .../fwDataIO/src/fwDataIO/reader/TagReader.cpp     |   35 +-
 .../src/fwDataIO/writer/GzBufferImageWriter.cpp    |   15 +-
 SrcLib/core/fwDataTools/Properties.cmake           |    2 +-
 .../fieldHelper/MedicalImageHelpers.hpp            |   73 +-
 .../test/tu/include/MedicalImageHelpersTest.hpp    |   35 +
 .../test/tu/src/MedicalImageHelpersTest.cpp        |  170 +++
 SrcLib/core/fwGui/Properties.cmake                 |    2 +-
 SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp    |   24 +-
 .../core/fwGui/include/fwGui/IGuiContainerSrv.hpp  |   49 +-
 SrcLib/core/fwGui/include/fwGui/Namespace.hpp      |   49 +-
 .../core/fwGui/include/fwGui/builder/Namespace.hpp |   24 -
 .../fwGui/include/fwGui/container/Namespace.hpp    |   24 -
 .../core/fwGui/include/fwGui/dialog/Namespace.hpp  |   24 -
 .../core/fwGui/include/fwGui/factory/namespace.hpp |   27 -
 SrcLib/core/fwGui/include/fwGui/factory/new.hpp    |   11 +-
 .../include/fwGui/layoutManager/Namespace.hpp      |   24 -
 .../include/fwGui/registrar/ActionRegistrar.hpp    |   12 +-
 .../fwGui/include/fwGui/registrar/Namespace.hpp    |   24 -
 .../include/fwGui/registrar/ViewRegistrar.hpp      |   45 +-
 .../fwGui/include/fwGui/registry/namespace.hpp     |   27 -
 SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp        |   39 +-
 SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp         |   11 +-
 SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp          |   34 +-
 SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp   |   19 +-
 SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp           |   14 +-
 SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp        |   12 +-
 .../fwGui/src/fwGui/dialog/ILocationDialog.cpp     |    8 +-
 .../fwGui/layoutManager/IFrameLayoutManager.cpp    |   15 +-
 .../fwGui/src/fwGui/registrar/ViewRegistrar.cpp    |   24 +-
 SrcLib/core/fwGuiQt/CMakeLists.txt                 |    2 +-
 SrcLib/core/fwGuiQt/Properties.cmake               |    2 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp            |   15 +-
 .../core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp |   86 +-
 SrcLib/core/fwMedData/Properties.cmake             |    2 +-
 .../include/fwMedData/AttachmentSeries.hpp         |   97 ++
 .../fwMedData/include/fwMedData/DicomSeries.hpp    |   23 +-
 .../fwMedData/include/fwMedData/ImageSeries.hpp    |   12 +-
 .../fwMedData/include/fwMedData/ModelSeries.hpp    |   19 +-
 .../include/fwMedData/NavigationSeries.hpp         |  104 ++
 .../fwMedData/src/fwMedData/ActivitySeries.cpp     |   12 +-
 .../fwMedData/src/fwMedData/AttachmentSeries.cpp   |  109 ++
 .../fwMedData/src/fwMedData/NavigationSeries.cpp   |  145 +++
 SrcLib/core/fwMedData/test/Properties.cmake        |   12 +-
 .../test/tu/include/AttachmentSeriesTest.hpp       |   40 +
 .../test/tu/include/NavigationSeriesTest.hpp       |   40 +
 .../fwMedData/test/tu/src/AttachmentSeriesTest.cpp |  184 +++
 .../fwMedData/test/tu/src/NavigationSeriesTest.cpp |  238 ++++
 SrcLib/core/fwMedDataCamp/CMakeLists.txt           |    3 +
 .../fwTest => core/fwMedDataCamp}/Properties.cmake |    8 +-
 .../include/fwMedDataCamp/ActivitySeries.hpp       |    9 +-
 .../include/fwMedDataCamp/AttachmentSeries.hpp     |   22 +
 .../include/fwMedDataCamp/DicomSeries.hpp          |    9 +-
 .../include/fwMedDataCamp/ImageSeries.hpp          |    9 +-
 .../include/fwMedDataCamp/Series.hpp               |   10 +-
 .../include/fwMedDataCamp/Version.hpp              |   21 +
 .../include/fwMedDataCamp/autoload.hpp             |   13 +-
 .../include/fwMedDataCamp/camp/mapper.hpp          |   85 ++
 .../include/fwMedDataCamp/namespace.hpp            |    3 +-
 .../{fwDataCamp => fwMedDataCamp}/src/autoload.cpp |   13 +-
 .../src/fwMedDataCamp/ActivitySeries.cpp           |    9 +-
 .../src/fwMedDataCamp/AttachmentSeries.cpp         |   36 +
 .../src/fwMedDataCamp/DicomSeries.cpp              |    3 +-
 .../src/fwMedDataCamp/Equipment.cpp                |    6 +-
 .../src/fwMedDataCamp/ImageSeries.cpp              |    9 +-
 .../src/fwMedDataCamp/ModelSeries.cpp              |    7 +-
 .../src/fwMedDataCamp/NavigationSeries.cpp}        |   13 +-
 .../src/fwMedDataCamp/Patient.cpp                  |    6 +-
 .../src/fwMedDataCamp/Series.cpp                   |   12 +-
 .../src/fwMedDataCamp/SeriesDB.cpp                 |    8 +-
 .../src/fwMedDataCamp/Study.cpp                    |    6 +-
 .../fwMedDataCamp/src/fwMedDataCamp/Version.cpp    |   11 +-
 .../test/CMakeLists.txt                            |    1 +
 .../core/fwMedDataCamp/test}/Properties.cmake      |   19 +-
 .../test/tu/include}/ActivitySeriesTest.hpp        |    8 +-
 .../test/tu/include/AttachmentSeriesTest.hpp}      |   12 +-
 .../test/tu/include/CompareObjectsTest.hpp}        |   19 +-
 .../test/tu/include/DataCampHelper.hpp             |   27 +
 .../test/tu/include}/DicomSeriesCampTest.hpp       |    6 +-
 .../test/tu/include}/EquipmentTest.hpp             |    8 +-
 .../test/tu/include}/ImageSeriesTest.hpp           |    8 +-
 .../test/tu/include}/ModelSeriesTest.hpp           |    8 +-
 .../test/tu/include/NavigationSeriesTest.hpp}      |   12 +-
 .../test/tu/include}/PatientTest.hpp               |    8 +-
 .../test/tu/include}/SeriesDBTest.hpp              |    8 +-
 .../test/tu/include}/StudyTest.hpp                 |    8 +-
 .../test/tu/src}/ActivitySeriesTest.cpp            |   17 +-
 .../test/tu/src/AttachmentSeriesTest.cpp}          |   92 +-
 .../test/tu/src/CompareObjectsTest.cpp             |   93 ++
 .../fwMedDataCamp/test/tu/src/DataCampHelper.cpp   |   64 +
 .../test/tu/src}/DicomSeriesCampTest.cpp           |    8 +-
 .../test/tu/src}/EquipmentTest.cpp                 |   15 +-
 .../test/tu/src}/ImageSeriesTest.cpp               |   21 +-
 .../test/tu/src}/ModelSeriesTest.cpp               |   17 +-
 .../test/tu/src/NavigationSeriesTest.cpp           |  142 +++
 .../test/tu/src}/PatientTest.cpp                   |   17 +-
 .../test/tu/src}/SeriesDBTest.cpp                  |   24 +-
 .../test/tu/src}/StudyTest.cpp                     |   17 +-
 SrcLib/core/fwMedDataTools/Properties.cmake        |    1 +
 .../core/fwMemory/include/fwMemory/BufferInfo.hpp  |   23 +-
 .../fwMemory/include/fwMemory/BufferObject.hpp     |   42 +-
 SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp  |   35 +-
 .../fwMemory/include/fwMemory/camp/declare.hpp     |    5 +-
 .../include/fwMemory/policy/factory/new.hpp        |   11 +-
 .../fwMemory/include/fwMemory/stream/in/Buffer.hpp |   13 +-
 .../include/fwMemory/stream/in/IFactory.hpp        |   10 +-
 .../fwMemory/tools/DarwinMemoryMonitorTools.hpp    |   26 +-
 .../include/fwMemory/tools/MemoryMonitorTools.hpp  |   21 +-
 .../fwMemory/tools/PosixMemoryMonitorTools.hpp     |   78 +-
 .../fwMemory/tools/Win32MemoryMonitorTools.hpp     |   25 +-
 SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp |   22 +-
 .../core/fwMemory/src/fwMemory/stream/in/RawZ.cpp  |   99 +-
 .../fwMemory/tools/DarwinMemoryMonitorTools.cpp    |   41 +-
 .../src/fwMemory/tools/MemoryMonitorTools.cpp      |   13 +-
 .../src/fwMemory/tools/PosixMemoryMonitorTools.cpp |  161 ++-
 .../src/fwMemory/tools/Win32MemoryMonitorTools.cpp |   53 +-
 .../{fwDataCamp => fwPreferences}/CMakeLists.txt   |    1 -
 .../fwTest => core/fwPreferences}/Properties.cmake |   13 +-
 .../include/fwPreferences/IPreferences.hpp         |   20 +-
 .../fwPreferences/include/fwPreferences/helper.hpp |   30 +
 .../fwPreferences/src/fwPreferences/helper.cpp     |   99 ++
 .../test/CMakeLists.txt                            |    6 +-
 SrcLib/core/fwPreferences/test/Properties.cmake    |   19 +
 .../test/tu/include/PreferencesTest.hpp            |   44 +
 .../fwPreferences/test/tu/src/PreferencesTest.cpp  |   96 ++
 SrcLib/core/fwRender/Properties.cmake              |    2 +-
 SrcLib/core/fwRuntime/Properties.cmake             |    2 +-
 .../core/fwRuntime/include/fwRuntime/Namespace.hpp |   37 +-
 .../core/fwRuntime/src/EConfigurationElement.cpp   |   13 +-
 SrcLib/core/fwServices/Properties.cmake            |    2 +-
 .../include/fwServices/AppConfigManager2.hpp       |    6 +
 .../include/fwServices/ServiceFactoryRegistrar.hpp |   31 +-
 .../core/fwServices/include/fwServices/macros.hpp  |   44 +-
 .../core/fwServices/include/fwServices/op/Add.hxx  |    6 +-
 .../core/fwServices/include/fwServices/op/Get.hxx  |    6 +-
 .../include/fwServices/registry/AppConfig.hpp      |   25 +-
 .../include/fwServices/registry/AppConfig2.hpp     |   28 +-
 .../fwServices/registry/AppConfigParameters.hpp    |   18 +-
 .../include/fwServices/registry/ServiceConfig.hpp  |   24 +-
 .../include/fwServices/registry/ServiceFactory.hpp |   88 +-
 .../src/fwServices/AppConfigManager2.cpp           |   91 +-
 .../src/fwServices/registry/ObjectService.cpp      |   12 +-
 .../src/fwServices/registry/ServiceFactory.cpp     |  228 ++--
 SrcLib/core/fwServices/test/Properties.cmake       |    6 +-
 .../test/tu/include/ConfigParserTest.hpp           |   11 +-
 .../test/tu/include/SlotsSignalsStuff.hpp          |   54 +-
 .../fwServices/test/tu/include/TestService.hpp     |   42 +-
 .../fwServices/test/tu/include/TestServices.hpp    |   49 +-
 SrcLib/core/fwServices/test/tu/rc/profile.xml      |    8 +
 .../core/fwServices/test/tu/src/AppConfig2Test.cpp |   35 +-
 .../core/fwServices/test/tu/src/AppConfigTest.cpp  |    8 +-
 .../fwServices/test/tu/src/ConfigParserTest.cpp    |  151 +--
 SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp |   25 +-
 SrcLib/core/fwServices/test/tu/src/TestService.cpp |   29 +-
 .../core/fwServices/test/tu/src/TestServices.cpp   |    4 +-
 SrcLib/core/fwThread/CMakeLists.txt                |    3 +-
 SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp  |   24 +-
 .../fwTools/include/fwTools/DynamicAttributes.hxx  |  140 ---
 .../fwTools/include/fwTools/ProgressAdviser.hpp    |   25 +-
 .../fwTools/include/fwTools/ProgressToLogger.hpp   |   12 +-
 SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp   |   13 +-
 .../core/fwTools/include/fwTools/TypeMapping.hpp   |   81 +-
 SrcLib/core/fwTools/include/fwTools/fwID.hpp       |   26 +-
 SrcLib/core/fwTools/include/fwTools/macros.hpp     |  231 ----
 SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp      |    9 +-
 SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp       |   42 +-
 SrcLib/core/fwTools/src/fwTools/fwID.cpp           |   18 +-
 .../{core/fwDataCamp => io/fwCsvIO}/CMakeLists.txt |    1 -
 .../fwMedData => io/fwCsvIO}/Properties.cmake      |    6 +-
 SrcLib/io/fwCsvIO/include/fwCsvIO/CsvReader.hpp    |   62 +
 SrcLib/io/fwCsvIO/include/fwCsvIO/Namespace.hpp    |   16 +
 SrcLib/io/fwCsvIO/src/fwCsvIO/CsvReader.cpp        |  156 +++
 .../fwDataCamp => io/fwCsvIO}/test/CMakeLists.txt  |    6 +-
 SrcLib/io/fwCsvIO/test/Properties.cmake            |   11 +
 .../io/fwCsvIO/test/tu/include/CsvReaderTest.hpp   |   52 +
 SrcLib/io/fwCsvIO/test/tu/src/CsvReaderTest.cpp    |  164 +++
 SrcLib/io/fwDcmtkIO/Properties.cmake               |    1 +
 SrcLib/io/fwDicomIOFilter/Properties.cmake         |    1 +
 .../include/fwDicomIOFilter/IFilter.hpp            |   10 +-
 .../include/fwDicomIOFilter/factory/new.hpp        |   14 +-
 SrcLib/io/fwGdcmIO/include/fwGdcmIO/pch.hpp        |   31 +
 .../writer/iod/InformationObjectDefinition.hpp     |    5 +-
 .../fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp    |    4 +-
 .../fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp |    4 +-
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp   |   83 +-
 .../fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp   |  580 +++++-----
 .../fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp |   11 +-
 .../io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp   |   15 +-
 SrcLib/io/fwItkIO/Properties.cmake                 |    2 +-
 SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx          |   23 +-
 SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx        |   10 +-
 SrcLib/io/fwPacsIO/Properties.cmake                |    1 +
 .../fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp   |   13 +-
 .../fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp  |    8 +-
 .../io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp |   12 +-
 SrcLib/io/fwVtkIO/Properties.cmake                 |    2 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp          |   17 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp              |  161 +--
 SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp        |  141 ++-
 SrcLib/io/vtkGdcmIO/Properties.cmake               |    3 +-
 .../test/tu/src/ImageSeriesWriterTest.cpp          |   23 +-
 SrcLib/patch/fwMDSemanticPatch/Properties.cmake    |    2 +-
 SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions  |    2 +
 SrcLib/patch/fwStructuralPatch/Properties.cmake    |    2 +-
 .../fwDataCamp => pch/pchCore}/CMakeLists.txt      |    1 -
 SrcLib/pch/pchCore/Properties.cmake                |    6 +
 SrcLib/pch/pchCore/include/pchCore/pch.hpp         |   41 +
 SrcLib/pch/pchCore/src/pchCore/pch.cpp             |   11 +
 .../fwDataCamp => pch/pchData}/CMakeLists.txt      |    1 -
 SrcLib/pch/pchData/Properties.cmake                |    6 +
 SrcLib/pch/pchData/include/pchData/pch.hpp         |   22 +
 SrcLib/pch/pchData/src/pchData/pch.cpp             |   11 +
 .../fwDataCamp => pch/pchServices}/CMakeLists.txt  |    1 -
 SrcLib/pch/pchServices/Properties.cmake            |    6 +
 SrcLib/pch/pchServices/include/pchServices/pch.hpp |   27 +
 SrcLib/pch/pchServices/src/pchServices/pch.cpp     |   11 +
 SrcLib/tests/fwTest/Properties.cmake               |    2 +-
 SrcLib/ui/fwDicomIOFilterQt/Properties.cmake       |    2 +-
 .../fwRenderVTK/include/fwRenderVTK/Namespace.hpp  |   26 +-
 .../fwRenderVTK/include/fwRenderVTK/SRender.hpp    |   30 +-
 .../include/fwRenderVTK/factory/namespace.hpp      |   27 -
 .../include/fwRenderVTK/factory/new.hpp            |   13 +-
 .../visu/fwRenderVTK/include/fwRenderVTK/pch.hpp   |   48 +
 .../include/fwRenderVTK/registry/namespace.hpp     |   27 -
 .../include/fwRenderVTK/vtk/Namespace.hpp          |   21 -
 .../src/fwRenderVTK/OffScreenInteractorManager.cpp |   17 +-
 .../visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp   |   28 +-
 696 files changed, 12107 insertions(+), 9469 deletions(-)

diff --git a/.hgignore b/.gitignore
similarity index 67%
rename from .hgignore
rename to .gitignore
index 85e4e5e..16c7455 100644
--- a/.hgignore
+++ b/.gitignore
@@ -7,8 +7,11 @@ syntax: glob
 *.project
 *.pyc
 *.pyo
-# qt creator
-*.user
+# tmp files
+.*~
+*.autosave
+#qtcreator cmake preferences
+*.txt.user
 # reject and backup file
 *.rej
 *.orig
diff --git a/.hgtags b/.hgtags
deleted file mode 100644
index 1352b46..0000000
--- a/.hgtags
+++ /dev/null
@@ -1,123 +0,0 @@
-8b2fab86afa36b6be67b95c40d9580e7efb9842a fw4spl_0.4
-f3dad8e5c26f18c1ed450b73e829a6e4b86f4b27 fw4spl_0.5.0
-f3dad8e5c26f18c1ed450b73e829a6e4b86f4b27 fw4spl_0.5.0
-0000000000000000000000000000000000000000 fw4spl_0.5.0
-0000000000000000000000000000000000000000 fw4spl_0.5.0
-a2c98d22c36d6997b1b191a1610af97b41a4677a fw4spl_0.5.0
-f293a4a4fc6c976beeca6afd4f6280baab2f2e29 experimental_0.1.0
-7ecb860582b3d6a7f7b72d6464b27f88827f1f16 fw4spl_0.5.1
-cab8f119d12758e8e2463e6644e88b73203ce76a fw4spl_0.5.2
-cab8f119d12758e8e2463e6644e88b73203ce76a fw4spl_0.5.2
-0000000000000000000000000000000000000000 fw4spl_0.5.2
-0000000000000000000000000000000000000000 fw4spl_0.5.2
-5fb2251fcd8fc54b893d8712fcffba948cd828c7 fw4spl_0.5.2
-c9e6b411509616545ccbc77a89c984bcc0be9d3e fw4spl_0.6.0.1
-609b8ee1efb1ec9cd81c908618638ce0e3ea4d8d fw4spl_0.6.0.2
-ebaabb5ee69cf9102e02fd5b9e8360f4dc5431b0 fw4spl_0.6.0.3
-e77bb50c682d1d16b561664c59f708273fa0ac1a fw4spl_0.6.1.0
-ccf798d2db242d3cdce789eca8d01a983c15e5bf fw4spl_0.6.0.4
-e5a1535ef50b9a3612d4f9bd99f97075044c9aed fw4spl_0.6.2.0
-6a82531491adb0497b5c1e7ee79830acb1cbed7a experimentalFwServices_0.1.0
-f1f79477e215f19b36a2f541a5fe10f686bf5819 fw4spl_0.6.3.0
-6a24af6f58cf43f2e841c1c573010ae589815c17 fw4spl_0.6.2.1
-def4b0536a1d5185802fcc41bdd50cdb4d2aedea multiGui_0
-2e75de46941fe3a174c9c989012f908a0cede8df fw4spl_0.7.0.1
-ad546fca30f7b909ece47370b09f985d96a47d93 fw4spl_0.7.0.2
-6e58fe91fc96b22046cd540a6dd943899e240876 fw4spl_0.7.0.3
-e8368078bbe002be374084bcefa5c77fe90e53d4 fw4spl_0.7.0.4
-3442b53e2597c61f7d9bc6db83a2e72d2124f217 fw4spl_0.6.2.2
-2a3461ccce6894b20cc0f97779351ad9d015036b fw4spl_0.6.3.1
-1382cac10cadf93c0ce076947b86a38ec64281ca multiGui_1
-008d8f10cfffb38dc45a5e98d2a06c62169fa6e8 fw4spl_0.7.0.5
-0000000000000000000000000000000000000000 fw4spl_0.7.2
-ee7c147c1129220550c242ab3025d94f83126e22 fw4spl_0.7.2
-ee7c147c1129220550c242ab3025d94f83126e22 fw4spl_0.7.2
-0000000000000000000000000000000000000000 fw4spl_0.7.2
-ee7c147c1129220550c242ab3025d94f83126e22 fw4spl_0.7.1.0
-bf0d810ec11a8029092f0eb2fd2bd82683fc8c76 fw4spl_0.7.0.6
-4db7221bdcc70102cf47a76339b4722bc8ae8fed fw4spl_0.7.1.1
-6ab46e87343a2e8b0cabe503555849eadfc8f1d9 workshop-tw-2010.0
-16a7298093989a9098532eacff8c1b9137a3bebf fw4spl_0.7.1.2
-bd63b3f2a358532f3125ecd81e251c43577ef2fc fw4spl_0.7.2.0
-2a406b961c1d19f72576c28cb3387f015691826c fw4spl_0.7.3.0
-2652be53eebb509e7038f189e888f49429871033 fw4spl_0.7.3.1
-092e63003b56f33553ff9e1f179e3fcde68dead7 fw4spl_0.7.2.1
-c395bf56eb88c86d3bc907ed8d3c156c68082be0 fw4spl_0.7.3.2
-1c2286f1f945334bd8dfeb1e6dcb11ee2643cc28 fw4spl_0.7.3.3
-764af7bd3feae6c56044a8f3e363fbd86487c86a fw4spl_0.7.4.0
-e5e23c1f1eed3e6bb8f5db4611537715ecad603f fw4spl_0.7.4.1
-ba4dc4b00464e871bc759ec6f9fd4ca6d00189d7 fw4spl_0.7.2.2
-8d54571bdebfb585c03980a05a3cc6bad3ff240e fw4spl_0.7.3.4
-000bcce040f45262bb02af97b7e026af0c024c95 fw4spl_0.7.4.2
-a671d3636b2ecccfdd698eac65b0ed5c70bce131 fw4spl_0.7.5.0
-2e68938b619d1955ae1a1bc03a8e50eb2d735998 fw4spl_0.7.6.0
-35b4bbfc7842e9d270238fb2623a5f07a5370545 fw4spl_0.7.5.1
-35880468ccaedb2ebc2d48f50b5bccd0177a9697 fw4spl_0.7.6.1
-4622bc6b6eae64876406af4b3778394c6c2b5708 fw4spl_0.7.4.3
-640135ac2d04cf7424a61c21dea082cfa2ebaf7a fw4spl_0.7.6.2
-507b0dcd6d29e3d71f73035c6c5c47c34aa77c14 fw4spl_0.7.6.3
-fbd10e84e11fc322b0b723231f071da01bd76c66 fw4spl_0.7.7.0
-ff9578023e08c339d572acc3c1f4ec93705fdd03 fw4spl_0.7.7.1
-149e15137145f73be4834afca24f28e9a00164db fw4spl_0.7.7.2
-66c56c74973493d8ec436396cb096d123dde5620 fw4spl_0.7.8.0
-226ce8a2bd53b8dfd2cf99f0a3c16fdb13a100c5 fw4spl_0.7.8.1
-3d7f87f1a902299bafdc5ee6368378b318fe6ff6 fw4spl_0.7.9.0
-7580521d31d1dfdcc24d381051dd8102e17f500b fw4spl_0.8.0.0
-9fb39a40f2af066df4caf9ab70fb7ea68d37e336 fw4spl_0.7.9.1
-8f8aa49d1ed6f2f087b36a5d93f3f34c8cb5db30 fw4spl_0.7.7.3
-252086a2aa3b6db977144149859d6429cb0c7173 fw4spl_0.7.9.2
-252086a2aa3b6db977144149859d6429cb0c7173 fw4spl_0.7.9.2
-0000000000000000000000000000000000000000 fw4spl_0.7.9.2
-0000000000000000000000000000000000000000 fw4spl_0.7.9.2
-0afad68f7cd18077fcdb918eeb9dc60058ec9919 fw4spl_0.7.9.2
-e3d9b6ebc65a64dac70913bcf04db2ff0b4abb98 fw4spl_0.7.9.3
-e3d9b6ebc65a64dac70913bcf04db2ff0b4abb98 fw4spl_0.7.9.3
-1eceb79a30a48e1e2b1c407396a21529e8c9f67e fw4spl_0.7.9.3
-7240b1b6caeef6495e0aef0804b2be90564df949 fw4spl_0.7.9.4
-b819a6c88f10179257c4925a52aed2beec4eea67 fw4spl_0.8.1.0
-464981214c828dca362904e441fb89bf0bf3d7c4 fw4spl_0.8.1.1
-b5624619302209b9b537aed32a00ea960f764785 fw4spl_0.8.2.0
-024e68b31b72a99954fce6aca69bf8e0e8cf66cd fw4spl_0.7.9.5
-c98ad90e5a50adb86715bed8492d8ad79487ca17 fw4spl_0.8.1.2
-adff1ce9402e557a42d62d14d11b9b74c20d2c63 fw4spl_0.8.2.1
-e4ce8e4de1a22c18065f695cf2497a686b35e29a fw4spl_0.8.3.0
-9683c5f861cd3cec20b0e2b36c37a8ee88ac2825 fw4spl_0.7.9.6
-88be7514f2a36babe5a09462439a222030c1a690 fw4spl_0.8.2.2
-3b1e8e0811584b4d7b8190c54b3b14431582c134 fw4spl_0.8.3.1
-d5c427efd66d0f6675e298c86715e3fe9248cc0a fw4spl_0.8.2.3
-9683c5f861cd3cec20b0e2b36c37a8ee88ac2825 fw4spl_0.7.9.6
-488f8d22d7ba07fcd3c01b96bdbcb83cad130aec fw4spl_0.7.9.6
-d5c427efd66d0f6675e298c86715e3fe9248cc0a fw4spl_0.8.2.3
-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
-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
index 99ede51..e21be65 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,10 +12,15 @@ addons:
     - gnuplot
 branches:
     only:
-        - fw4spl_0.11.0
+        - dev
 compiler:
     - gcc
 before_script:
+    - git clone https://github.com/fw4spl-org/fw4spl-git.git fw4spl-git
+    - cd fw4spl-git
+    - git checkout travis
+    - git config --global codingstyle-hook.uncrustify-path `pwd`/hooks/uncrustify
+    - cd ..
     - 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
@@ -29,8 +34,12 @@ before_script:
     - 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
+    - $CMAKE_BIN -DCMAKE_INSTALL_PREFIX:PATH=/tmp $TRAVIS_BUILD_DIR/ -DBUILD_DOCUMENTATION:BOOL=ON -DBUILD_TESTS:BOOL=OFF -DDOXYGEN_EXECUTABLE:FILEPATH=$DOXYGEN_BIN -DENABLE_PCH:BOOL=OFF
+    - cd $TRAVIS_BUILD_DIR
+script:
+    - fw4spl-git/hooks/sheldon $TRAVIS_COMMIT_RANGE
+    - cd $TRAVIS_BUILD_DIR/build
+    - make doc
 after_success:
     - git config --global user.name 'travis'
     - git config --global user.email 'travis'
diff --git a/Apps/VRRender/Properties.cmake b/Apps/VRRender/Properties.cmake
index 704a15e..b3ffe11 100644
--- a/Apps/VRRender/Properties.cmake
+++ b/Apps/VRRender/Properties.cmake
@@ -38,6 +38,7 @@ set( REQUIREMENTS
     dicomPacsWriterActivity
 
     media
+    style
 
     patchMedicalData
 
@@ -46,4 +47,12 @@ set( REQUIREMENTS
     preferences
 )
 
+bundleParam(guiQt 
+    PARAM_LIST 
+        resource
+        stylesheet 
+    PARAM_VALUES 
+        ${BUNDLE_PREFIX}/style_0-1/darkstyle.rcc 
+        ${BUNDLE_PREFIX}/style_0-1/darkstyle.qss
+)
 bundleParam(appXml2 PARAM_LIST config parameters PARAM_VALUES VRRenderBase VRRenderAppBase)
diff --git a/Apps/VRRender/doc/Makefile b/Apps/VRRender/doc/Makefile
deleted file mode 100644
index d746c38..0000000
--- a/Apps/VRRender/doc/Makefile
+++ /dev/null
@@ -1,88 +0,0 @@
-# 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
deleted file mode 100755
index 9d02306..0000000
--- a/Apps/VRRender/doc/htmlhelpTowxHtmlHelp
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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
deleted file mode 100644
index 0eb72e0..0000000
--- a/Apps/VRRender/doc/make.bat
+++ /dev/null
@@ -1,112 +0,0 @@
- 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
deleted file mode 100755
index fe934ce..0000000
--- a/Apps/VRRender/doc/makeall.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/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
deleted file mode 100755
index 54ca553..0000000
--- a/Apps/VRRender/doc/source/2D_Landmarks.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100755
index 3569345..0000000
--- a/Apps/VRRender/doc/source/2D_MPR.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-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
deleted file mode 100755
index ed00eb7..0000000
--- a/Apps/VRRender/doc/source/3D_Distances.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-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
deleted file mode 100755
index 1c20592..0000000
--- a/Apps/VRRender/doc/source/3D_Medical_Image_Visu.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-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
deleted file mode 100755
index b596570..0000000
--- a/Apps/VRRender/doc/source/3D_Models_Manipulation.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-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
deleted file mode 100755
index 8d167b7..0000000
--- a/Apps/VRRender/doc/source/3D_Models_Properties.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100755
index e58e68a..0000000
--- a/Apps/VRRender/doc/source/3D_Resection.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-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
deleted file mode 100755
index f8a3c93..0000000
--- a/Apps/VRRender/doc/source/3D_Volume_Rendering.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index 89a1ae1..0000000
--- a/Apps/VRRender/doc/source/Acknowledgment.rst
+++ /dev/null
@@ -1,136 +0,0 @@
-
-.. _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
deleted file mode 100755
index 0e98072..0000000
--- a/Apps/VRRender/doc/source/Basic_Image_Filtering.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100755
index 084020d..0000000
--- a/Apps/VRRender/doc/source/Export_Data.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-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
deleted file mode 100755
index ca8ee7b..0000000
--- a/Apps/VRRender/doc/source/Help_menu.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-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
deleted file mode 100755
index 065bd3e..0000000
--- a/Apps/VRRender/doc/source/Introduction.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-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
deleted file mode 100755
index aa08f46..0000000
--- a/Apps/VRRender/doc/source/Licence.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-
-.. _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
deleted file mode 100755
index 95a896e..0000000
--- a/Apps/VRRender/doc/source/Minimal_config.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-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
deleted file mode 100755
index 1191f37..0000000
--- a/Apps/VRRender/doc/source/Read_and_Select_Data.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-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
deleted file mode 100755
index 95c4a3e..0000000
--- a/Apps/VRRender/doc/source/Shortcuts.rst
+++ /dev/null
@@ -1,138 +0,0 @@
-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
deleted file mode 100755
index 32c072f..0000000
--- a/Apps/VRRender/doc/source/Start_VR_Planning.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-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
deleted file mode 100755
index f2194dc..0000000
--- a/Apps/VRRender/doc/source/Tool_bar.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-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
deleted file mode 100755
index 67af1e7..0000000
--- a/Apps/VRRender/doc/source/Transfert_function.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-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
deleted file mode 100755
index 8c20e45..0000000
--- a/Apps/VRRender/doc/source/What_is_Volume_Rendering.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-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
deleted file mode 100755
index 858f252..0000000
--- a/Apps/VRRender/doc/source/Windows_Installation.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-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
deleted file mode 100755
index e510c23..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-New-Resection.png and /dev/null 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
deleted file mode 100755
index f67ebed..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Planning-View-00.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-First.png b/Apps/VRRender/doc/source/_static/3D-Resect-First.png
deleted file mode 100755
index 69dd59e..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-First.png and /dev/null 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
deleted file mode 100755
index 633649e..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-cutting-planes.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-manage.png b/Apps/VRRender/doc/source/_static/3D-Resect-manage.png
deleted file mode 100755
index 475a409..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-manage.png and /dev/null 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
deleted file mode 100755
index 3f19da4..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-plane-side.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-start.png b/Apps/VRRender/doc/source/_static/3D-Resect-start.png
deleted file mode 100755
index 322ccb7..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-start.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-volume.png b/Apps/VRRender/doc/source/_static/3D-Resect-volume.png
deleted file mode 100755
index fecb5e5..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-Resect-volume.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-distance.png b/Apps/VRRender/doc/source/_static/3D-distance.png
deleted file mode 100755
index 815bf3c..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-distance.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-landmark.png b/Apps/VRRender/doc/source/_static/3D-landmark.png
deleted file mode 100755
index 635fa12..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-landmark.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-rotate.png b/Apps/VRRender/doc/source/_static/3D-rotate.png
deleted file mode 100755
index f628507..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-rotate.png and /dev/null 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
deleted file mode 100755
index 3e68e07..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-scan-1-3.png and /dev/null 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
deleted file mode 100755
index 4624ef5..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-scan-GL-value.png and /dev/null 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
deleted file mode 100755
index eccdea6..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-scan-ax-front-sag.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-scan-contrast.png b/Apps/VRRender/doc/source/_static/3D-scan-contrast.png
deleted file mode 100755
index 09897bd..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-scan-contrast.png and /dev/null 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
deleted file mode 100755
index 6e2a27d..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-show-hide-organs.png and /dev/null 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
deleted file mode 100755
index 5aa38c1..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-show-hide-scan.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-translation.png b/Apps/VRRender/doc/source/_static/3D-translation.png
deleted file mode 100755
index ddae1ef..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-translation.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-transparency.png b/Apps/VRRender/doc/source/_static/3D-transparency.png
deleted file mode 100755
index 20054ce..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-transparency.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-turn.png b/Apps/VRRender/doc/source/_static/3D-turn.png
deleted file mode 100755
index 6af3a15..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-turn.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/3D-zoom.png b/Apps/VRRender/doc/source/_static/3D-zoom.png
deleted file mode 100755
index b1543c1..0000000
Binary files a/Apps/VRRender/doc/source/_static/3D-zoom.png and /dev/null 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
deleted file mode 100755
index 194b1b1..0000000
Binary files a/Apps/VRRender/doc/source/_static/Add-Find-View-landmark.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Add-landmark.png b/Apps/VRRender/doc/source/_static/Add-landmark.png
deleted file mode 100755
index 33a4b2f..0000000
Binary files a/Apps/VRRender/doc/source/_static/Add-landmark.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Add-plan1.png b/Apps/VRRender/doc/source/_static/Add-plan1.png
deleted file mode 100755
index d78bbae..0000000
Binary files a/Apps/VRRender/doc/source/_static/Add-plan1.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Add-plan2.png b/Apps/VRRender/doc/source/_static/Add-plan2.png
deleted file mode 100755
index b9d130b..0000000
Binary files a/Apps/VRRender/doc/source/_static/Add-plan2.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/AddTool.png b/Apps/VRRender/doc/source/_static/AddTool.png
deleted file mode 100755
index 5e4bbc2..0000000
Binary files a/Apps/VRRender/doc/source/_static/AddTool.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Find-landmark.png b/Apps/VRRender/doc/source/_static/Find-landmark.png
deleted file mode 100755
index 4071446..0000000
Binary files a/Apps/VRRender/doc/source/_static/Find-landmark.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Mode-VR.png b/Apps/VRRender/doc/source/_static/Mode-VR.png
deleted file mode 100755
index 5263d21..0000000
Binary files a/Apps/VRRender/doc/source/_static/Mode-VR.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-01.png b/Apps/VRRender/doc/source/_static/Negato-01.png
deleted file mode 100755
index 00444e1..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-01.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-Distance.png b/Apps/VRRender/doc/source/_static/Negato-Distance.png
deleted file mode 100755
index f7dcd28..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-Distance.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-Zoom.png b/Apps/VRRender/doc/source/_static/Negato-Zoom.png
deleted file mode 100755
index 8e6514f..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-Zoom.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-axes.png b/Apps/VRRender/doc/source/_static/Negato-axes.png
deleted file mode 100755
index ab032fc..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-axes.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-contrast.png b/Apps/VRRender/doc/source/_static/Negato-contrast.png
deleted file mode 100755
index 3726356..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-contrast.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-filter.png b/Apps/VRRender/doc/source/_static/Negato-filter.png
deleted file mode 100755
index f89c687..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-filter.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-info.png b/Apps/VRRender/doc/source/_static/Negato-info.png
deleted file mode 100755
index 1e1440c..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-info.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-landmarks.png b/Apps/VRRender/doc/source/_static/Negato-landmarks.png
deleted file mode 100755
index 0bd0219..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-landmarks.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-translate.png b/Apps/VRRender/doc/source/_static/Negato-translate.png
deleted file mode 100755
index abaf0a2..0000000
Binary files a/Apps/VRRender/doc/source/_static/Negato-translate.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Resection.png b/Apps/VRRender/doc/source/_static/Resection.png
deleted file mode 100755
index 8e2fd63..0000000
Binary files a/Apps/VRRender/doc/source/_static/Resection.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Resection2.png b/Apps/VRRender/doc/source/_static/Resection2.png
deleted file mode 100755
index e6a1249..0000000
Binary files a/Apps/VRRender/doc/source/_static/Resection2.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/Tool-bar-planning.png b/Apps/VRRender/doc/source/_static/Tool-bar-planning.png
deleted file mode 100755
index 267fe1f..0000000
Binary files a/Apps/VRRender/doc/source/_static/Tool-bar-planning.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-01.jpg b/Apps/VRRender/doc/source/_static/VR-01.jpg
deleted file mode 100755
index 8f94f80..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-01.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-DEF.jpg b/Apps/VRRender/doc/source/_static/VR-DEF.jpg
deleted file mode 100755
index 7147434..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-DEF.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-01.jpg b/Apps/VRRender/doc/source/_static/VR-TF-01.jpg
deleted file mode 100755
index 03f94e6..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-01.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-02.jpg b/Apps/VRRender/doc/source/_static/VR-TF-02.jpg
deleted file mode 100755
index 1090a38..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-02.jpg and /dev/null 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
deleted file mode 100755
index 79ccb40..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png and /dev/null 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
deleted file mode 100755
index 12cc9f3..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg and /dev/null 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
deleted file mode 100755
index 53363bc..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg b/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg
deleted file mode 100755
index 949a2e9..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg and /dev/null 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
deleted file mode 100755
index aed00c9..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg and /dev/null 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
deleted file mode 100755
index 552421b..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-cutting.jpg b/Apps/VRRender/doc/source/_static/VR-cutting.jpg
deleted file mode 100755
index 805ed33..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-cutting.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR-manip.jpg b/Apps/VRRender/doc/source/_static/VR-manip.jpg
deleted file mode 100755
index f450e5c..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR-manip.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR.png b/Apps/VRRender/doc/source/_static/VR.png
deleted file mode 100755
index cdb175d..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VRPlanning.png b/Apps/VRRender/doc/source/_static/VRPlanning.png
deleted file mode 100755
index 39e87cb..0000000
Binary files a/Apps/VRRender/doc/source/_static/VRPlanning.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR_WLE_html.png b/Apps/VRRender/doc/source/_static/VR_WLE_html.png
deleted file mode 100755
index 243ea53..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR_WLE_html.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/VR_html.png b/Apps/VRRender/doc/source/_static/VR_html.png
deleted file mode 100755
index 947a0ab..0000000
Binary files a/Apps/VRRender/doc/source/_static/VR_html.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/View-INFO.png b/Apps/VRRender/doc/source/_static/View-INFO.png
deleted file mode 100755
index 058c290..0000000
Binary files a/Apps/VRRender/doc/source/_static/View-INFO.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/View-landmark.png b/Apps/VRRender/doc/source/_static/View-landmark.png
deleted file mode 100755
index 1951d6f..0000000
Binary files a/Apps/VRRender/doc/source/_static/View-landmark.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/apple.png b/Apps/VRRender/doc/source/_static/acknowledgment/apple.png
deleted file mode 100755
index b27ea73..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/apple.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/boost.png b/Apps/VRRender/doc/source/_static/acknowledgment/boost.png
deleted file mode 100755
index 9105c39..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/boost.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png b/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png
deleted file mode 100755
index de77173..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png b/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png
deleted file mode 100755
index 035502d..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png b/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png
deleted file mode 100755
index cf317a8..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png b/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png
deleted file mode 100755
index 98d9a50..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png b/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png
deleted file mode 100755
index 6208433..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png b/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png
deleted file mode 100755
index aba2767..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png b/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png
deleted file mode 100755
index 479bd0d..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png b/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png
deleted file mode 100755
index 5fa3a86..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png b/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png
deleted file mode 100755
index 897baf7..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png b/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png
deleted file mode 100755
index a066e94..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/itk.png b/Apps/VRRender/doc/source/_static/acknowledgment/itk.png
deleted file mode 100755
index 726110a..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/itk.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png b/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png
deleted file mode 100755
index 4449d61..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png b/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png
deleted file mode 100755
index 9f197cc..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png b/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png
deleted file mode 100755
index e0c0451..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png b/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png
deleted file mode 100755
index 9f2073b..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png b/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png
deleted file mode 100755
index 1a2bfbc..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/linux.png b/Apps/VRRender/doc/source/_static/acknowledgment/linux.png
deleted file mode 100755
index 49bf66a..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/linux.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png b/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png
deleted file mode 100755
index c4bc479..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/ms.png b/Apps/VRRender/doc/source/_static/acknowledgment/ms.png
deleted file mode 100755
index 2483141..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/ms.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png b/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png
deleted file mode 100755
index a4d2b17..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/python.png b/Apps/VRRender/doc/source/_static/acknowledgment/python.png
deleted file mode 100755
index de80d7d..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/python.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/scons.png b/Apps/VRRender/doc/source/_static/acknowledgment/scons.png
deleted file mode 100755
index ef89121..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/scons.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png b/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png
deleted file mode 100755
index 3206d4e..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vim.png b/Apps/VRRender/doc/source/_static/acknowledgment/vim.png
deleted file mode 100755
index 69c1d59..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/vim.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png b/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png
deleted file mode 100755
index 5513663..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png b/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png
deleted file mode 100755
index e559920..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png b/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png
deleted file mode 100755
index 1013778..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/wix.png b/Apps/VRRender/doc/source/_static/acknowledgment/wix.png
deleted file mode 100755
index 55196d9..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/wix.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/wx.png b/Apps/VRRender/doc/source/_static/acknowledgment/wx.png
deleted file mode 100755
index 562b129..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/wx.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png b/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png
deleted file mode 100755
index 8576eed..0000000
Binary files a/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/axial-view.jpg b/Apps/VRRender/doc/source/_static/axial-view.jpg
deleted file mode 100755
index 8604c62..0000000
Binary files a/Apps/VRRender/doc/source/_static/axial-view.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/basic.css b/Apps/VRRender/doc/source/_static/basic.css
deleted file mode 100755
index ed737d3..0000000
--- a/Apps/VRRender/doc/source/_static/basic.css
+++ /dev/null
@@ -1,414 +0,0 @@
-/**
- * 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
deleted file mode 100755
index 1e8e886..0000000
Binary files a/Apps/VRRender/doc/source/_static/camera-photo.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/danger.png b/Apps/VRRender/doc/source/_static/danger.png
deleted file mode 100755
index 5fc8c7c..0000000
Binary files a/Apps/VRRender/doc/source/_static/danger.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/default.css b/Apps/VRRender/doc/source/_static/default.css
deleted file mode 100755
index c13ed68..0000000
--- a/Apps/VRRender/doc/source/_static/default.css
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * 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
deleted file mode 100755
index 7c00070..0000000
Binary files a/Apps/VRRender/doc/source/_static/distance.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/doctools.js b/Apps/VRRender/doc/source/_static/doctools.js
deleted file mode 100755
index 9447678..0000000
--- a/Apps/VRRender/doc/source/_static/doctools.js
+++ /dev/null
@@ -1,232 +0,0 @@
-/// 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
deleted file mode 100755
index aba2767..0000000
Binary files a/Apps/VRRender/doc/source/_static/ehealth.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/file.png b/Apps/VRRender/doc/source/_static/file.png
deleted file mode 100755
index d18082e..0000000
Binary files a/Apps/VRRender/doc/source/_static/file.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/frontal-view.jpg b/Apps/VRRender/doc/source/_static/frontal-view.jpg
deleted file mode 100755
index 987e9d3..0000000
Binary files a/Apps/VRRender/doc/source/_static/frontal-view.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-2D.png b/Apps/VRRender/doc/source/_static/icon-2D.png
deleted file mode 100755
index c802c3f..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-2D.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-3D.png b/Apps/VRRender/doc/source/_static/icon-3D.png
deleted file mode 100755
index 950234a..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-3D.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-VR.png b/Apps/VRRender/doc/source/_static/icon-VR.png
deleted file mode 100755
index 787163e..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-VR.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-axial.png b/Apps/VRRender/doc/source/_static/icon-axial.png
deleted file mode 100755
index ba1b7de..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-axial.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-frontal.png b/Apps/VRRender/doc/source/_static/icon-frontal.png
deleted file mode 100755
index 3622453..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-frontal.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-sagittal.png b/Apps/VRRender/doc/source/_static/icon-sagittal.png
deleted file mode 100755
index 36e9989..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-sagittal.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icon-windows.jpg b/Apps/VRRender/doc/source/_static/icon-windows.jpg
deleted file mode 100755
index 50569cb..0000000
Binary files a/Apps/VRRender/doc/source/_static/icon-windows.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-F9.png b/Apps/VRRender/doc/source/_static/icone-F9.png
deleted file mode 100755
index 8cc739a..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-F9.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-01.jpg b/Apps/VRRender/doc/source/_static/icone-VR-01.jpg
deleted file mode 100755
index 85fdc80..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-01.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-02.jpg b/Apps/VRRender/doc/source/_static/icone-VR-02.jpg
deleted file mode 100755
index 56d33d1..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-02.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-03.jpg b/Apps/VRRender/doc/source/_static/icone-VR-03.jpg
deleted file mode 100755
index 05c0bf5..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-03.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-04.jpg b/Apps/VRRender/doc/source/_static/icone-VR-04.jpg
deleted file mode 100755
index 4b9056e..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-04.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-05.jpg b/Apps/VRRender/doc/source/_static/icone-VR-05.jpg
deleted file mode 100755
index 7c76565..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-05.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-06.jpg b/Apps/VRRender/doc/source/_static/icone-VR-06.jpg
deleted file mode 100755
index da21b0e..0000000
Binary files a/Apps/VRRender/doc/source/_static/icone-VR-06.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/info-patient.png b/Apps/VRRender/doc/source/_static/info-patient.png
deleted file mode 100755
index f4c6919..0000000
Binary files a/Apps/VRRender/doc/source/_static/info-patient.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/jquery.js b/Apps/VRRender/doc/source/_static/jquery.js
deleted file mode 100755
index 82b98e1..0000000
--- a/Apps/VRRender/doc/source/_static/jquery.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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
deleted file mode 100755
index da1c562..0000000
Binary files a/Apps/VRRender/doc/source/_static/minus.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/openDicom.png b/Apps/VRRender/doc/source/_static/openDicom.png
deleted file mode 100755
index 3db1a30..0000000
Binary files a/Apps/VRRender/doc/source/_static/openDicom.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/openDicom_openFxz.png b/Apps/VRRender/doc/source/_static/openDicom_openFxz.png
deleted file mode 100755
index 14bef5d..0000000
Binary files a/Apps/VRRender/doc/source/_static/openDicom_openFxz.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/openFxz.png b/Apps/VRRender/doc/source/_static/openFxz.png
deleted file mode 100755
index c63c40e..0000000
Binary files a/Apps/VRRender/doc/source/_static/openFxz.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/operation.png b/Apps/VRRender/doc/source/_static/operation.png
deleted file mode 100755
index 14d826c..0000000
Binary files a/Apps/VRRender/doc/source/_static/operation.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/plus.png b/Apps/VRRender/doc/source/_static/plus.png
deleted file mode 100755
index b3cb374..0000000
Binary files a/Apps/VRRender/doc/source/_static/plus.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/pygments.css b/Apps/VRRender/doc/source/_static/pygments.css
deleted file mode 100755
index 1f2d2b6..0000000
--- a/Apps/VRRender/doc/source/_static/pygments.css
+++ /dev/null
@@ -1,61 +0,0 @@
-.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
deleted file mode 100755
index ed91eea..0000000
Binary files a/Apps/VRRender/doc/source/_static/sagittal-view.jpg and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/searchtools.js b/Apps/VRRender/doc/source/_static/searchtools.js
deleted file mode 100755
index a243b15..0000000
--- a/Apps/VRRender/doc/source/_static/searchtools.js
+++ /dev/null
@@ -1,467 +0,0 @@
-/**
- * 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/Apps/VRRender/doc/source/_static/sliceHide.png b/Apps/VRRender/doc/source/_static/sliceHide.png
deleted file mode 100755
index 14a1f34..0000000
Binary files a/Apps/VRRender/doc/source/_static/sliceHide.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/sliceShow.png b/Apps/VRRender/doc/source/_static/sliceShow.png
deleted file mode 100755
index 84c4fe9..0000000
Binary files a/Apps/VRRender/doc/source/_static/sliceShow.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/video.png b/Apps/VRRender/doc/source/_static/video.png
deleted file mode 100755
index ff4bca2..0000000
Binary files a/Apps/VRRender/doc/source/_static/video.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/view_frontal.png b/Apps/VRRender/doc/source/_static/view_frontal.png
deleted file mode 100755
index f1bc533..0000000
Binary files a/Apps/VRRender/doc/source/_static/view_frontal.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/_static/view_profil.png b/Apps/VRRender/doc/source/_static/view_profil.png
deleted file mode 100755
index 40fd8a4..0000000
Binary files a/Apps/VRRender/doc/source/_static/view_profil.png and /dev/null differ
diff --git a/Apps/VRRender/doc/source/conf.py b/Apps/VRRender/doc/source/conf.py
deleted file mode 100644
index f160cc5..0000000
--- a/Apps/VRRender/doc/source/conf.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# FW4SPL - Copyright (C) IRCAD, 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
deleted file mode 100755
index 95bcc24..0000000
--- a/Apps/VRRender/doc/source/index.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-.. 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/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml
index 769414c..8e2b9f0 100644
--- a/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml
@@ -110,7 +110,7 @@
             <in key="image" uid="${image}" />
         </service>
         <service uid="ActionLoadLandmark" type="::uiMeasurement::action::LoadLandmark" >
-            <in key="image" uid="${image}" />
+            <inout key="image" uid="${image}" />
         </service>
         <service uid="ActionSaveLandmark" type="::uiMeasurement::action::SaveLandmark" >
             <in key="image" uid="${image}" />
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml
index 93570e3..9733eb4 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml
@@ -44,7 +44,7 @@
             <registry>
                 <view sid="sliceListNegatoEditor" start="no" />
                 <view sid="snapshotNegatoEditor" start="yes" />
-                <view sid="slider_negato" start="no" />
+                <view sid="sliderNegato" start="no" />
                 <view sid="distanceNegatoEditor" start="no" />
             </registry>
         </service>
@@ -61,7 +61,7 @@
             <inout key="imageKey" uid="optionalInputImage" />
         </service>
 
-        <service uid="slider_negato" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+        <service uid="sliderNegato" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
             <inout key="imageKey" uid="optionalInputImage" />
             <sliceIndex>${orientation}</sliceIndex>
         </service>
@@ -167,6 +167,11 @@
         <start uid="mainView" />
         <start uid="extractImage" />
 
+        <!-- Deferred -->
+        <start uid="LockImageSrv" />
+        <start uid="sliderNegato" />
+        <start uid="distanceNegatoEditor" />
+
         <update uid="extractImage" />
 
     </config>
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml
index c53fcc9..a8a81a4 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml
@@ -176,7 +176,7 @@
             <inout key="image" uid="optionalInputImage" />
         </service>
 
-        <service uid="cfgNegato2" type="::fwServices::SConfigController">
+        <service uid="cfgNegato2" type="::fwServices::SConfigController" >
             <appConfig id="2DNegato" />
             <inout key="image" uid="optionalInputImage" />
             <parameter replace="WID_PARENT" uid="view_negato2" />
@@ -207,7 +207,7 @@
             <inout key="image" uid="optionalInputImage" />
         </service>
         <service uid="ActionSaveLandmark" type="::uiMeasurement::action::SaveLandmark" >
-            <inout key="image" uid="optionalInputImage" />
+            <in key="image" uid="optionalInputImage" />
         </service>
         <service uid="ActionHideLandmark" type="::uiMeasurement::action::ShowLandmark" autoConnect="yes" >
             <inout key="image" uid="optionalInputImage" />
@@ -254,6 +254,25 @@
         <start uid="extractImage" />
         <start uid="cfgNegato1" />
 
+        <!-- Deferred start -->
+        <start uid="LockImageSrv" />
+        <start uid="view_negato2_and_3" />
+        <start uid="cfgNegato2" />
+        <start uid="cfgNegato3" />
+        <start uid="ActionFocusLandmark" />
+        <start uid="ActionNewLandmark" />
+        <start uid="ActionRemoveLandmark" />
+        <start uid="ActionLoadLandmark" />
+        <start uid="ActionSaveLandmark" />
+        <start uid="ActionHideLandmark" />
+        <start uid="ActionAddDistance" />
+        <start uid="ActionRemoveDistance" />
+        <start uid="ActionHideDistance" />
+        <start uid="ActionHideCross" />
+        <start uid="ActionShowNormalCross" />
+        <start uid="ActionShowFullCross" />
+        <start uid="MedicalImageSrv" />
+
         <update uid="extractImage" />
 
     </config>
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml
index bad6a68..d260443 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml
@@ -85,5 +85,9 @@
         <start uid="organManagerFrame" />
         <start uid="myUpdaterReconst" />
 
+        <!-- Deferred start -->
+        <start uid="organMaterialEditor" />
+        <start uid="representationEditor" />
+
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml b/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
index 84b7271..965fee7 100644
--- a/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
+++ b/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
@@ -257,6 +257,9 @@
         <start uid="slider" />
         <start uid="genericScene" />
 
+        <!-- Deferred start -->
+        <start uid="tfSelector" />
+
         <update uid="fieldMgr" />
 
     </config>
diff --git a/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml b/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml
index 3f9c5a9..e945118 100644
--- a/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml
+++ b/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml
@@ -69,5 +69,9 @@
 
         <start uid="mainview" />
 
+        <!-- Deferred start -->
+        <start uid="medicalImgConverter" />
+        <start uid="imageDumpLocker" />
+
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml
index ad40c6f..663c057 100644
--- a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml
@@ -72,5 +72,9 @@
 
         <start uid="mainview" />
 
+        <!-- Deferred start -->
+        <start uid="medicalImgConverter" />
+        <start uid="imageDumpLocker" />
+
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/ioActivity/Properties.cmake b/Bundles/LeafActivity/ioActivity/Properties.cmake
index 8ba70f3..4c9e9fb 100644
--- a/Bundles/LeafActivity/ioActivity/Properties.cmake
+++ b/Bundles/LeafActivity/ioActivity/Properties.cmake
@@ -3,6 +3,7 @@ set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES  )
 set( REQUIREMENTS
+        activities
         io
         uiIO
         media
diff --git a/Bundles/LeafActivity/ioActivity/rc/plugin.xml b/Bundles/LeafActivity/ioActivity/rc/plugin.xml
index 0e2bfc9..b5408a3 100644
--- a/Bundles/LeafActivity/ioActivity/rc/plugin.xml
+++ b/Bundles/LeafActivity/ioActivity/rc/plugin.xml
@@ -4,6 +4,7 @@
     <requirement id="uiIO" />
     <requirement id="media" />
     <requirement id="filterVRRender" />
+    <requirement id="activities" />
 
     <!-- Activity used to export an image series. -->
     <extension implements="::fwActivities::registry::Activities">
@@ -137,6 +138,19 @@
         </config>
     </extension>
 
+    <!-- Service config used to write a seriesDB using ioAtoms. -->
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>SDBAtomsWriterIOSelectorConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>Atoms seriesDB writer.</desc>
+        <config>
+            <type mode="writer" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SWriter" />
+            <config id="MDAtomsConfig" service="::ioAtoms::SWriter" />
+        </config>
+    </extension>
+
     <!-- Service config used to read SeriesDB with all the available reader for SeriesDB. -->
     <extension implements="::fwServices::registry::ServiceConfig">
         <id>FullSDBReaderIOSelectorConfig</id>
@@ -159,4 +173,42 @@
         </config>
     </extension>
 
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>ActivityMDAtomsConfig</id>
+        <desc>Reader/Writer for atoms representing an activity project</desc>
+        <config>
+            <archive backend="jsonz">
+                <extension>.apz</extension>
+            </archive>
+            <extensions>
+                <extension label="Zipped Activity Project">.apz</extension>
+            </extensions>
+            <patcher context="MedicalData" version="V09ALA" />
+        </config>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>ActivityReaderConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>Activity reader</desc>
+        <config>
+            <type mode="reader" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SReader" />
+            <config id="ActivityMDAtomsConfig" service="::ioAtoms::SReader" />
+        </config>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>ActivityWriterConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>Activity writer</desc>
+        <config>
+            <type mode="writer" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SWriter" />
+            <config id="ActivityMDAtomsConfig" service="::ioAtoms::SWriter" />
+        </config>
+    </extension>
+
 </plugin>
diff --git a/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml b/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml
index 24b9193..be9b7c4 100644
--- a/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml
+++ b/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml
@@ -424,6 +424,10 @@
         <start uid="cfgNegato" />
         <start uid="fieldMgr" />
 
+        <!-- Deferred start -->
+        <start uid="action_organManager" />
+        <start uid="tfm" />
+
         <update uid="fieldMgr" />
 
     </config>
diff --git a/Bundles/LeafAtomFilter/filterVRRender/CMakeLists.txt b/Bundles/LeafAtomFilter/filterVRRender/CMakeLists.txt
index c7db60f..ed5cc73 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/CMakeLists.txt
+++ b/Bundles/LeafAtomFilter/filterVRRender/CMakeLists.txt
@@ -1,4 +1,4 @@
 
 fwLoadProperties()
 
-
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake b/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
index fafcf51..c7e7f8f 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
+++ b/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
@@ -12,4 +12,4 @@ set( DEPENDENCIES
 )
 
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET fwAtomConversion )
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp
index c21a3e6..98c6659 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,9 +8,11 @@
 #define __FILTERVRRENDER_NAMESPACE_HPP__
 
 /**
- * @brief The namespace filterVRRender contains filters for atoms.
- * @namespace filterVRRender
- **/
+ * @ingroup apprequirement
+ * @brief The namespace filterVRRender contains filters for atoms: it allows to keep only the known atom objects in the
+ *        application.
+ * @note It also allows to filter the known activities according to their ID.
+ */
 
 namespace filterVRRender
 {
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp
index fc8e05f..dea69d7 100644
--- a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,9 @@
 #include <fwCom/Signals.hpp>
 
 #include <fwData/mt/ObjectWriteLock.hpp>
-#include <fwData/Object.hpp>
 
-#include <fwDataCamp/getObject.hpp>
 #include <fwDataCamp/exception/ObjectNotFound.hpp>
-
+#include <fwDataCamp/getObject.hpp>
 
 namespace ctrlCamp
 {
@@ -156,7 +154,7 @@ void SCopy::copy()
     }
     else
     {
-        if (m_target.substr(0,1) == "@")
+        if (m_target.substr(0, 1) == "@")
         {
             target = ::fwDataCamp::getObject(this->getObject(), m_target);
             SLM_ASSERT("Invalid seshat path : '" + m_target + "'", target);
@@ -169,7 +167,7 @@ void SCopy::copy()
             SLM_ASSERT("Object '" + m_target + "' is not a fwData::Object (" + obj->getClassname() + ")", target);
         }
     }
-    if (m_source.substr(0,1) == "@")
+    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);
@@ -242,5 +240,4 @@ void SCopy::copy()
 
 //-----------------------------------------------------------------------------
 
-
 } // namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlSelection/Properties.cmake b/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
index ab45e28..7afe491 100644
--- a/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
+++ b/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME ctrlSelection )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwCore fwData fwDataTools fwRuntime fwServices fwTools fwThread )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwThread
+    fwTools
+    fwData
+    fwDataTools
+    fwMedData
+    fwMedDataTools
+    fwRuntime
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/SManage.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/SManage.hpp
new file mode 100644
index 0000000..2a09dda
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/SManage.hpp
@@ -0,0 +1,150 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLSELECTION_SMANAGE_HPP__
+#define __CTRLSELECTION_SMANAGE_HPP__
+
+#include "ctrlSelection/config.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/IController.hpp>
+
+namespace ctrlSelection
+{
+
+/**
+ * @brief This service manages an object (add/swap/remove) into a container object (composite, vector, seriesDB).
+ *
+ * It works on different objects:
+ * - ::fwData::Composite: the object is added/swapped/removed from composite at the given key when the respective slot
+ *   is called.
+ * - ::fwData::Vector: the object is added or removed from the container
+ * - ::fwMedData::SeriesDB: the object is added or removed from the container
+ *
+ * @section Slots Slots
+ * - \b add() : Adds the object into the target (vector, seriesDB, composite), if target is a Composite, it is add at
+ *   the key given by config.
+ * - \b addOrSwap() : Adds the object if it is not present in the target, else if target is a compsite, the object is
+ *   swapped.
+ * - \b swapObj() : Only if target is a Composite : swaps the object into the composite with the key given by config.
+ * - \b remove() : Removes the object.
+ * - \b removeIfPresent() : Removes the object if it is present.
+ *
+ * @section XML XML Configuration
+ *
+ * For ::fwData::Composite:
+ * @code{.xml}
+   <service type="::ctrlSelection::SManage">
+      <inout key="object" uid="..." />
+      <inout key="composite" uid="..." />
+      <compositeKey>...</compositeKey>
+   </service>
+   @endcode
+ *
+ * For ::fwData::Vector:
+ * @code{.xml}
+   <service type="::ctrlSelection::SManage">
+      <inout key="object" uid="..." />
+      <inout key="vector" uid="..." />
+   </service>
+   @endcode
+ *
+ * For ::fwDMedata::SeriesDB:
+ * @code{.xml}
+   <service type="::ctrlSelection::SManage">
+      <inout key="object" uid="..." />
+      <inout key="seriesDB" uid="..." />
+   </service>
+   @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b object [::fwData::Object]: object to add/swap/remove.
+ * - \b composite [::fwData::Composite] (optional): Composite where to add/swap/remove object.
+ * - \b vector [::fwData::Vector] (optional): Vector where to add/remove object.
+ * - \b seriesDB [::fwMedData::SeriesDB] (optional): SeriesDB where to add/remove object.
+ *
+ * <b>Only one of the target (composite, vector or seriesDB) is allowed.</b>
+ * For SeriesDB, the object must inherit of Series
+ * @subsection Configuration Configuration
+ * - \b compositeKey (optional, only if target object in a Composite) : key of the object in the composite
+ */
+class CTRLSELECTION_CLASS_API SManage : public ::fwServices::IController
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro( (SManage)(::fwServices::IController) );
+
+    /// Constructor.  Do nothing.
+    CTRLSELECTION_API SManage() throw();
+
+    /// Destructor. Do nothing.
+    CTRLSELECTION_API virtual ~SManage() 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:
+
+    /// Configures the service.
+    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 );
+
+    /**
+     * @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();
+
+    /// Removes the object from the composite at the key given by config.
+    void remove();
+
+    /// Removes the object from the composite at 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
+
+};
+
+} // ctrlSelection
+
+#endif // __CTRLSELECTION_SMANAGE_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
index aef7af5..40f91f9 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include "ctrlSelection/IManagerSrv.hpp"
 #include "ctrlSelection/config.hpp"
 
-#include <fwData/Object.hpp>
-
 #include <fwRuntime/ConfigurationElement.hpp>
 
 #include <fwServices/IService.hpp>
@@ -30,7 +28,7 @@ class CTRLSELECTION_CLASS_API SField : public ::ctrlSelection::IManagerSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SField)(::ctrlSelection::IManagerSrv) );
+    fwCoreServiceClassDefinitionsMacro( (SField)(::ctrlSelection::IManagerSrv) );
 
     /// Constructor.  Do nothing.
     CTRLSELECTION_API SField() throw();
@@ -50,8 +48,10 @@ public:
 
 protected:
 
-    /// Implements starting method derived from IService. Starts the managed services if their fields are in the composite.
-    /// If the mode is "dummy", starts the the managed services on dummy fields if their fields are not in the composite.
+    /// Implements starting method derived from IService. Starts the managed services if their fields are in the
+    // composite.
+    /// If the mode is "dummy", starts the the managed services on dummy fields if their fields are not in the
+    // composite.
     CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
 
     /// Implements stopping method derived from IService. Stops and erases all the managed services.
@@ -63,7 +63,8 @@ protected:
      * Sample of declaration configuration for a simple swapper service
      *
      * @code{.xml}
-        <service uid="FieldManager" impl="::ctrlSelection::manager::SField" type="::ctrlSelection::IManagerSrv" autoConnect="yes" >
+        <service uid="FieldManager" impl="::ctrlSelection::manager::SField" type="::ctrlSelection::IManagerSrv"
+     * autoConnect="yes" >
             <mode type="dummy" />
             <config>
                 <field id="TFSelection" type="::fwData::TransferFunction" >
@@ -86,7 +87,8 @@ protected:
         </service>
        @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 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.
@@ -109,7 +111,8 @@ protected:
     {
     public:
 
-        SubService() : m_hasAutoConnection(false)
+        SubService() :
+            m_hasAutoConnection(false)
         {
         }
 
@@ -117,7 +120,7 @@ protected:
         {
         }
 
-        SPTR (::fwServices::IService) getService()
+        SPTR(::fwServices::IService) getService()
         {
             return m_service.lock();
         }
@@ -132,7 +135,6 @@ protected:
     typedef std::vector< SPTR(SubService) > SubServicesVecType;
     typedef std::map< FieldNameType, SubServicesVecType > SubServicesMapType;
 
-
     void initOnDummyObject( const FieldNameType& fieldName );
     void addField( const FieldNameType& fieldName, ::fwData::Object::sptr field );
     void swapField(const FieldNameType& fieldName, ::fwData::Object::sptr field);
@@ -150,8 +152,6 @@ protected:
 
 private:
 
-
-
     std::string m_mode;
     bool m_dummyStopMode;
     ConfigurationType m_managerConfiguration;
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp
index 80ae510..6b21658 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,8 @@
 #ifndef __CTRLSELECTION_UPDATER_SOBJFROMSLOT_HPP__
 #define __CTRLSELECTION_UPDATER_SOBJFROMSLOT_HPP__
 
-#include "ctrlSelection/config.hpp"
 #include "ctrlSelection/IUpdaterSrv.hpp"
-
-#include <fwData/Object.hpp>
+#include "ctrlSelection/config.hpp"
 
 namespace ctrlSelection
 {
@@ -42,7 +40,7 @@ class CTRLSELECTION_CLASS_API SObjFromSlot : public ::ctrlSelection::IUpdaterSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SObjFromSlot)(::ctrlSelection::IUpdaterSrv) );
+    fwCoreServiceClassDefinitionsMacro( (SObjFromSlot)(::ctrlSelection::IUpdaterSrv) );
 
     /// Constructor.  Do nothing.
     CTRLSELECTION_API SObjFromSlot() throw();
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp
deleted file mode 100644
index 00df383..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-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/wrapper/SImageSignalForwarder.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp
index a116d08..5df1ea0 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #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
 {
 
@@ -49,7 +47,7 @@ class CTRLSELECTION_CLASS_API SImageSignalForwarder : public ::ctrlSelection::IW
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SImageSignalForwarder)(::ctrlSelection::IWrapperSrv) );
+    fwCoreServiceClassDefinitionsMacro( (SImageSignalForwarder)(::ctrlSelection::IWrapperSrv) );
 
     CTRLSELECTION_API SImageSignalForwarder() throw();
 
@@ -112,7 +110,6 @@ private:
     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
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml b/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
index a690151..39b884b 100644
--- a/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
+++ b/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
@@ -72,8 +72,8 @@
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::SObjFromUid</service>
+        <type>::fwServices::IController</type>
+        <service>::ctrlSelection::SManage</service>
         <object>::fwData::Composite</object>
     </extension>
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/SManage.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/SManage.cpp
new file mode 100644
index 0000000..21092dc
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/SManage.cpp
@@ -0,0 +1,369 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlSelection/SManage.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+#include <fwDataTools/helper/Vector.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+namespace ctrlSelection
+{
+
+const ::fwCom::Slots::SlotKeyType SManage::s_ADD_OR_SWAP_SLOT       = "addOrSwap";
+const ::fwCom::Slots::SlotKeyType SManage::s_ADD_SLOT               = "add";
+const ::fwCom::Slots::SlotKeyType SManage::s_SWAP_OBJ_SLOT          = "swapObj";
+const ::fwCom::Slots::SlotKeyType SManage::s_REMOVE_SLOT            = "remove";
+const ::fwCom::Slots::SlotKeyType SManage::s_REMOVE_IF_PRESENT_SLOT = "removeIfPresent";
+
+const ::fwServices::IService::KeyType s_COMPOSITE_INOUT = "composite";
+const ::fwServices::IService::KeyType s_VECTOR_INOUT    = "vector";
+const ::fwServices::IService::KeyType s_SERIESDB_INOUT  = "seriesDB";
+const ::fwServices::IService::KeyType s_OBJECT_INOUT    = "object";
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::SManage, ::fwData::Composite );
+
+//-----------------------------------------------------------------------------
+
+SManage::SManage() throw()
+{
+    newSlot(s_ADD_OR_SWAP_SLOT, &SManage::addOrSwap, this);
+    newSlot(s_ADD_SLOT, &SManage::add, this);
+    newSlot(s_SWAP_OBJ_SLOT, &SManage::swap, this);
+    newSlot(s_REMOVE_SLOT, &SManage::remove, this);
+    newSlot(s_REMOVE_IF_PRESENT_SLOT, &SManage::removeIfPresent, this);
+}
+
+//-----------------------------------------------------------------------------
+
+SManage::~SManage() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::configuring()  throw ( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+
+    if (!this->isVersion2())
+    {
+        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");
+    if (cfg)
+    {
+        m_compositeKey = cfg->getValue();
+        SLM_ASSERT("Missing 'compositeKey' value", !m_compositeKey.empty());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::starting()  throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::stopping()  throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::updating() throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::add()
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::sptr obj = this->getInOut< ::fwData::Object >(s_OBJECT_INOUT);
+        SLM_ASSERT("Object '" + s_OBJECT_INOUT + "' is missing.", obj);
+
+        ::fwData::Composite::sptr composite  = this->getInOut< ::fwData::Composite >(s_COMPOSITE_INOUT);
+        ::fwData::Vector::sptr vector        = this->getInOut< ::fwData::Vector >(s_VECTOR_INOUT);
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getInOut< ::fwMedData::SeriesDB >(s_SERIESDB_INOUT);
+
+        SLM_ASSERT("Target object is missing, required one of 'composite', 'vector' or 'seriesDB'",
+                   vector || composite || seriesDB);
+        if (composite)
+        {
+            SLM_ASSERT("Only one target object is managed", !vector && !seriesDB);
+            ::fwDataTools::helper::Composite helper( composite );
+            helper.add(m_compositeKey, obj);
+            helper.notify();
+        }
+        else if (vector)
+        {
+            SLM_ASSERT("Only one target object is managed", !composite && !seriesDB);
+            ::fwDataTools::helper::Vector helper( vector );
+            helper.add(obj);
+            helper.notify();
+        }
+        else if (seriesDB)
+        {
+            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
+            SLM_ASSERT("Target object is a SeriesDB, so object must be a Series.", series);
+            SLM_ASSERT("Only one target object is managed", !composite && !vector);
+            ::fwMedDataTools::helper::SeriesDB helper( seriesDB );
+            helper.add(series);
+            helper.notify();
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwData::Object::sptr obj          = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+        ::fwDataTools::helper::Composite helper( composite );
+        helper.add(m_compositeKey, obj);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::addOrSwap()
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::sptr obj = this->getInOut< ::fwData::Object >(s_OBJECT_INOUT);
+        SLM_ASSERT("Object '" + s_OBJECT_INOUT + "' is missing.", obj);
+
+        ::fwData::Composite::sptr composite  = this->getInOut< ::fwData::Composite >(s_COMPOSITE_INOUT);
+        ::fwData::Vector::sptr vector        = this->getInOut< ::fwData::Vector >(s_VECTOR_INOUT);
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getInOut< ::fwMedData::SeriesDB >(s_SERIESDB_INOUT);
+
+        SLM_ASSERT("Target object is missing, required one of 'composite', 'vector' or 'seriesDB'",
+                   vector || composite || seriesDB);
+        if (composite)
+        {
+            SLM_ASSERT("Only one target object is managed", !vector && !seriesDB);
+            ::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();
+        }
+        else if (vector)
+        {
+            SLM_ASSERT("Only one target object is managed", !composite && !seriesDB);
+            auto iter = std::find(vector->begin(), vector->end(), obj);
+            if (iter == vector->end())
+            {
+                ::fwDataTools::helper::Vector helper( vector );
+                helper.add(obj);
+                helper.notify();
+            }
+            SLM_WARN_IF("Object already exists in the Vector, does nothing.", iter != vector->end());
+        }
+        else if (seriesDB)
+        {
+            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
+            SLM_ASSERT("Target object is a SeriesDB, so object must be a Series.", series);
+            SLM_ASSERT("Only one target object is managed", !composite && !vector);
+
+            auto iter = std::find(seriesDB->begin(), seriesDB->end(), series);
+            if (iter == seriesDB->end())
+            {
+                ::fwMedDataTools::helper::SeriesDB helper( seriesDB );
+                helper.add(series);
+                helper.notify();
+            }
+            SLM_WARN_IF("Object already exists in the SeriesDB, does nothing.", iter != seriesDB->end());
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwData::Object::sptr obj          = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+        ::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 SManage::swap()
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::sptr obj = this->getInOut< ::fwData::Object >(s_OBJECT_INOUT);
+        SLM_ASSERT("Object '" + s_OBJECT_INOUT + "' is missing.", obj);
+
+        ::fwData::Composite::sptr composite = this->getInOut< ::fwData::Composite >(s_COMPOSITE_INOUT);
+        SLM_ASSERT("'swap' slot is only managed for 'composite'.", composite);
+        ::fwDataTools::helper::Composite helper( composite );
+        helper.swap(m_compositeKey, obj);
+        helper.notify();
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwData::Object::sptr obj          = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+        ::fwDataTools::helper::Composite helper( composite );
+        helper.swap(m_compositeKey, obj);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::remove()
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::sptr obj = this->getInOut< ::fwData::Object >(s_OBJECT_INOUT);
+        SLM_ASSERT("Object '" + s_OBJECT_INOUT + "' is missing.", obj);
+
+        ::fwData::Composite::sptr composite  = this->getInOut< ::fwData::Composite >(s_COMPOSITE_INOUT);
+        ::fwData::Vector::sptr vector        = this->getInOut< ::fwData::Vector >(s_VECTOR_INOUT);
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getInOut< ::fwMedData::SeriesDB >(s_SERIESDB_INOUT);
+
+        SLM_ASSERT("Target object is missing, required one of 'composite', 'vector' or 'seriesDB'",
+                   vector || composite || seriesDB);
+        if (composite)
+        {
+            SLM_ASSERT("Only one target object is managed", !vector && !seriesDB);
+            ::fwDataTools::helper::Composite helper( composite );
+            helper.remove(m_compositeKey);
+            helper.notify();
+        }
+        else if (vector)
+        {
+            SLM_ASSERT("Only one target object is managed", !composite && !seriesDB);
+            ::fwDataTools::helper::Vector helper( vector );
+            helper.remove(obj);
+            helper.notify();
+        }
+        else if (seriesDB)
+        {
+            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
+            SLM_ASSERT("Target object is a SeriesDB, so object must be a Series.", series);
+            SLM_ASSERT("Only one target object is managed", !composite && !vector);
+
+            ::fwMedDataTools::helper::SeriesDB helper( seriesDB );
+            helper.remove(series);
+            helper.notify();
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwDataTools::helper::Composite helper( composite );
+        helper.remove(m_compositeKey);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SManage::removeIfPresent()
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::sptr obj = this->getInOut< ::fwData::Object >(s_OBJECT_INOUT);
+        SLM_ASSERT("Object '" + s_OBJECT_INOUT + "' is missing.", obj);
+
+        ::fwData::Composite::sptr composite  = this->getInOut< ::fwData::Composite >(s_COMPOSITE_INOUT);
+        ::fwData::Vector::sptr vector        = this->getInOut< ::fwData::Vector >(s_VECTOR_INOUT);
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getInOut< ::fwMedData::SeriesDB >(s_SERIESDB_INOUT);
+
+        SLM_ASSERT("Target object is missing, required one of 'composite', 'vector' or 'seriesDB'",
+                   vector || composite || seriesDB);
+        if (composite)
+        {
+            SLM_ASSERT("Only one target object is managed", !vector && !seriesDB);
+            ::fwDataTools::helper::Composite helper( composite );
+            if (composite->find(m_compositeKey) != composite->end())
+            {
+                helper.remove(m_compositeKey);
+                helper.notify();
+            }
+        }
+        else if (vector)
+        {
+            SLM_ASSERT("Only one target object is managed", !composite && !seriesDB);
+            auto iter = std::find(vector->begin(), vector->end(), obj);
+            if (iter != vector->end())
+            {
+                ::fwDataTools::helper::Vector helper( vector );
+                helper.remove(obj);
+                helper.notify();
+            }
+            SLM_WARN_IF("Object does not exist in the Vector, does nothing.", iter == vector->end());
+        }
+        else if (seriesDB)
+        {
+            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
+            SLM_ASSERT("Target object is a SeriesDB, so object must be a Series.", series);
+            SLM_ASSERT("Only one target object is managed", !composite && !vector);
+
+            auto iter = std::find(seriesDB->begin(), seriesDB->end(), series);
+            if (iter != seriesDB->end())
+            {
+                ::fwMedDataTools::helper::SeriesDB helper( seriesDB );
+                helper.remove(series);
+                helper.notify();
+            }
+            SLM_WARN_IF("Object does not exist in the SeriesDB, does nothing.", iter == seriesDB->end());
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        if (composite->find(m_compositeKey) != composite->end())
+        {
+            ::fwDataTools::helper::Composite helper(composite);
+            helper.remove(m_compositeKey);
+            helper.notify();
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp
deleted file mode 100644
index 70ec9eb..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/* ***** 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/monitor/include/monitor/action/namespace.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp
deleted file mode 100644
index 5cb4de7..0000000
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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 __MONITOR_ACTION_NAMESPACE_HPP__
-#define __MONITOR_ACTION_NAMESPACE_HPP__
-
-namespace monitor
-{
-/**
- * @brief       The namespace monitor::action contains tools for monitoring an application built with FW4SPL.
- * @namespace   monitor::action
- */
-namespace action
-{
-
-}
-
-} // namespace monitor
-
-#endif // __MONITOR_ACTION_NAMESPACE_HPP__
-
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp b/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
index e86fdad..5ffcb12 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,12 +9,17 @@
 
 /**
  * @brief       The namespace monitor contains tools for monitoring an application built with FW4SPL.
- * @namespace   monitor
  */
 namespace monitor
 {
 
+/**
+ * @brief       The namespace monitor::action contains tools for monitoring an application built with FW4SPL.
+ */
+namespace action
+{
+
+}
 }
 
 #endif // __MONITOR_NAMESPACE_HPP__
-
diff --git a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
index 37a71e1..75a8b39 100644
--- a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
+++ b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include <fwCom/Signal.hxx>
 
 #include <fwData/Composite.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
 
@@ -64,9 +63,9 @@ const SReader::FileExtension2NameType SReader::s_EXTENSIONS
 
 SReader::SReader() :
     m_useAtomsPatcher(false),
-    m_context ("Undefined"),
-    m_version ("Undefined"),
-    m_filter  ("")
+    m_context("Undefined"),
+    m_version("Undefined"),
+    m_filter("")
 {
     m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
 
@@ -205,7 +204,6 @@ void SReader::configuring() throw(::fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-
 struct SetDumpPolicy
 {
     SetDumpPolicy()
@@ -275,7 +273,6 @@ void SReader::updating() throw(::fwTools::Failed)
 
             FW_RAISE_IF( "Unable to guess file format (missing extension)", extension.empty() );
 
-
             if(m_customExts.find(extension) != m_customExts.end())
             {
                 extension = "." + m_customExts[extension];
@@ -336,7 +333,6 @@ void SReader::updating() throw(::fwTools::Failed)
 
                 }, m_associatedWorker);
 
-
             // patching atom : job 2
             ::fwJobs::Job::sptr patchingJob = ::fwJobs::Job::New("Reading " + extension + " file",
                                                                  [ =, &atom](::fwJobs::Job& runningJob)
diff --git a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
index 9e05379..57e1860 100644
--- a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
+++ b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
@@ -1,27 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "ioAtoms/SReader.hpp"
 #include "ioAtoms/SWriter.hpp"
 
-#include <fwAtomsBoostIO/types.hpp>
-#include <fwAtomsBoostIO/Writer.hpp>
+#include "ioAtoms/SReader.hpp"
 
 #include <fwAtomConversion/convert.hpp>
 
+#include <fwAtomsBoostIO/Writer.hpp>
+#include <fwAtomsBoostIO/types.hpp>
+
+#include <fwAtomsPatch/PatchingManager.hpp>
+#include <fwAtomsPatch/VersionsGraph.hpp>
+#include <fwAtomsPatch/VersionsManager.hpp>
+
 #include <fwCom/Signal.hxx>
 
 #include <fwData/Composite.hpp>
-#include <fwData/location/SingleFile.hpp>
 #include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+
+#include <fwDataCamp/visitor/RecursiveLock.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/SelectorDialog.hpp>
 #include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
 
 #include <fwJobs/Aggregator.hpp>
 #include <fwJobs/Job.hpp>
@@ -31,15 +38,9 @@
 #include <fwZip/WriteDirArchive.hpp>
 #include <fwZip/WriteZipArchive.hpp>
 
-#include <fwDataCamp/visitor/RecursiveLock.hpp>
-
-#include <fwAtomsPatch/VersionsManager.hpp>
-#include <fwAtomsPatch/VersionsGraph.hpp>
-#include <fwAtomsPatch/PatchingManager.hpp>
-
-#include <boost/filesystem/path.hpp>
 #include <boost/algorithm/string/join.hpp>
-
+#include <boost/assign.hpp>
+#include <boost/filesystem/path.hpp>
 
 namespace ioAtoms
 {
@@ -54,9 +55,9 @@ static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 SWriter::SWriter() :
     m_useAtomsPatcher(false),
-    m_exportedVersion ("Undefined"),
-    m_context ("Undefined"),
-    m_version ("Undefined")
+    m_exportedVersion("Undefined"),
+    m_context("Undefined"),
+    m_version("Undefined")
 {
     m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
 
@@ -272,7 +273,7 @@ void SWriter::updating() throw(::fwTools::Failed)
     }
 
     // Mutex data lock
-    ::fwDataCamp::visitor::RecursiveLock recursiveLock (obj);
+    ::fwDataCamp::visitor::RecursiveLock recursiveLock(obj);
 
     ::fwAtoms::Object::sptr atom;
     const unsigned int progressBarOffset = 10;
@@ -365,8 +366,6 @@ void SWriter::updating() throw(::fwTools::Failed)
             runningJob.done();
         }, m_associatedWorker );
 
-
-
     ::fwJobs::Aggregator::sptr jobs = ::fwJobs::Aggregator::New(extension + " writer");
     jobs->add(convertJob);
     jobs->add(patchingJob);
@@ -379,7 +378,7 @@ void SWriter::updating() throw(::fwTools::Failed)
     {
         jobs->run().get();
     }
-    catch( std::exception & e )
+    catch( std::exception& e )
     {
         OSLM_ERROR( e.what() );
         ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
diff --git a/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp b/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
index 45f3ba6..728b934 100644
--- a/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
+++ b/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 
 #include <fwData/Composite.hpp>
 
-#include <fwData/Object.hpp>
-
 #include <fwDataCamp/visitor/CompareObjects.hpp>
 
 #include <fwGui/registry/worker.hpp>
@@ -58,7 +56,7 @@ void IoAtomsTest::tearDown()
 //------------------------------------------------------------------------------
 
 template <typename T>
-void compareLog(T &comparator)
+void compareLog(T& comparator)
 {
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = comparator.getDifferences();
     for(::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
@@ -67,12 +65,10 @@ void compareLog(T &comparator)
     }
 }
 
-
-
 //------------------------------------------------------------------------------
 
 template <typename T>
-void write(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const SPTR(T) &obj, const std::string &writer)
+void write(const ::fwRuntime::EConfigurationElement::sptr& srvCfg, const SPTR(T)& obj, const std::string& writer)
 {
     ::fwServices::IService::sptr writerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( writer );
     CPPUNIT_ASSERT(writerSrv);
@@ -86,7 +82,6 @@ void write(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const SPTR(T)
     ::fwServices::OSR::unregisterService( writerSrv );
 }
 
-
 template <typename T>
 SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::string &reader)
 {
@@ -106,10 +101,11 @@ SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::
     return readObj;
 }
 
+//------------------------------------------------------------------------------
 
 template <typename T>
-void writeReadFile(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const SPTR(T) &obj,
-                   const std::string &writer, const std::string &reader)
+void writeReadFile(const ::fwRuntime::EConfigurationElement::sptr& srvCfg, const SPTR(T)& obj,
+                   const std::string& writer, const std::string& reader)
 {
     write(srvCfg, obj, writer);
 
@@ -127,14 +123,14 @@ void writeReadFile(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const
 
 //------------------------------------------------------------------------------
 
-void atomTest(const ::boost::filesystem::path & filePath)
+void atomTest(const ::boost::filesystem::path& filePath)
 {
     ::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);
+    ::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();
@@ -155,7 +151,6 @@ void atomTest(const ::boost::filesystem::path & filePath)
         CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
     }
 
-
     // 'Change' UUID policy
     ::fwRuntime::EConfigurationElement::sptr uuidPolicyCfg = ::fwRuntime::EConfigurationElement::New("uuidPolicy");
     uuidPolicyCfg->setValue("Change");
@@ -171,7 +166,6 @@ void atomTest(const ::boost::filesystem::path & filePath)
         CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
     }
 
-
     // 'Strict' UUID policy
     uuidPolicyCfg->setValue("Strict");
     readSeriesDB = read< ::fwMedData::SeriesDB >(srvCfg, "::ioAtoms::SReader");
@@ -183,7 +177,6 @@ void atomTest(const ::boost::filesystem::path & filePath)
         CPPUNIT_ASSERT_MESSAGE("Loaded data should be empty", readSeriesDB->empty());
     }
 
-
     // 'Reuse' UUID policy
     uuidPolicyCfg->setValue("Reuse");
 
diff --git a/Bundles/LeafIO/ioData/Properties.cmake b/Bundles/LeafIO/ioData/Properties.cmake
index 75f37f3..5c7a329 100644
--- a/Bundles/LeafIO/ioData/Properties.cmake
+++ b/Bundles/LeafIO/ioData/Properties.cmake
@@ -7,6 +7,7 @@ set( DEPENDENCIES
     fwCore
     fwTools
     fwData
+    fwMedData
     fwDataIO
     fwDataTools
     fwMedDataTools
diff --git a/Bundles/LeafIO/ioData/include/ioData/SAttachmentSeriesReader.hpp b/Bundles/LeafIO/ioData/include/ioData/SAttachmentSeriesReader.hpp
new file mode 100644
index 0000000..5d82073
--- /dev/null
+++ b/Bundles/LeafIO/ioData/include/ioData/SAttachmentSeriesReader.hpp
@@ -0,0 +1,111 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_SATTACHMENTSERIESREADER_HPP__
+#define __IODATA_SATTACHMENTSERIESREADER_HPP__
+
+#include "ioData/config.hpp"
+
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioData
+{
+
+/**
+ * @brief   SAttachmentSeries reader service.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::ioData::SAttachmentSeriesReader" autoConnect="no">
+        <inout key="data" uid="..."/>
+    </service>
+   @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b data [::fwMedData::SeriesDB]: SeriesDB updated with AttachmentSeries.
+ */
+class IODATA_CLASS_API SAttachmentSeriesReader : public ::io::IReader
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SAttachmentSeriesReader)(::io::IReader) );
+
+    /// Super class of reader services
+    typedef ::io::IReader SuperClass;
+
+    /// Constructor : does nothing
+    IODATA_API SAttachmentSeriesReader();
+
+    /** @name Specified reader service methods ( override from ::io::IWriter )
+     * @{
+     */
+
+    /// Returns  (filename) extension
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
+
+    /**
+     * @brief Configure the attachment path.
+     *
+     * This method is used to find the file path  using a file selector.
+     */
+    IODATA_API void configureWithIHM();
+    /// @}
+
+    /// Returns 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.
+     */
+    IODATA_API void updating() 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 );
+    /// @}
+
+};
+
+} //namespace ioData
+
+#endif /*__IODATA_SATTACHMENTSERIESREADER_HPP__*/
diff --git a/Bundles/LeafIO/ioData/rc/plugin.xml b/Bundles/LeafIO/ioData/rc/plugin.xml
index bf1198a..4a19b87 100644
--- a/Bundles/LeafIO/ioData/rc/plugin.xml
+++ b/Bundles/LeafIO/ioData/rc/plugin.xml
@@ -36,6 +36,13 @@
         <object>::fwData::Mesh</object>
         <desc>Trian file writer</desc>
     </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioData::SAttachmentSeriesReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>AttachmentSeries reader</desc>
+    </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
diff --git a/Bundles/LeafIO/ioData/src/ioData/SAttachmentSeriesReader.cpp b/Bundles/LeafIO/ioData/src/ioData/SAttachmentSeriesReader.cpp
new file mode 100644
index 0000000..43742cf
--- /dev/null
+++ b/Bundles/LeafIO/ioData/src/ioData/SAttachmentSeriesReader.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 "ioData/SAttachmentSeriesReader.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwGui/dialog/LocationDialog.hpp>
+
+#include <fwMedData/AttachmentSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/UUID.hpp>
+#include <fwTools/dateAndTime.hpp>
+
+#include <io/IReader.hpp>
+
+#include <boost/date_time/posix_time/posix_time.hpp>
+#include <boost/filesystem/operations.hpp>
+
+fwServicesRegisterMacro( ::io::IReader, ::ioData::SAttachmentSeriesReader, ::fwMedData::SeriesDB );
+
+namespace ioData
+{
+
+std::string getMediaType(const ::boost::filesystem::path& media)
+{
+    std::string mediaType;
+    std::map<std::string, std::string> mimeMap =
+    {
+        {".txt", "text/plain"},
+        {".rtf", "text/rtf"},
+        {".pdf", "application/pdf"},
+        {".zip", "application/zip"},
+        {".mp3", "audio/mpeg"},
+        {".wav", "audio/x-wav"},
+        {".bmp", "image/bmp"},
+        {".jpeg", "image/jpeg"},
+        {".mpeg", "video/mpeg"},
+        {".mp4", "video/mpeg"},
+        {".avi", "video/x-msvideo"}
+    };
+    const std::string extension = media.extension().string();
+    const auto iter             = mimeMap.find(extension);
+    if(iter != mimeMap.end())
+    {
+        mediaType = iter->second;
+    }
+    return mediaType;
+}
+
+void  initSeries(::fwMedData::Series::sptr series, const std::string& instanceUID)
+{
+    const std::string unknown = "unknown";
+    series->setModality("OT");
+    ::boost::posix_time::ptime now = ::boost::posix_time::second_clock::local_time();
+    const std::string date = ::fwTools::getDate(now);
+    const std::string time = ::fwTools::getTime(now);
+    series->setDate(date);
+    series->setTime(time);
+    //series->setDescription(??);
+    //series->setPerformingPhysiciansName(??);
+
+    series->getEquipment()->setInstitutionName(unknown);
+
+    series->getPatient()->setName(unknown);
+    series->getPatient()->setPatientId(unknown);
+    series->getPatient()->setBirthdate(unknown);
+    series->getPatient()->setSex(unknown);
+
+    series->getStudy()->setInstanceUID(instanceUID);
+    series->getStudy()->setDate(date);
+    series->getStudy()->setTime(time);
+    series->getStudy()->setReferringPhysicianName(unknown);
+    series->getStudy()->setDescription(unknown);
+    series->getStudy()->setPatientAge(unknown);
+}
+
+//-----------------------------------------------------------------------------
+
+SAttachmentSeriesReader::SAttachmentSeriesReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SAttachmentSeriesReader::info(std::ostream& _sstream )
+{
+    this->SuperClass::info( _sstream );
+    _sstream << std::endl << " AttachmentSerie reader";
+}
+
+//-----------------------------------------------------------------------------
+
+std::vector< std::string > SAttachmentSeriesReader::getSupportedExtensions()
+{
+    std::vector< std::string > extensions;
+    extensions.push_back(".*");
+    return extensions;
+}
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SAttachmentSeriesReader::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+void SAttachmentSeriesReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath("");
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a attachment file");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("Attachment file","*.*");
+    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 SAttachmentSeriesReader::updating() throw(::fwTools::Failed)
+{
+    if(this->hasLocationDefined())
+    {
+        // Retrieve object
+        ::fwMedData::SeriesDB::sptr seriesDB;
+        if (this->isVersion2())
+        {
+            seriesDB = this->getInOut< ::fwMedData::SeriesDB >(::io::s_DATA_KEY);
+        }
+        else
+        {
+            seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+        }
+
+        ::fwMedData::AttachmentSeries::sptr series = ::fwMedData::AttachmentSeries::New();
+        const std::string instanceUID = ::fwTools::UUID::generateUUID();
+        initSeries(series, instanceUID);
+        series->setAttachmentPath(this->getFile());
+        const std::string mediaType = getMediaType(this->getFile());
+        series->setMediaType(mediaType);
+
+        ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+        ::fwData::mt::ObjectWriteLock lock(seriesDB);
+        seriesDBHelper.add(series);
+        seriesDBHelper.notify();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+}
diff --git a/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp b/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
index d408bec..32cc944 100644
--- a/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
+++ b/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "IoItkTest.hpp"
 
-#include <fwData/Object.hpp>
-
 #include <fwDataTools/Image.hpp>
 
 #include <fwGui/registry/worker.hpp>
@@ -32,13 +30,11 @@
 #include <boost/assign/list_of.hpp>
 #include <boost/filesystem/operations.hpp>
 
-
 using namespace ::boost::assign;
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioITK::ut::IoItkTest );
 
-
 namespace ioITK
 {
 namespace ut
@@ -112,7 +108,6 @@ void IoItkTest::testImageSeriesWriterJPG()
     ::boost::filesystem::remove_all( path.string() );
 }
 
-
 //------------------------------------------------------------------------------
 
 void IoItkTest::testImageWriterJPG()
@@ -145,13 +140,15 @@ double tolerance(double num)
     return std::floor(num * 100. + .5) / 100.;
 }
 
+//------------------------------------------------------------------------------
+
 void IoItkTest::testSaveLoadInr()
 {
     ::fwData::Image::sptr image = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type::create("int16"));
 
     // inr only support image origin (0,0,0)
-    ::fwData::Image::OriginType origin(3,0);
+    ::fwData::Image::OriginType origin(3, 0);
     image->setOrigin(origin);
 
     // save image in inr
@@ -174,7 +171,7 @@ void IoItkTest::testSaveLoadInr()
     ::boost::filesystem::remove_all( PATH.parent_path().string() );
 
     ::fwData::Image::SpacingType spacing = image2->getSpacing();
-    std::transform (spacing.begin(), spacing.end(), spacing.begin(), tolerance);
+    std::transform(spacing.begin(), spacing.end(), spacing.begin(), tolerance);
     image2->setSpacing(spacing);
 
     // check Image
@@ -196,7 +193,7 @@ void IoItkTest::ImageSeriesInrTest()
     imageSeries->setImage(image);
 
     // inr only support image origin (0,0,0)
-    ::fwData::Image::OriginType origin(3,0);
+    ::fwData::Image::OriginType origin(3, 0);
     image->setOrigin(origin);
 
     // save image in inr
@@ -219,7 +216,7 @@ void IoItkTest::ImageSeriesInrTest()
     ::boost::filesystem::remove_all( PATH.parent_path().string() );
 
     ::fwData::Image::SpacingType spacing = image2->getSpacing();
-    std::transform (spacing.begin(), spacing.end(), spacing.begin(), tolerance);
+    std::transform(spacing.begin(), spacing.end(), spacing.begin(), tolerance);
     image2->setSpacing(spacing);
 
     // check Image
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp
index 8c2b142..e4ab79b 100644
--- a/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp
@@ -8,6 +8,7 @@
 
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
+
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ObjectService.hpp>
 
@@ -80,7 +81,7 @@ std::pair< ::fwServices::IService::sptr, ::fwData::Composite::sptr> getPreferenc
 {
     ::fwData::Composite::sptr prefs;
 
-    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
 
     ::fwServices::IService::sptr prefService;
     if(!preferencesServicesList.empty())
diff --git a/Bundles/LeafIO/ioQt/CMakeLists.txt b/Bundles/LeafIO/ioQt/CMakeLists.txt
new file mode 100644
index 0000000..834f6d0
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/CMakeLists.txt
@@ -0,0 +1,11 @@
+fwLoadProperties()
+
+find_package(Qt5 COMPONENTS PrintSupport REQUIRED)
+
+fwForwardInclude(
+    ${Qt5PrintSupport_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5PrintSupport_LIBRARIES}
+)
diff --git a/Bundles/LeafIO/ioQt/Properties.cmake b/Bundles/LeafIO/ioQt/Properties.cmake
new file mode 100644
index 0000000..d60c260
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/Properties.cmake
@@ -0,0 +1,17 @@
+set( NAME ioQt )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+        fwCore
+        fwCom
+        fwData
+        fwDataTools
+        fwGui
+        fwGuiQt
+        fwRuntime
+        fwServices
+        fwThread
+        fwTools
+        io
+    )
+set( REQUIREMENTS  )
diff --git a/Bundles/LeafIO/ioQt/include/ioQt/Plugin.hpp b/Bundles/LeafIO/ioQt/include/ioQt/Plugin.hpp
new file mode 100644
index 0000000..90be75a
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/include/ioQt/Plugin.hpp
@@ -0,0 +1,32 @@
+/* ***** 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 __IOQT_PLUGIN_HPP__
+#define __IOQT_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace ioQt
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw();
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    void stop() throw();
+
+};
+
+} // namespace ioQt
+
+#endif //__IOQT_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioQt/include/ioQt/SPdfWriter.hpp b/Bundles/LeafIO/ioQt/include/ioQt/SPdfWriter.hpp
new file mode 100644
index 0000000..7ba5556
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/include/ioQt/SPdfWriter.hpp
@@ -0,0 +1,175 @@
+/* ***** 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 __IOQT_SPDFWRITER_HPP__
+#define __IOQT_SPDFWRITER_HPP__
+
+#include "ioQt/config.hpp"
+
+#include <fwData/Image.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <io/IWriter.hpp>
+
+#include <QPdfWriter>
+#include <QtWidgets>
+
+namespace ioQt
+{
+
+/**
+ *
+ * @brief Creates and writes a PDF containing images.
+ *
+ * The service will take IDs at the configuration. Those IDs can either be UIDs of fwData::Image or
+ * either SID/WID of Qt containers. Converts the images if needed, in order to writes them in the PDF.
+ * A scaling is applied to fit the A4 format of the PDF pages.
+ *
+ * @warning When the visuVTKAdaptor::Snapshot service fills an fwData::Image, the renderer must not be hidden.
+ * For example if there are multiple tabs of renderer, only the image corresponding to the selected tab will be
+ * correctly saved in the PDF.
+ *
+ * @section XML XML configuration
+ * @code{.xml}
+    <service uid="..." type="::ioQt::SPdfWriter">
+        <in group="image">
+            <key uid="..."/>
+            <key uid="..."/>
+        </in>
+        <container uid="..."/>
+    </service>
+ *
+ * @endcode
+ * @subsection Input Input:
+ * - \b image [::fwData::Image] : Defines the UID of the fwData::Image to write.
+ * - \b container(optional) : Defines the SID or the WID of the container to write.
+ */
+
+class IOQT_CLASS_API SPdfWriter : public ::io::IWriter
+{
+
+public:
+
+    typedef std::vector< QImage > ImagesScaledListType;
+    typedef std::vector< ::fwData::Image::sptr > ImagesListType;
+    typedef std::vector< std::string > ImagesIDsType;
+
+    typedef std::vector< QWidget* > ContainersListType;
+    typedef std::vector< std::string > ContainersIDsType;
+
+    fwCoreServiceClassDefinitionsMacro ( (SPdfWriter)( ::io::IWriter) );
+    /**
+     * @brief Constructor : does nothing
+     */
+    IOQT_API SPdfWriter();
+
+    /**
+     * @brief Destructor
+     */
+    IOQT_API ~SPdfWriter() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief Starting method : Fills the list of Qt containers as well as the list of images got from
+     * the configuration.
+     *
+     * This method is used to initialize the service.
+     */
+    IOQT_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Stopping method : default does nothing.
+     *
+     * The stopping method is empty for this service.
+     */
+    IOQT_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Configure service. This method is called by configure() from base service ( ::fwServices::IService )
+     *
+     * Gets the images or containers from their IDs.
+     *
+     */
+    IOQT_API virtual void configuring( ) throw(::fwTools::Failed);
+
+    /**
+     * @brief Configure the image path.
+     *
+     * This method is used to set the file path of the PDF to write.
+     *
+     */
+    IOQT_API void configureWithIHM();
+
+    /**
+     * @brief Updating method. Creates a new PDF.
+     *
+     * Loops over the containers list and the images list. Creates a new A4 page for each,
+     * converts the containers and the images to QImage and writes them into the newly created PDF.
+     */
+    IOQT_API void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Info method.
+     *
+     * This method is used to give
+     * information about the service.
+     *
+     * @param[out] _sstream output stream
+     */
+    IOQT_API virtual void info(std::ostream& _sstream );
+    /// @}
+
+    /// Returns managed path type, here service manages only single file
+    IOQT_API ::io::IOPathType getIOPathType() const;
+
+
+
+private:
+
+    /**
+     * @brief convertFwImageToQImage: converts a fwData::Image to a QImage
+     * @param fwData::Image to convert
+     * @return converted QImage
+     */
+    IOQT_API static QImage convertFwImageToQImage(::fwData::Image::sptr image);
+
+    /**
+     * @brief scaleQImage: applies a scale the QImages
+     * @param A QImage and a factor of scaling.
+     */
+    IOQT_API static void scaleQImage(QImage& qImage, const int scale);
+
+    /**
+     * @brief List of images IDs to export into the PDF.
+     * Filled at the configuring from the XML configuration, and used at starting().
+     */
+    ImagesIDsType m_imagesUIDs;
+
+    /**
+     * @brief List of images to export into the PDF.
+     */
+    ImagesListType m_imagesToExport;
+
+    /**
+     * @brief List of containers IDs to export into the PDF.
+     * Filled at configuring from the XML configuration, and used at starting().
+     */
+    ContainersIDsType m_containersIDs;
+
+    /**
+     * @brief List of containers to export into the PDF.
+     */
+    ContainersListType m_containersToExport;
+
+};
+}
+#endif /*__IOQT_SPDFWRITER_HPP__*/
diff --git a/Bundles/LeafIO/ioQt/rc/plugin.xml b/Bundles/LeafIO/ioQt/rc/plugin.xml
new file mode 100644
index 0000000..b89dbd4
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/rc/plugin.xml
@@ -0,0 +1,14 @@
+<plugin id="ioQt" class="::ioQt::Plugin" version="@DASH_VERSION@" >
+    <library name="ioQt" />
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="io" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IWriter</type>
+        <service>::ioQt::SPdfWriter</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafIO/ioQt/src/ioQt/Plugin.cpp b/Bundles/LeafIO/ioQt/src/ioQt/Plugin.cpp
new file mode 100644
index 0000000..00d7975
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/src/ioQt/Plugin.cpp
@@ -0,0 +1,37 @@
+/* ***** 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 "ioQt/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+namespace ioQt
+{
+
+using namespace ::fwRuntime::utils;
+static GenericExecutableFactoryRegistrar<Plugin> registrar("::ioQt::Plugin");
+
+//-----------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace ioQt
diff --git a/Bundles/LeafIO/ioQt/src/ioQt/SPdfWriter.cpp b/Bundles/LeafIO/ioQt/src/ioQt/SPdfWriter.cpp
new file mode 100644
index 0000000..6b98bed
--- /dev/null
+++ b/Bundles/LeafIO/ioQt/src/ioQt/SPdfWriter.cpp
@@ -0,0 +1,303 @@
+/* ***** 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 "ioQt/SPdfWriter.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwGui/GuiRegistry.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/ConfigurationElementContainer.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwThread/Pool.hpp>
+#include <fwThread/Worker.hpp>
+
+#include <QPainter>
+#include <QPixmap>
+
+fwServicesRegisterMacro( ::io::IWriter, ::ioQt::SPdfWriter, ::fwData::Object );
+
+namespace ioQt
+{
+
+const ::fwServices::IService::KeyType s_IMAGE_INPUT     = "image";
+const ::fwServices::IService::KeyType s_CONTAINER_INPUT = "container";
+
+//-----------------------------------------------------------------------------
+
+SPdfWriter::SPdfWriter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SPdfWriter::info(std::ostream& _sstream )
+{
+    this->::io::IWriter::info( _sstream );
+    _sstream << std::endl << " External data file reader";
+}
+
+//-----------------------------------------------------------------------------
+
+SPdfWriter::~SPdfWriter() throw()
+{
+    this->stopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::configuring() throw(::fwTools::Failed)
+{
+    this->::io::IWriter::configuring();
+    if(!this->isVersion2())
+    {
+        ::fwRuntime::ConfigurationElementContainer imagesConfig = m_configuration->findAllConfigurationElement(
+            s_IMAGE_INPUT);
+
+        ///Gets images UIDs
+        for(const auto& imageCfg : imagesConfig.getElements())
+        {
+            const std::string id = imageCfg->getValue();
+            m_imagesUIDs.push_back( id );
+        }
+        ::fwRuntime::ConfigurationElementContainer containersConfig = m_configuration->findAllConfigurationElement(
+            s_CONTAINER_INPUT);
+        ///Gets containers UIDs
+        for(const auto& containerCfg : containersConfig.getElements())
+        {
+            const std::string id = containerCfg->getValue();
+            m_containersIDs.push_back( id );
+        }
+    }
+    else
+    {
+        typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+        const ConfigurationType containersConfig = m_configuration->findConfigurationElement("container");
+        if (containersConfig)
+        {
+            const std::vector< ConfigurationType > containersCfg = containersConfig->find(s_CONTAINER_INPUT);
+            for (const auto& cfg : containersCfg)
+            {
+                SLM_ASSERT("Missing attribute 'uid'.", cfg->hasAttribute("uid"));
+                std::string id = cfg->getAttributeValue("uid");
+                m_containersIDs.push_back( id );
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose an external data file");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("pdf", "*.pdf");
+
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getPath();
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+        this->setFile(result->getPath());
+    }
+    else
+    {
+        this->clearLocations();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::updating() throw(::fwTools::Failed)
+{
+    if( !this->hasLocationDefined() )
+    {
+        configureWithIHM();
+    }
+    if( this->hasLocationDefined() )
+    {
+        QPdfWriter pdfWriter( this->getLocations().front().string().c_str() );
+        QPainter painter( &pdfWriter );
+        pdfWriter.setPageSize( QPagedPaintDevice::A4 );
+
+        // Scale value to fit the images to a PDF page
+        const int scale = static_cast<const int>(pdfWriter.logicalDpiX() * 8);
+        ::fwThread::Pool& pool = ::fwThread::getDefaultPool();
+
+        // Adding fwImage from generic scene to the list of images to scale
+        ImagesScaledListType imagesToScale;
+        std::vector< ::std::shared_future< QImage > > futuresQImage;
+        for( const ::fwData::Image::sptr& fwImage : m_imagesToExport )
+        {
+            std::shared_future< QImage > future;
+            future = pool.post(&SPdfWriter::convertFwImageToQImage, fwImage);
+            futuresQImage.push_back( future );
+        }
+        std::for_each(futuresQImage.begin(), futuresQImage.end(), std::mem_fn(&::std::shared_future< QImage >::wait));
+        for (auto& future : futuresQImage)
+        {
+            QImage imageToDraw = future.get();
+            imagesToScale.push_back(imageToDraw);
+        }
+
+        // Adding QImage from Qt containers to the list of images to scale
+        for( QWidget*& qtContainer : m_containersToExport )
+        {
+            QImage imageToDraw = qtContainer->grab().toImage();
+            imagesToScale.push_back(imageToDraw);
+        }
+
+        // Scales images to fit the A4 format
+        std::vector< ::std::shared_future< void > > futures;
+        const size_t sizeImagesToScale = imagesToScale.size();
+        for( size_t idx = 0; idx < sizeImagesToScale; ++idx )
+        {
+            std::shared_future<void> future;
+            future = pool.post(&SPdfWriter::scaleQImage, std::ref(imagesToScale[idx]), scale);
+            futures.push_back( future );
+        }
+        std::for_each(futures.begin(), futures.end(), std::mem_fn(&::std::shared_future<void>::wait));
+
+        // Draws images onto the PDF.
+        for( QImage& qImage : imagesToScale )
+        {
+            if ( pdfWriter.newPage() )
+            {
+                pdfWriter.setPageSize( QPagedPaintDevice::A4 );
+                if ( !qImage.isNull() && qImage.bits() != nullptr )
+                {
+                    painter.drawImage( 0, 0, qImage);
+                }
+            }
+        }
+        painter.end();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::starting() throw(::fwTools::Failed)
+{
+    if (!this->isVersion2())
+    {
+        for(const std::string& id : m_imagesUIDs)
+        {
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(id);
+            SLM_ASSERT("Object '" + id + "' is not found", obj);
+            ::fwData::Image::sptr image = ::fwData::Image::dynamicCast(obj);
+            SLM_ASSERT("Object '" + id + "' is not an ::fwData::Image (" + obj->getClassname() + ")",
+                       image);
+            m_imagesToExport.push_back(image);
+        }
+    }
+    else
+    {
+        const size_t groupImageSize = this->getKeyGroupSize(s_IMAGE_INPUT);
+        for (size_t idxImage = 0; idxImage < groupImageSize; ++idxImage)
+        {
+            ::fwData::Image::sptr image = this->getInOut< ::fwData::Image >(s_IMAGE_INPUT, idxImage);
+            m_imagesToExport.push_back(image);
+        }
+    }
+    for(const auto& id : m_containersIDs)
+    {
+        ::fwGuiQt::container::QtContainer::sptr containerElt;
+        ::fwGui::container::fwContainer::sptr fwContainerFromConfig;
+        if ( ::fwGui::GuiRegistry::hasSIDContainer( id ) )
+        {
+            fwContainerFromConfig = ::fwGui::GuiRegistry::getSIDContainer( id );
+        }
+        else
+        {
+            fwContainerFromConfig = ::fwGui::GuiRegistry::getWIDContainer( id );
+        }
+        if (fwContainerFromConfig)
+        {
+            containerElt = ::fwGuiQt::container::QtContainer::dynamicCast(fwContainerFromConfig);
+            m_containersToExport.push_back(containerElt->getQtContainer());
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::stopping() throw(::fwTools::Failed)
+{
+    for( QWidget*& qtContainer : m_containersToExport )
+    {
+        qtContainer = nullptr;
+    }
+    m_containersToExport.clear();
+    m_imagesToExport.clear();
+}
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SPdfWriter::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+void SPdfWriter::scaleQImage(QImage& qImage, const int scale)
+{
+    SLM_ERROR_IF("Image is null.", qImage.isNull());
+    qImage = qImage.scaledToWidth(scale, Qt::FastTransformation);
+}
+
+//------------------------------------------------------------------------------
+
+QImage SPdfWriter::convertFwImageToQImage(::fwData::Image::sptr fwImage)
+{
+    if (fwImage->getNumberOfComponents() == 3
+        && fwImage->getType().string() == "uint8"
+        && fwImage->getSize()[2] == 1)
+    {
+        // Initialize QImage parameters
+        const ::fwData::Image::SizeType dimension = fwImage->getSize();
+        const int width                           = static_cast<int>(dimension[0]);
+        const int height                          = static_cast<int>(dimension[1]);
+
+        QImage qImage(width, height, QImage::Format_ARGB32);
+        ::boost::uint8_t* qImageBuffer = qImage.bits();
+
+        ::fwDataTools::helper::Image imgHelper(fwImage);
+        const ::boost::uint8_t* fwImageBuffer = reinterpret_cast< const ::boost::uint8_t*>( imgHelper.getBuffer() );
+
+        const unsigned int size = static_cast<unsigned int>( width * height) * 4;
+        for(unsigned int idx = 0; idx < size; idx += 4)
+        {
+            qImageBuffer[idx+3] = (255 & 0xFF);
+            qImageBuffer[idx+2] = (*fwImageBuffer++ & 0xFF);
+            qImageBuffer[idx+1] = (*fwImageBuffer++ & 0xFF);
+            qImageBuffer[idx+0] = (*fwImageBuffer++ & 0xFF);
+        }
+        return qImage.mirrored(0, 1);
+    }
+    return QImage();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioQt
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp
index 42d7f55..06121e0 100644
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp
+++ b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp
@@ -7,10 +7,10 @@
 #ifndef __OPIMAGEFILTER_ACTION_STHRESHOLD_HPP__
 #define __OPIMAGEFILTER_ACTION_STHRESHOLD_HPP__
 
-#include <fwGui/IActionSrv.hpp>
-
 #include "opImageFilter/config.hpp"
 
+#include <fwGui/IActionSrv.hpp>
+
 namespace opImageFilter
 {
 
@@ -18,9 +18,22 @@ namespace action
 {
 
 /**
- * @brief Applies a threshold on an image.
+ * @brief   Apply a threshold on an image.
  *
  * This Service needs two image: the source and the target image.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::opImageFilter::action::SThreshold">
+            <in key="source" uid="..." />
+            <inout key="target" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b source [::fwData::Image]: source image.
+ * @subsection In-Out In-Out:
+ * - \b target [::fwData::Image]: target image (ie the filtered image).
  */
 class OPIMAGEFILTER_CLASS_API SThreshold : public ::fwGui::IActionSrv
 {
@@ -39,28 +52,11 @@ protected:
 
     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)
-     */
+    /// Configure the service.
     OPIMAGEFILTER_API void configuring() throw ( ::fwTools::Failed );
 
-    /// Applies the threshold
+    /// Apply the threshold.
     OPIMAGEFILTER_API void updating() throw ( ::fwTools::Failed );
-
-private:
-
-    std::string m_imageSrcUID;
-    std::string m_imageTgtUID;
-
 };
 
 
diff --git a/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp b/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp
index 0f40ffa..2d510ed 100644
--- a/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp
+++ b/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp
@@ -12,6 +12,7 @@
 #include <fwData/Image.hpp>
 
 #include <fwDataTools/helper/Image.hpp>
+#include <fwDataTools/helper/ImageGetter.hpp>
 
 #include <fwServices/macros.hpp>
 
@@ -28,7 +29,7 @@ namespace action
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro(  ::fwGui::IActionSrv, ::opImageFilter::action::SThreshold, ::fwData::Object );
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::opImageFilter::action::SThreshold );
 
 //-----------------------------------------------------------------------------
 
@@ -64,12 +65,6 @@ 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);
 }
 
 //-----------------------------------------------------------------------------
@@ -87,7 +82,7 @@ struct ThresholdFilter
     struct Parameter
     {
         double thresholdValue; ///< threshold value.
-        ::fwData::Image::sptr imageIn; ///< image source
+        ::fwData::Image::csptr imageIn; ///< image source
         ::fwData::Image::sptr imageOut; ///< image target: contains the result of the filter
     };
 
@@ -99,18 +94,18 @@ struct ThresholdFilter
     void operator()(Parameter& param)
     {
         const PIXELTYPE thresholdValue = static_cast<PIXELTYPE>(param.thresholdValue);
-        ::fwData::Image::sptr imageIn  = param.imageIn;
+        ::fwData::Image::csptr 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::ImageGetter 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();
+        const 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];
@@ -136,12 +131,12 @@ void SThreshold::updating() throw ( ::fwTools::Failed )
     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) );
+    param.imageIn = this->getInput< ::fwData::Image >("source");
+    SLM_ASSERT("'source' key not found", param.imageIn);
 
     // 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.imageOut = this->getInOut< ::fwData::Image >("target");
+    SLM_ASSERT("'target' key not found", param.imageOut);
 
     param.thresholdValue = threshold;
 
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp
index c1f592a..84fd981 100644
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp
@@ -18,8 +18,31 @@ namespace action
 {
 
 /**
- * @brief Action to create a mesh from an image using VTK library
- **/
+ * @brief   Action to create a mesh from an image using VTK library
+ *
+ * @section Signals Signals
+ * - \b sent(int): Emitted when .
+ *
+ * @section Slots Slots
+ * - \b receive(int): .
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::opVTKMesh::action::SMeshCreation">
+            <in key="image" uid="..." />
+            <inout key="mesh" uid="..." />
+            <percentReduction value="0" />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b image [::fwData::Image]: source image.
+ * @subsection In-Out In-Out:
+ * - \b mesh [::fwData::Mesh]: target mesh.
+ * @subsection Configuration Configuration:
+ * - \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)..
+ */
 class OPVTKMESH_CLASS_API SMeshCreation : public ::fwGui::IActionSrv
 {
 
@@ -37,21 +60,7 @@ protected:
 
     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).
-     */
+    /// Configure the service.
     OPVTKMESH_API void configuring() throw ( ::fwTools::Failed );
 
     /// Process the mesh creation from the image.
@@ -59,8 +68,6 @@ protected:
 
 private:
 
-    std::string m_imageUID;
-    std::string m_meshUID;
     unsigned int m_reduction;
 };
 
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp
index 2ca048f..eba044e 100644
--- a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp
+++ b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * 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>
@@ -21,14 +20,14 @@
 #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 <vtkDiscreteMarchingCubes.h>
 #include <vtkGeometryFilter.h>
-#include <vtkSmartPointer.h>
 #include <vtkImageData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkSmartPointer.h>
+#include <vtkThreshold.h>
+#include <vtkWindowedSincPolyDataFilter.h>
 
 
 namespace opVTKMesh
@@ -39,13 +38,11 @@ namespace action
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::opVTKMesh::action::SMeshCreation, ::fwData::Object );
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::opVTKMesh::action::SMeshCreation );
 
 //-----------------------------------------------------------------------------
 
 SMeshCreation::SMeshCreation() throw() :
-    m_imageUID(""),
-    m_meshUID(""),
     m_reduction(0)
 {
 }
@@ -79,14 +76,6 @@ 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"))
     {
@@ -95,8 +84,6 @@ void SMeshCreation::configuring() throw ( ::fwTools::Failed )
         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);
 }
 
@@ -106,11 +93,11 @@ 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) );
+    /// Retrieve objects
+    auto pImage = this->getInput< ::fwData::Image >("image");
+    SLM_ASSERT("'image' key not found", pImage);
+    auto pMesh = this->getInOut< ::fwData::Mesh >("mesh");
+    SLM_ASSERT("'mesh' key not found", pMesh);
 
     ///VTK Mesher
 
diff --git a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp
index 1bc28ef..c4465fc 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #define __PATCHMEDICALDATA_NAMESPACE_HPP__
 
 /**
- * @brief       The bundle patchMedicalData allows to load patches from fwStructuralPatch and fwMDSemanticPatch library.
- * @namespace   patchMedicalData
+ * @ingroup  apprequirement
+ * @brief    The bundle patchMedicalData allows to load patches from fwStructuralPatch and fwMDSemanticPatch library.
+ *
+ * It must be added in the application \p \<requirement\> section in order to load/save medical patient folder from a
+ * different version.
  */
 namespace patchMedicalData
 {
diff --git a/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp b/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
index f465a8a..4ac00d8 100644
--- a/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
+++ b/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
@@ -1,14 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
 #include "PatchTest.hpp"
 
-#include <fwData/Object.hpp>
-
 #include <fwDataTools/Image.hpp>
 
 #include <fwGui/registry/worker.hpp>
@@ -36,7 +33,6 @@
 
 #include <boost/filesystem/operations.hpp>
 
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::patchMedicalData::ut::PatchTest );
 
@@ -131,7 +127,7 @@ void PatchTest::patchMedicalDataTest()
 
     //<patcher context="..." version="..." />
     ::fwRuntime::EConfigurationElement::sptr patcherCfg = ::fwRuntime::EConfigurationElement::New("patcher");
-    patcherCfg->setAttributeValue("context","MedicalData");
+    patcherCfg->setAttributeValue("context", "MedicalData");
     patcherCfg->setAttributeValue("version", ::fwMDSemanticPatch::PatchLoader::getCurrentVersion());
     srvCfg->addConfigurationElement(patcherCfg);
 
@@ -148,17 +144,15 @@ void PatchTest::patchMedicalDataTest()
                          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());
+    CPPUNIT_ASSERT_EQUAL(std::string("Original image"), series->getDescription());
     CPPUNIT_ASSERT_EQUAL(std::string("CT"), series->getModality());
 
-
     ::fwMedData::Patient::sptr patient = series->getPatient();
     CPPUNIT_ASSERT( patient );
     CPPUNIT_ASSERT_EQUAL(std::string("12592 ARTHRO GENOU  G"), patient->getPatientId());
     CPPUNIT_ASSERT_EQUAL(std::string("19790618"), patient->getBirthdate());
     CPPUNIT_ASSERT_EQUAL(std::string("M"), patient->getSex());
 
-
     ::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"),
@@ -176,9 +170,9 @@ void PatchTest::patchMedicalDataTest()
     // Test split between meshes and image
     std::vector< ::fwMedData::Series::sptr > otherSeries = getOtherSeries( sdb );
     CPPUNIT_ASSERT_EQUAL( (size_t) 2, otherSeries.size() );
-    CPPUNIT_ASSERT( otherSeries[0]->getStudy()     !=  otherSeries[1]->getStudy() );
-    CPPUNIT_ASSERT( otherSeries[0]->getPatient()   !=  otherSeries[1]->getPatient() );
-    CPPUNIT_ASSERT( otherSeries[0]->getEquipment() !=  otherSeries[1]->getEquipment() );
+    CPPUNIT_ASSERT( otherSeries[0]->getStudy() != otherSeries[1]->getStudy() );
+    CPPUNIT_ASSERT( otherSeries[0]->getPatient() != otherSeries[1]->getPatient() );
+    CPPUNIT_ASSERT( otherSeries[0]->getEquipment() != otherSeries[1]->getEquipment() );
 
     ::fwMedData::Patient::sptr p1 = otherSeries[0]->getPatient();
     ::fwMedData::Patient::sptr p2 = otherSeries[1]->getPatient();
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp
deleted file mode 100644
index fe0984b..0000000
--- a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-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/rc/plugin.xml b/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml
index 2769a3c..211a0cc 100644
--- a/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml
+++ b/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml
@@ -1,5 +1,5 @@
 <plugin id="basicRegistration" class="::basicRegistration::Plugin" version="@DASH_VERSION@" >
-    
+
     <library name="basicRegistration" />
 
     <extension implements="::fwServices::registry::ServiceFactory">
@@ -9,12 +9,6 @@
     </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>
diff --git a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp
deleted file mode 100644
index b625307..0000000
--- a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-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/include/guiQt/Namespace.hpp b/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
index 13727e4..0f205f5 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,27 @@
 #define __GUIQT_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace guiQt contains the basic services to build the application IHM with Qt.
- * @namespace   guiQt
+ * @ingroup apprequirement
+ * @brief The namespace guiQt contains the basic services to build the application IHM with Qt.
  *
- * @date        2009-2010.
+ * This bundle is automatically started at the launch of the application if it is present in the REQUIREMENTS of the
+ * application's Properties.cmake.
  *
+ * Example
+ * @code{cmake}
+    set( NAME Tuto01Basic )
+    set( VERSION 0.1 )
+    set( TYPE APP )
+    set( DEPENDENCIES  )
+    set( REQUIREMENTS
+        dataReg
+        servicesReg
+        guiQt # it will be automatically started when the application launches
+        fwlauncher
+        appXml2 # it will be automatically started when the application launches
+    )
+    bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoBasicConfig)
+   @endcode
  */
 namespace guiQt
 {
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp
index a238d8c..bc66fe4 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2015-2017.
  * 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,14 @@
 #include <QPointer>
 #include <QPushButton>
 
+#include <boost/filesystem/path.hpp>
+
 namespace guiQt
 {
 
 namespace editor
 {
 
-
 /**
  * @brief   This editor shows a button and send a signal when it is clicked.
  *
@@ -67,8 +68,7 @@ class GUIQT_CLASS_API SSignalButton : public QObject,
 Q_OBJECT
 public:
 
-
-    fwCoreServiceClassDefinitionsMacro ( (SSignalButton)(::gui::editor::IEditor) );
+    fwCoreServiceClassDefinitionsMacro( (SSignalButton)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
     GUIQT_API SSignalButton() throw();
@@ -102,7 +102,7 @@ protected:
     /**
      * @brief This method is used to give information about the service. Do nothing.
      */
-    GUIQT_API virtual void info(std::ostream &_sstream );
+    GUIQT_API virtual void info(std::ostream& _sstream );
 
     ///@}
 
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp b/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
index 83b6581..bb0993d 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,18 +8,21 @@
 
 #include <fwCore/base.hpp>
 
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwGui/registry/worker.hpp>
+
+#include <fwGuiQt/App.hpp>
+#include <fwGuiQt/WorkerQt.hpp>
+
 #include <fwRuntime/profile/Profile.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include <fwGui/registry/worker.hpp>
-#include <fwGuiQt/App.hpp>
-#include <fwGuiQt/WorkerQt.hpp>
-
 #include <QFile>
+#include <QResource>
 #include <QString>
+#include <QStyleFactory>
 #include <QTextStream>
 
 #include <functional>
@@ -42,7 +45,7 @@ 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();
+    int& argc   = profile->getRawArgCount();
     char** argv = profile->getRawParams();
 
     m_workerQt = ::fwGuiQt::getQtWorker(argc, argv);
@@ -87,11 +90,24 @@ int Plugin::run() throw()
 
 void Plugin::loadStyleSheet()
 {
+    if( this->getBundle()->hasParameter("resource") )
+    {
+        std::string resourceFile = this->getBundle()->getParameterValue("resource");
+        bool resourceLoaded      = QResource::registerResource(resourceFile.c_str());
+        SLM_ASSERT("Cannot load resources '"+resourceFile+"'.", resourceLoaded);
+    }
+
     if( this->getBundle()->hasParameter("style") )
     {
-        std::string styleFile = this->getBundle()->getParameterValue("style");
+        std::string style = this->getBundle()->getParameterValue("style");
+        qApp->setStyle(QStyleFactory::create(QString::fromStdString(style)));
+    }
+
+    if( this->getBundle()->hasParameter("stylesheet") )
+    {
+        std::string stylesheetFile = this->getBundle()->getParameterValue("stylesheet");
 
-        QFile data(QString::fromStdString(styleFile));
+        QFile data(QString::fromStdString(stylesheetFile));
         QString style;
         if(data.open(QFile::ReadOnly))
         {
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp
index f5aa0cd..8f00d5e 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,37 +9,30 @@
 #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 <fwGui/dialog/MessageDialog.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 <fwTools/dateAndTime.hpp>
 
-#include <QtGui>
-#include <QTabWidget>
 #include <QBoxLayout>
+#include <QTabWidget>
+#include <QtGui>
 
 #include <boost/foreach.hpp>
 
@@ -132,7 +125,7 @@ void SDynamicView::starting() throw(::fwTools::Failed)
 
     QWidget* qtContainer = parentContainer->getQtContainer();
     m_tabWidget = new QTabWidget(qtContainer);
-    m_tabWidget->setTabsClosable ( true );
+    m_tabWidget->setTabsClosable( true );
     m_tabWidget->setDocumentMode( true );
     m_tabWidget->setMovable( true );
 
@@ -162,7 +155,7 @@ void SDynamicView::stopping() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     while(m_tabWidget->count())
     {
-        this->closeTab(0,true);
+        this->closeTab(0, true);
     }
     m_tabWidget->clear();
     this->getContainer()->clean();
@@ -220,7 +213,6 @@ void SDynamicView::launchActivity(::fwMedData::ActivitySeries::sptr activitySeri
         }
     }
 
-
     SDynamicViewInfo viewInfo = this->createViewInfo(activitySeries);
     viewInfo.closable = true;
 
@@ -271,7 +263,7 @@ void SDynamicView::launchTab(SDynamicViewInfo& info)
         return;
     }
 
-    if ( m_titleToCount.find( info.title ) !=  m_titleToCount.end() )
+    if ( m_titleToCount.find( info.title ) != m_titleToCount.end() )
     {
         m_titleToCount[ info.title ]++;
     }
@@ -280,7 +272,7 @@ void SDynamicView::launchTab(SDynamicViewInfo& info)
         m_titleToCount[ info.title ] = 1;
     }
 
-    QString finalTitle = QString("%1 %2").arg( info.title.c_str(),"(%1)" ).arg( m_titleToCount[ info.title ] );
+    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();
@@ -550,7 +542,7 @@ void SDynamicView::translateParameters( ::fwData::Object::sptr sourceObj, const
         else
         {
             std::string parameterToReplace = param.by;
-            if (parameterToReplace.substr(0,1) == "!")
+            if (parameterToReplace.substr(0, 1) == "!")
             {
                 parameterToReplace.replace(0, 1, "@");
             }
@@ -562,7 +554,7 @@ void SDynamicView::translateParameters( ::fwData::Object::sptr sourceObj, const
 
             std::string parameterValue = obj->getID();
 
-            if(stringParameter && param.by.substr(0,1) == "!")
+            if(stringParameter && param.by.substr(0, 1) == "!")
             {
                 parameterValue = stringParameter->getValue();
             }
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp
index 450dbfc..bbc9ed7 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp
@@ -11,17 +11,19 @@
 
 #include <fwDataTools/Color.hpp>
 
+#include <fwGuiQt/container/QtContainer.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 <QString>
 #include <QStyle>
 
 #include <boost/foreach.hpp>
@@ -32,6 +34,8 @@ namespace guiQt
 namespace editor
 {
 
+//-----------------------------------------------------------------------------
+
 fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::SParameters, ::fwData::Object );
 
 static const ::fwCom::Signals::SignalKeyType BOOLEAN_CHANGED_SIG  = "boolChanged";
@@ -544,13 +548,26 @@ void SParameters::createDoubleWidget(QGridLayout& layout, int row, const std::st
         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);
+        auto countDecimals = [](double _num) -> int
+                             {
+                                 std::stringstream out;
+                                 out << _num;
+                                 const std::string s = out.str();
+                                 const std::string t = s.substr(s.find(".") + 1);
+                                 return static_cast<int>(t.length());
+                             };
+
+        spinbox->setDecimals(std::max( std::max(countDecimals(min), countDecimals(max)), 2));
 
-        spinbox->setSingleStep((spinbox->maximum() - spinbox->minimum()) / 100.);
+        spinbox->setRange(min, max);
+
+        // Beware, set setSingleStep after setRange() and setDecimals() otherwise it may fail
+        spinbox->setSingleStep(std::abs(spinbox->maximum() - spinbox->minimum()) / 100.);
+
+        // Set value last only after setting range and decimals, otherwise the value may be truncated
+        spinbox->setValue(defaultValue);
 
         spinbox->setProperty("key", QString(key.c_str()));
         spinbox->setProperty("count", count);
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp
index 2ce78fe..0137349 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp
@@ -1,22 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2015-2017.
  * 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 <fwCore/base.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
+#include <fwServices/macros.hpp>
+
 #include <QHBoxLayout>
 #include <QIntValidator>
 #include <QString>
@@ -31,7 +29,6 @@ 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";
@@ -40,16 +37,16 @@ const ::fwCom::Slots::SlotKeyType SSlider::s_SET_MAX_VALUE_SLIDER_SLOT = "setMax
 
 //------------------------------------------------------------------------------
 
-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)
+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);
@@ -74,7 +71,7 @@ void SSlider::configuring() throw(fwTools::Failed)
         ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("value");
         if(config)
         {
-            m_value = ::boost::lexical_cast<int>(config->getValue());
+            m_value = std::stoi(config->getValue());
         }
     }
 
@@ -83,7 +80,7 @@ void SSlider::configuring() throw(fwTools::Failed)
         ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("defaultValue");
         if(config)
         {
-            m_defaultValue = ::boost::lexical_cast<int>(config->getValue());
+            m_defaultValue = std::stoi(config->getValue());
         }
     }
 
@@ -96,7 +93,6 @@ void SSlider::configuring() throw(fwTools::Failed)
         }
     }
 
-
     // UPDATE ON RELEASE
     {
         ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("updateOnRelease");
@@ -133,8 +129,8 @@ void SSlider::configuring() throw(fwTools::Failed)
             ::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());
+            m_minValue = std::stoi(minCfg->getValue());
+            m_maxValue = std::stoi(maxCfg->getValue());
         }
     }
 }
@@ -216,7 +212,6 @@ void SSlider::starting() throw(::fwTools::Failed)
     this->resetValue();
 }
 
-
 //------------------------------------------------------------------------------
 
 void SSlider::stopping() throw(::fwTools::Failed)
diff --git a/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp b/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
index 4dd76f6..dcae569 100644
--- a/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
+++ b/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,9 +8,8 @@
 
 #include <fwCom/Slot.hpp>
 #include <fwCom/Slot.hxx>
-#include <fwCore/base.hpp>
 
-#include <fwData/Object.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/IMessageDialog.hpp>
@@ -19,7 +18,6 @@
 #include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwMemory/BufferManager.hpp>
-#include <fwMemory/BufferManager.hpp>
 #include <fwMemory/ByteSize.hpp>
 #include <fwMemory/IPolicy.hpp>
 #include <fwMemory/tools/MemoryMonitorTools.hpp>
@@ -27,11 +25,8 @@
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include <fwTools/fwID.hpp>
 #include <fwTools/Stringizer.hpp>
-
-#include <boost/bind.hpp>
-#include <boost/lexical_cast.hpp>
+#include <fwTools/fwID.hpp>
 
 #include <QComboBox>
 #include <QFuture>
@@ -39,10 +34,12 @@
 #include <QItemDelegate>
 #include <QStringList>
 #include <QTableWidgetItem>
-#include <QtConcurrentRun>
 #include <QTimer>
 #include <QVBoxLayout>
+#include <QtConcurrentRun>
 
+#include <boost/bind.hpp>
+#include <boost/lexical_cast.hpp>
 
 namespace monitor
 {
@@ -50,7 +47,9 @@ namespace monitor
 fwServicesRegisterMacro( ::gui::editor::IEditor, ::monitor::DumpEditor, ::fwData::Object );
 
 ::fwMemory::BufferManager::BufferInfoMapType m_bufferInfos;
-::fwMemory::BufferManager::BufferStats m_bufferStats = {0,0};
+::fwMemory::BufferManager::BufferStats m_bufferStats = {0, 0};
+
+//------------------------------------------------------------------------------
 
 QString getHumanReadableSize(::fwMemory::ByteSize::SizeType bytes)
 {
@@ -59,36 +58,37 @@ QString getHumanReadableSize(::fwMemory::ByteSize::SizeType bytes)
 
 //------------------------------------------------------------------------------
 
-
 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;
+    QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
 
-    void setEditorData(QWidget *editor, const QModelIndex &index) const;
-    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+    void setEditorData(QWidget* editor, const QModelIndex& index) const;
+    void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const;
 
-    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const;
 };
 
+//------------------------------------------------------------------------------
 
-QWidget *PolicyComboBoxDelegate::createEditor(QWidget *parent,
-                                              const QStyleOptionViewItem & option,
-                                              const QModelIndex & index ) const
+QWidget* PolicyComboBoxDelegate::createEditor(QWidget* parent,
+                                              const QStyleOptionViewItem& option,
+                                              const QModelIndex& index ) const
 {
-    QComboBox *policyComboBox = new QComboBox(parent);
+    QComboBox* policyComboBox = new QComboBox(parent);
 
     const std::string value = index.model()->data(index, Qt::DisplayRole).toString().toStdString();
 
-    const ::fwMemory::policy::registry::Type::KeyVectorType &factories =
+    const ::fwMemory::policy::registry::Type::KeyVectorType& factories =
         ::fwMemory::policy::registry::get()->getFactoryKeys();
 
-    for( const ::fwMemory::policy::registry::KeyType &policy :  factories)
+    for( const ::fwMemory::policy::registry::KeyType& policy :  factories)
     {
         policyComboBox->addItem(QString::fromStdString(policy));
         if(value == policy)
@@ -99,11 +99,13 @@ QWidget *PolicyComboBoxDelegate::createEditor(QWidget *parent,
     return policyComboBox;
 }
 
-void PolicyComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+//------------------------------------------------------------------------------
+
+void PolicyComboBoxDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
 {
     QString value = index.model()->data(index, Qt::DisplayRole).toString();
 
-    QComboBox *policyComboBox = static_cast<QComboBox*>(editor);
+    QComboBox* policyComboBox = static_cast<QComboBox*>(editor);
 
     int idx = policyComboBox->findText(value);
     if( idx != -1 )
@@ -112,37 +114,37 @@ void PolicyComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &i
     }
 }
 
-void PolicyComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+//------------------------------------------------------------------------------
+
+void PolicyComboBoxDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
 {
-    QComboBox *policyComboBox = static_cast<QComboBox*>(editor);
+    QComboBox* policyComboBox = static_cast<QComboBox*>(editor);
     QString value             = policyComboBox->currentText();
 
     model->setData(index, value, Qt::EditRole);
 }
 
-void PolicyComboBoxDelegate::updateEditorGeometry(QWidget *editor,
-                                                  const QStyleOptionViewItem &option,
-                                                  const QModelIndex & index ) const
+//------------------------------------------------------------------------------
+
+void PolicyComboBoxDelegate::updateEditorGeometry(QWidget* editor,
+                                                  const QStyleOptionViewItem& option,
+                                                  const QModelIndex& index ) const
 {
     editor->setGeometry(option.rect);
 }
 
-
-
-
-
 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;
+    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);
+    Qt::ItemFlags flags(const QModelIndex& index) const;
+    bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
 
     static const int s_EXTRA_INFO_NB;
 private:
@@ -152,13 +154,15 @@ private:
 
 const int PolicyTableModel::s_EXTRA_INFO_NB = 1;
 
-PolicyTableModel::PolicyTableModel(QObject *parent)
-    : QAbstractTableModel(parent)
+PolicyTableModel::PolicyTableModel(QObject* parent) :
+    QAbstractTableModel(parent)
 {
     m_buffManager = ::fwMemory::BufferManager::getDefault();
 }
 
-int PolicyTableModel::rowCount(const QModelIndex &parent) const
+//------------------------------------------------------------------------------
+
+int PolicyTableModel::rowCount(const QModelIndex& parent) const
 {
     Q_UNUSED(parent);
     size_t nbParam = 0;
@@ -172,13 +176,17 @@ int PolicyTableModel::rowCount(const QModelIndex &parent) const
     return static_cast<int>(nbParam + s_EXTRA_INFO_NB);
 }
 
-int PolicyTableModel::columnCount(const QModelIndex &parent) const
+//------------------------------------------------------------------------------
+
+int PolicyTableModel::columnCount(const QModelIndex& parent) const
 {
     Q_UNUSED(parent);
     return 1;
 }
 
-QVariant PolicyTableModel::data(const QModelIndex &index, int role) const
+//------------------------------------------------------------------------------
+
+QVariant PolicyTableModel::data(const QModelIndex& index, int role) const
 {
     if (!m_buffManager && !index.isValid())
     {
@@ -197,14 +205,14 @@ QVariant PolicyTableModel::data(const QModelIndex &index, int role) const
 
         if (index.column() == 0)
         {
-            const ::fwMemory::IPolicy::ParamNamesType &names = currentPolicy->getParamNames();
+            const ::fwMemory::IPolicy::ParamNamesType& names = currentPolicy->getParamNames();
             if(index.row() == 0)
             {
                 return QString::fromStdString(currentPolicy->getLeafClassname());
             }
             else if( (unsigned int)index.row() <= names.size())
             {
-                const ::fwMemory::IPolicy::ParamNamesType::value_type &name = names.at(index.row() - 1);
+                const ::fwMemory::IPolicy::ParamNamesType::value_type& name = names.at(index.row() - 1);
 
                 return QString::fromStdString(currentPolicy->getParam(name));
 
@@ -214,6 +222,7 @@ QVariant PolicyTableModel::data(const QModelIndex &index, int role) const
     return QVariant();
 }
 
+//------------------------------------------------------------------------------
 
 QVariant PolicyTableModel::headerData(int section, Qt::Orientation orientation, int role) const
 {
@@ -226,22 +235,23 @@ QVariant PolicyTableModel::headerData(int section, Qt::Orientation orientation,
     {
         ::fwCore::mt::ReadLock lock( m_buffManager->getMutex() );
         ::fwMemory::IPolicy::sptr currentPolicy = m_buffManager->getDumpPolicy();
-        const ::fwMemory::IPolicy::ParamNamesType &names = currentPolicy->getParamNames();
+        const ::fwMemory::IPolicy::ParamNamesType& names = currentPolicy->getParamNames();
         if (section <= 0)
         {
             return QString("Current policy");
         }
         else if( (unsigned int)section <= names.size() )
         {
-            const ::fwMemory::IPolicy::ParamNamesType::value_type &name = names.at(section - 1);
+            const ::fwMemory::IPolicy::ParamNamesType::value_type& name = names.at(section - 1);
             return QString::fromStdString(name);
         }
     }
     return QVariant();
 }
 
+//------------------------------------------------------------------------------
 
-bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
+bool PolicyTableModel::setData(const QModelIndex& index, const QVariant& value, int role)
 {
     if (m_buffManager && index.isValid() && role == Qt::EditRole)
     {
@@ -251,7 +261,7 @@ bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value,
 
         ::fwCore::mt::ReadLock lock( m_buffManager->getMutex() );
         ::fwMemory::IPolicy::sptr currentPolicy = m_buffManager->getDumpPolicy();
-        const ::fwMemory::IPolicy::ParamNamesType &names = currentPolicy->getParamNames();
+        const ::fwMemory::IPolicy::ParamNamesType& names = currentPolicy->getParamNames();
 
         if (col == 0 && (unsigned int)row <= names.size() )
         {
@@ -272,7 +282,7 @@ bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value,
                     }
                     break;
                 default:
-                    const ::fwMemory::IPolicy::ParamNamesType::value_type &name = names.at(row - 1);
+                    const ::fwMemory::IPolicy::ParamNamesType::value_type& name = names.at(row - 1);
                     currentPolicy->setParam(name, strvalue);
                     return true;
             }
@@ -281,7 +291,9 @@ bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value,
     return false;
 }
 
-Qt::ItemFlags PolicyTableModel::flags(const QModelIndex &index) const
+//------------------------------------------------------------------------------
+
+Qt::ItemFlags PolicyTableModel::flags(const QModelIndex& index) const
 {
     if (!index.isValid())
     {
@@ -291,19 +303,17 @@ Qt::ItemFlags PolicyTableModel::flags(const QModelIndex &index) const
     return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
 }
 
-
 //------------------------------------------------------------------------------
 
-
 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;
-    QVariant data(const QModelIndex &index, int role) const;
+    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;
 
 private:
@@ -311,27 +321,31 @@ private:
     ::fwMemory::BufferManager::sptr m_buffManager;
 };
 
-
-
-InfoTableModel::InfoTableModel(QObject *parent)
-    : QAbstractTableModel(parent)
+InfoTableModel::InfoTableModel(QObject* parent) :
+    QAbstractTableModel(parent)
 {
     m_buffManager = ::fwMemory::BufferManager::getDefault();
 }
 
-int InfoTableModel::rowCount(const QModelIndex &parent) const
+//------------------------------------------------------------------------------
+
+int InfoTableModel::rowCount(const QModelIndex& parent) const
 {
     Q_UNUSED(parent);
     return 4;
 }
 
-int InfoTableModel::columnCount(const QModelIndex &parent) const
+//------------------------------------------------------------------------------
+
+int InfoTableModel::columnCount(const QModelIndex& parent) const
 {
     Q_UNUSED(parent);
     return 1;
 }
 
-QVariant InfoTableModel::data(const QModelIndex &index, int role) const
+//------------------------------------------------------------------------------
+
+QVariant InfoTableModel::data(const QModelIndex& index, int role) const
 {
     if (!m_buffManager || !index.isValid())
     {
@@ -373,6 +387,7 @@ QVariant InfoTableModel::data(const QModelIndex &index, int role) const
     return QVariant();
 }
 
+//------------------------------------------------------------------------------
 
 QVariant InfoTableModel::headerData(int section, Qt::Orientation orientation, int role) const
 {
@@ -401,7 +416,6 @@ QVariant InfoTableModel::headerData(int section, Qt::Orientation orientation, in
 
 //------------------------------------------------------------------------------
 
-
 DumpEditor::DumpEditor() throw()
 {
 }
@@ -452,23 +466,22 @@ void DumpEditor::starting() throw(::fwTools::Failed)
     sizerButton->addWidget(verticalLine);
 
     sizer->addLayout(sizerButton);
-    sizer->addWidget(m_list,2);
+    sizer->addWidget(m_list, 2);
     container->setLayout( sizer );
 
-    PolicyComboBoxDelegate *policyComboBoxDelegate = new PolicyComboBoxDelegate(container);
-    PolicyTableModel *policyTableModel             = new PolicyTableModel(container);
+    PolicyComboBoxDelegate* policyComboBoxDelegate = new PolicyComboBoxDelegate(container);
+    PolicyTableModel* policyTableModel             = new PolicyTableModel(container);
     m_policyEditor = new QTableView(container);
     m_policyEditor->setModel(policyTableModel);
     m_policyEditor->setItemDelegateForRow(0, policyComboBoxDelegate);
     m_policyEditor->setSortingEnabled(false);
     m_policyEditor->horizontalHeader()->hide();
 
-    InfoTableModel *infoTableModel = new InfoTableModel(container);
+    InfoTableModel* infoTableModel = new InfoTableModel(container);
     m_infoEditor = new QTableView(container);
     m_infoEditor->setModel(infoTableModel);
     m_infoEditor->horizontalHeader()->hide();
 
-
     QHBoxLayout* tablesLayout = new QHBoxLayout();
     tablesLayout->addWidget(m_infoEditor);
     tablesLayout->addWidget(m_policyEditor);
@@ -476,10 +489,10 @@ void DumpEditor::starting() throw(::fwTools::Failed)
     sizer->addLayout(tablesLayout);
     // sizer->addWidget(m_policyEditor);
 
-    QObject::connect(m_refresh, SIGNAL(clicked ()), this, SLOT(onRefreshButton( )));
+    QObject::connect(m_refresh, SIGNAL(clicked()), this, SLOT(onRefreshButton( )));
     QObject::connect(m_mapper, SIGNAL(mapped(int)), this, SLOT(changeStatus(int)));
 
-    QObject::connect(m_updateTimer, SIGNAL(timeout ()), this, SLOT(onRefreshButton( )));
+    QObject::connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(onRefreshButton( )));
     QObject::connect(&m_watcher, SIGNAL(finished()), this, SLOT(onBufferInfo()));
 
     ::fwMemory::BufferManager::sptr buffManager = ::fwMemory::BufferManager::getDefault();
@@ -499,7 +512,7 @@ void DumpEditor::starting() throw(::fwTools::Failed)
 void DumpEditor::stopping() throw(::fwTools::Failed)
 {
     m_connection.disconnect();
-    QObject::disconnect(m_refresh, SIGNAL(clicked ()), this, SLOT(onRefreshButton()));
+    QObject::disconnect(m_refresh, SIGNAL(clicked()), this, SLOT(onRefreshButton()));
     QObject::disconnect(m_mapper, SIGNAL(mapped(int)), this, SLOT(changeStatus(int)));
     QObject::disconnect(&m_watcher, SIGNAL(finished()), this, SLOT(onBufferInfo()));
 
@@ -517,16 +530,18 @@ void DumpEditor::configuring() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-
 class SizeTableWidgetItem : public QTableWidgetItem
 {
 public:
 
-    SizeTableWidgetItem(const QString &text) : QTableWidgetItem(text)
+    SizeTableWidgetItem(const QString& text) :
+        QTableWidgetItem(text)
     {
     }
 
-    virtual bool operator< ( const QTableWidgetItem & other ) const
+    //------------------------------------------------------------------------------
+
+    virtual bool operator< ( const QTableWidgetItem& other ) const
     {
         return data(Qt::UserRole).toULongLong() < other.data(Qt::UserRole).toULongLong();
     }
@@ -577,13 +592,12 @@ void DumpEditor::onBufferInfo()
     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)
+    for(const ::fwMemory::BufferManager::BufferInfoMapType::value_type& elt :  m_bufferInfos)
     {
         m_objectsUID.push_back(elt.first);
 
@@ -591,8 +605,7 @@ void DumpEditor::onBufferInfo()
         std::string date       = "?";
         std::string lockStatus = "?";
 
-
-        const ::fwMemory::BufferInfo &dumpBuffInfo = elt.second;
+        const ::fwMemory::BufferInfo& dumpBuffInfo = elt.second;
         bool loaded                                = dumpBuffInfo.loaded;
         if(!loaded)
         {
@@ -615,7 +628,6 @@ void DumpEditor::onBufferInfo()
             lockStatus = "unlocked";
         }
 
-
         date = ::fwTools::getString(dumpBuffInfo.lastAccess.getLogicStamp());
 
         QTableWidgetItem* currentSizeItem = new SizeTableWidgetItem( getHumanReadableSize(dumpBuffInfo.size) );
@@ -639,7 +651,6 @@ void DumpEditor::onBufferInfo()
         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 );
@@ -665,7 +676,7 @@ void DumpEditor::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void DumpEditor::info( std::ostream &_sstream )
+void DumpEditor::info( std::ostream& _sstream )
 {
     _sstream << "Dump Editor";
 }
@@ -700,7 +711,7 @@ void DumpEditor::changeStatus( int index )
         {
             ::fwGui::Cursor cursor;
             cursor.setCursor(::fwGui::ICursor::BUSY);
-            const ::fwMemory::BufferInfo &dumpBuffInfo = iter->second;
+            const ::fwMemory::BufferInfo& dumpBuffInfo = iter->second;
 
             bool isLock = dumpBuffInfo.lockCount() > 0;
             if ( !isLock )
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
index 8587afd..a33a6b2 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <QCoreApplication>
-#include <QDesktopServices>
-#include <QUrl>
+#include "uiGenericQt/action/LaunchBrowserActionService.hpp"
 
 #include <fwCore/base.hpp>
-#include <fwData/Object.hpp>
 
 #include <fwServices/macros.hpp>
 
-#include "uiGenericQt/action/LaunchBrowserActionService.hpp"
+#include <QCoreApplication>
+#include <QDesktopServices>
+#include <QUrl>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
 
 namespace uiGeneric
 {
@@ -43,7 +42,7 @@ LaunchBrowserActionService::~LaunchBrowserActionService() throw()
 
 //------------------------------------------------------------------------------
 
-void LaunchBrowserActionService::info(std::ostream &_sstream )
+void LaunchBrowserActionService::info(std::ostream& _sstream )
 {
     _sstream << "Action for manage url" << std::endl;
 }
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp
index 8b82ee9..fb484ca 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-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -87,8 +87,8 @@ void SShowAbout::configuring() throw(::fwTools::Failed)
         const std::string& w = cfgSize->getExistingAttributeValue("width");
         const std::string& h = cfgSize->getExistingAttributeValue("height");
 
-        m_size.setWidth(::boost::lexical_cast< int >(w));
-        m_size.setHeight(::boost::lexical_cast< int >(h));
+        m_size.setWidth(std::stoi(w));
+        m_size.setHeight(std::stoi(h));
 
         OSLM_TRACE("Set frame size to (" << m_size.width() << ", " << m_size.height() << ")");
     }
@@ -108,7 +108,7 @@ 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);
     htmlView->setSource(url);
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
index d8c79df..0a284a5 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -33,6 +33,7 @@
 #include <QVBoxLayout>
 #include <QWidget>
 
+#include <boost/algorithm/string/case_conv.hpp>
 #include <boost/algorithm/string/trim.hpp>
 #include <boost/lexical_cast.hpp>
 
@@ -93,7 +94,7 @@ void SliceIndexPositionEditor::starting() throw(::fwTools::Failed)
                                     std::placeholders::_1);
     m_sliceSelectorPanel->setChangeTypeCallback(changeTypeCallback);
     layout->addWidget( m_sliceSelectorPanel );
-    layout->setContentsMargins(0,0,0,0);
+    layout->setContentsMargins(0, 0, 0, 0);
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
index eabbffc..4a6f226 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __UIMEASUREMENT_ACTION_LOADLANDMARK_HPP__
 #define __UIMEASUREMENT_ACTION_LOADLANDMARK_HPP__
 
+#include "uiMeasurement/config.hpp"
+
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiMeasurement/config.hpp"
+#include <boost/filesystem/path.hpp>
 
 namespace uiMeasurement
 {
@@ -17,12 +19,22 @@ namespace action
 {
 
 /**
- * @brief Load landmark from a file
+ * @brief This action allows to load landmarks from a file
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::uiMeasurement::action::LoadLandmark" >
+        <inout key="image" uid="..." />
+    </service>
+   @endcode
+ * @subsection In-Out In-Out
+ * - \b image [::fwData::Image]: Image containig the landmarks field.
  */
 class UIMEASUREMENT_CLASS_API LoadLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (LoadLandmark)( ::fwGui::IActionSrv) );
+    fwCoreServiceClassDefinitionsMacro( (LoadLandmark)( ::fwGui::IActionSrv) );
 
     UIMEASUREMENT_API LoadLandmark() throw();
 
@@ -38,7 +50,7 @@ protected:
 
     void stopping() throw (::fwTools::Failed);
 
-    void info(std::ostream &_sstream );
+    void info(std::ostream& _sstream );
 
     void load(const ::boost::filesystem::path& path);
 };
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
index a85dc25..8b5f909 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __UIMEASUREMENT_ACTION_SAVELANDMARK_HPP__
 #define __UIMEASUREMENT_ACTION_SAVELANDMARK_HPP__
 
+#include "uiMeasurement/config.hpp"
+
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiMeasurement/config.hpp"
+#include <boost/filesystem/path.hpp>
 
 namespace uiMeasurement
 {
@@ -17,12 +19,22 @@ namespace action
 {
 
 /**
- * @brief Save landmark store in image on the filesystem
+ * @brief This action allows to save the landmarks stored in image.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::uiMeasurement::action::SaveLandmark" >
+        <in key="image" uid="..." />
+    </service>
+   @endcode
+ * @subsection Input Input
+ * - \b image [::fwData::Image]: Image containig the landmarks field.
  */
 class UIMEASUREMENT_CLASS_API SaveLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SaveLandmark)( ::fwGui::IActionSrv) );
+    fwCoreServiceClassDefinitionsMacro( (SaveLandmark)( ::fwGui::IActionSrv) );
 
     UIMEASUREMENT_API SaveLandmark() throw();
 
@@ -38,7 +50,7 @@ protected:
 
     void stopping() throw (::fwTools::Failed);
 
-    void info(std::ostream &_sstream );
+    void info(std::ostream& _sstream );
 
     void save(const ::boost::filesystem::path& path);
 
diff --git a/Bundles/LeafUI/uiMeasurement/rc/plugin.xml b/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
index 410935d..e21f16b 100644
--- a/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
+++ b/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
@@ -104,5 +104,43 @@
             </object>
         </config>
     </extension>
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>LoadLandmark2</id>
+        <parameters>
+            <param name="landmark" />
+            <param name="file" />
+        </parameters>
+        <config>
+            <object uid="${landmark}" src="ref" />
+
+            <service uid="LoadLandmark" type="::ioAtoms::SReader" >
+                <inout key="data" uid="${landmark}" />
+                <file>${file}</file>
+                <patcher context="Landmark" version="V1" />
+            </service>
+            <start uid="LoadLandmark" />
+            <update uid="LoadLandmark" />
+        </config>
+    </extension>
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>SaveLandmark2</id>
+        <parameters>
+            <param name="landmark" />
+            <param name="file" />
+        </parameters>
+        <config>
+            <object uid="${landmark}" src="ref" />
+
+            <service uid="SaveLandmark" type="::ioAtoms::SWriter" >
+                <inout key="data" uid="${landmark}" />
+                <file>${file}</file>
+                <patcher context="Landmark" version="V1" />
+            </service>
+            <start uid="SaveLandmark" />
+            <update uid="SaveLandmark" />
+        </config>
+    </extension>
     
 </plugin>
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
index 9e6c100..5d92b62 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
@@ -1,11 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "uiMeasurement/action/LoadLandmark.hpp"
 
+#include <fwCom/Signal.hxx>
+
 #include <fwCore/base.hpp>
 
 #include <fwData/Point.hpp>
@@ -23,6 +25,7 @@
 #include <fwServices/IAppConfigManager.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/AppConfig2.hpp>
 #include <fwServices/registry/ServiceConfig.hpp>
 
 #include <exception>
@@ -74,7 +77,7 @@ void LoadLandmark::updating() throw(::fwTools::Failed)
     ::fwGui::dialog::LocationDialog dialogFile;
     dialogFile.setTitle("Choose a file to load landmarks");
     dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Landmark file","*.json");
+    dialogFile.addFilter("Landmark file", "*.json");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
 
     ::fwData::location::SingleFile::sptr result;
@@ -119,32 +122,74 @@ void LoadLandmark::stopping() throw (::fwTools::Failed)
 
 void LoadLandmark::load(const ::boost::filesystem::path& path)
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-
-    //get landmarks
-    ::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());
-    ::fwRuntime::ConfigurationElement::csptr config =
-        ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("LoadLandmark", replaceMap);
-
-    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
-    helper->setConfig( config );
-    helper->launch();
-    helper->stopAndDestroy();
-
-    for(::fwData::Point::sptr landmark :  newLandmarks->getCRefPoints())
+    if (this->isVersion2())
     {
-        landmarks->getRefPoints().push_back( landmark );
+        ::fwData::Image::sptr image = this->getInOut< ::fwData::Image >("image");
+        SLM_ASSERT("In-Out 'image' is not found.", image);
+
+        //get landmarks
+        ::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();
+        ::fwServices::registry::AppConfig2::FieldAdaptorType replaceMap;
+        replaceMap["GENERIC_UID"] = ::fwServices::registry::AppConfig::getUniqueIdentifier("LoadLandmarkApp");
+        replaceMap["landmark"]    = newLandmarks->getID();
+        replaceMap["file"]        = path.string();
+
+        ::fwRuntime::ConfigurationElement::csptr config =
+            ::fwServices::registry::AppConfig2::getDefault()->
+            getAdaptedTemplateConfig("LoadLandmark2", replaceMap, true);
+
+        ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+        helper->setConfig( config );
+        helper->launch();
+        helper->stopAndDestroy();
+
+        for(::fwData::Point::sptr landmark :  newLandmarks->getCRefPoints())
+        {
+            landmarks->getRefPoints().push_back( landmark );
+            auto sig = image->signal< ::fwData::Image::LandmarkAddedSignalType >(::fwData::Image::s_LANDMARK_ADDED_SIG);
+            sig->asyncEmit(landmark);
+        }
+
+        {
+            auto sig = landmarks->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
+        }
+    }
+    else
+    {
+
+        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+
+        //get landmarks
+        ::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());
+        ::fwRuntime::ConfigurationElement::csptr config =
+            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("LoadLandmark", replaceMap);
+
+        ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+        helper->setConfig( config );
+        helper->launch();
+        helper->stopAndDestroy();
+
+        for(::fwData::Point::sptr landmark :  newLandmarks->getCRefPoints())
+        {
+            landmarks->getRefPoints().push_back( landmark );
+        }
     }
 }
 
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
index d02dbc5..c1c2501 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,6 +24,7 @@
 #include <fwServices/IAppConfigManager.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/AppConfig2.hpp>
 #include <fwServices/registry/ServiceConfig.hpp>
 
 #include <exception>
@@ -75,7 +76,7 @@ void SaveLandmark::updating() throw(::fwTools::Failed)
     ::fwGui::dialog::LocationDialog dialogFile;
     dialogFile.setTitle("Choose a file to save landmarks");
     dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Landmark file","*.json");
+    dialogFile.addFilter("Landmark file", "*.json");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
     ::fwData::location::SingleFile::sptr result;
@@ -116,28 +117,58 @@ void SaveLandmark::stopping() throw (::fwTools::Failed)
 
 void SaveLandmark::save(const ::boost::filesystem::path& path)
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-
-    //get landmarks
-    ::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());
-    ::fwRuntime::ConfigurationElement::csptr config =
-        ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("SaveLandmark", replaceMap);
-
-    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
-    helper->setConfig( config );
-    helper->launch();
-
-    helper->stopAndDestroy();
+    if (this->isVersion2())
+    {
+        ::fwData::Image::csptr image = this->getInput< ::fwData::Image >("image");
+
+        ::fwData::PointList::csptr landmarks = image->getField< ::fwData::PointList >(
+            ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+        if (landmarks)
+        {
+            ::fwServices::registry::AppConfig2::FieldAdaptorType replaceMap;
+            replaceMap["GENERIC_UID"] = ::fwServices::registry::AppConfig2::getUniqueIdentifier("SaveLandmarkApp");
+            replaceMap["landmark"]    = landmarks->getID();
+            replaceMap["file"]        = path.string();
+
+            ::fwRuntime::ConfigurationElement::csptr config =
+                ::fwServices::registry::AppConfig2::getDefault()->
+                getAdaptedTemplateConfig("SaveLandmark2", replaceMap, true);
+
+            ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+            helper->setConfig( config );
+            helper->launch();
+            helper->stopAndDestroy();
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog("Save Landmarks", "There is no landmark to save.");
+        }
+    }
+    else
+    {
+        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+
+        //get landmarks
+        ::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());
+        ::fwRuntime::ConfigurationElement::csptr config =
+            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("SaveLandmark", replaceMap);
+
+        ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+        helper->setConfig( config );
+        helper->launch();
+
+        helper->stopAndDestroy();
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp
index 3549bda..f737e90 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,18 @@
 #ifndef __UIMEDDATAQT_INSERTSERIES_HPP__
 #define __UIMEDDATAQT_INSERTSERIES_HPP__
 
-#include <fwData/Object.hpp>
+#include "uiMedDataQt/config.hpp"
+
 #include <fwData/factory/new.hpp>
 
 #include <fwMedData/Series.hpp>
 
-#include "uiMedDataQt/config.hpp"
-
 namespace uiMedData
 {
 
 /**
- * @class InsertSeries
- * @brief 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
 {
@@ -38,10 +37,10 @@ public:
     UIMEDDATAQT_API virtual ~InsertSeries();
 
     /// Defines shallow copy
-    UIMEDDATAQT_API void shallowCopy( const ::fwData::Object::csptr &_source );
+    UIMEDDATAQT_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    UIMEDDATAQT_API void cachedDeepCopy( const ::fwData::Object::csptr &_source, DeepCopyCacheType &cache );
+    UIMEDDATAQT_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
 };
 
diff --git a/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp b/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp
index 8e409f2..9f8067f 100644
--- a/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp
+++ b/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2014-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,25 +8,24 @@
 #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/Integer.hpp>
+#include <fwData/String.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 <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include <QDialog>
 #include <QGridLayout>
 #include <QHBoxLayout>
+#include <QIntValidator>
 #include <QLabel>
 #include <QPushButton>
-#include <QIntValidator>
+
+#include <boost/lexical_cast.hpp>
 
 namespace uiPreferences
 {
@@ -58,7 +57,7 @@ void SPreferencesConfiguration::starting() throw(::fwTools::Failed)
     this->actionServiceStarting();
 
     // Check preferences
-    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
     if(!preferencesServicesList.empty())
     {
         const ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
@@ -185,7 +184,7 @@ void SPreferencesConfiguration::updating() throw(::fwTools::Failed)
             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]()
+            QObject::connect(directorySelector.data(), &QPushButton::clicked, [this, pref]()
                     {
                         this->onSelectDir(pref.m_lineEdit);
                     });
@@ -209,7 +208,6 @@ void SPreferencesConfiguration::updating() throw(::fwTools::Failed)
 
     dialog->setLayout(layout);
 
-
     if (dialog->exec() == QDialog::Accepted)
     {
         for(PreferenceElt& pref : m_preferences)
@@ -262,7 +260,7 @@ void SPreferencesConfiguration::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SPreferencesConfiguration::info( std::ostream &_sstream )
+void SPreferencesConfiguration::info( std::ostream& _sstream )
 {
 }
 
diff --git a/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp b/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
index ae56b52..fb93ba4 100644
--- a/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
+++ b/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,8 @@
 
 #include <QObject>
 
+#include <boost/filesystem/path.hpp>
+
 class QComboBox;
 class QPushButton;
 class QIcon;
@@ -33,7 +35,7 @@ Q_OBJECT
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (TransferFunctionEditor)(::gui::editor::IEditor) );
+    fwCoreServiceClassDefinitionsMacro( (TransferFunctionEditor)(::gui::editor::IEditor) );
 
     /// Basic constructor, do nothing.
     UITF_API TransferFunctionEditor();
@@ -58,7 +60,8 @@ protected:
      *
      * Example of configuration
      * @code{.xml}
-       <service uid="GENERIC_UID_tfm" type="::gui::editor::IEditor" impl="::uiTF::TransferFunctionEditor" autoConnect="yes" >
+       <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>
@@ -91,11 +94,11 @@ protected:
     UITF_API void initTransferFunctions();
 
     /// Check if the image contain the specified TF.
-    UITF_API bool hasTransferFunctionName(const std::string & _sName);
+    UITF_API bool hasTransferFunctionName(const std::string& _sName);
 
     /// 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 );
+    UITF_API std::string createTransferFunctionName( const std::string& _sBasename );
 
     /// Update the image with the selected TF in the ComboBox.
     UITF_API void updateTransferFunction();
@@ -126,13 +129,13 @@ private:
 
     typedef std::vector< ::boost::filesystem::path > PathContainerType;
 
-    QComboBox *m_pTransferFunctionPreset;
-    QPushButton *m_deleteButton;
-    QPushButton *m_newButton;
-    QPushButton *m_reinitializeButton;
-    QPushButton *m_renameButton;
-    QPushButton *m_importButton;
-    QPushButton *m_exportButton;
+    QComboBox* m_pTransferFunctionPreset;
+    QPushButton* m_deleteButton;
+    QPushButton* m_newButton;
+    QPushButton* m_reinitializeButton;
+    QPushButton* m_renameButton;
+    QPushButton* m_importButton;
+    QPushButton* m_exportButton;
     QWidget* m_container;
 
     /// fwID of tf selection ( used during configuration )
diff --git a/Bundles/LeafVisu/scene2D/CMakeLists.txt b/Bundles/LeafVisu/scene2D/CMakeLists.txt
index d633a65..b41dadd 100644
--- a/Bundles/LeafVisu/scene2D/CMakeLists.txt
+++ b/Bundles/LeafVisu/scene2D/CMakeLists.txt
@@ -1,5 +1,4 @@
 fwLoadProperties()
-add_definitions("-DQT_NO_KEYWORDS")
 
 find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp
deleted file mode 100644
index 8b9a00d..0000000
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ***** 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_ADAPTOR_NAMESPACE_HPP__
-#define __SCENE2D_ADAPTOR_NAMESPACE_HPP__
-
-/**
- *
- *     TODO Doxygen documentation
- *
- **/
-
-namespace scene2D
-{
-
-} // namespace scene2D
-
-
-#endif // __SCENE2D_ADAPTOR_NAMESPACE_HPP__
-
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
index c65d35f..8c9739f 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@ public:
     SCENE2D_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType &cache );
+    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
     /// Basic destructor, do nothing.
     SCENE2D_API virtual ~Axis();
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
index b518bb4..9de8132 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,9 +9,6 @@
 
 #include "scene2D/config.hpp"
 
-#include <fwData/Object.hpp>
-
-
 namespace scene2D
 {
 namespace data
@@ -29,18 +26,26 @@ public:
     {
         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;
@@ -55,6 +60,5 @@ private:
 } // namespace data
 } // namespace scene2D
 
-
 #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 f463b63..cee7705 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,6 +11,8 @@
 #include "scene2D/data/Coord.hpp"
 #include "scene2D/data/Size.hpp"
 
+#include <fwData/Object.hpp>
+
 #include <Qt>
 
 namespace scene2D
@@ -60,7 +62,6 @@ public:
         AltModifier
     } Modifier;
 
-
     fwCoreClassDefinitionsWithFactoryMacro( (Event)(::fwData::Object), (()), ::fwData::factory::New< Event >);
 
     /**
@@ -74,7 +75,7 @@ public:
     SCENE2D_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType &cache );
+    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
     bool isAccepted() const;
     void setAccepted(bool accepted);
@@ -227,6 +228,5 @@ inline void Event::setType(Type type)
 } // namespace data
 } // namespace scene2D
 
-
 #endif // __SCENE2D_DATA_EVENT_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
index 69363e6..b874ea7 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,25 +20,35 @@ class SCENE2D_CLASS_API Size
 {
 public:
 
-    Size() : m_w(0.),  m_h(0.)
+    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;
@@ -53,6 +63,5 @@ private:
 } // namespace data
 } // namespace scene2D
 
-
 #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 60fc970..edf63f0 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -37,7 +37,7 @@ public:
     SCENE2D_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType &cache );
+    SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
     SCENE2D_API float getX() const;
     SCENE2D_API void setX (float _x);
@@ -53,10 +53,8 @@ private:
 
 };
 
-
 } // namespace data
 } // namespace scene2D
 
-
 #endif // __SCENE2D_DATA_VIEWPORT_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp
deleted file mode 100644
index 48fab67..0000000
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ***** 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_DATA_NAMESPACE_HPP__
-#define __SCENE2D_DATA_NAMESPACE_HPP__
-
-/**
- *
- *     TODO Doxygen documentation
- *
- **/
-
-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 a9f872b..ed7efc9 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,11 +9,11 @@
 #define __SCENE2D_NAMESPACE_HPP__
 
 /**
+ * @ingroup apprequirement
+ * @brief This bundles contains data and services used to display a 2D Qt scene.
  *
- *     TODO Doxygen documentation
- *
- **/
-
+ * It must be started in the application or activity requirement.
+ */
 namespace scene2D
 {
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
index aa0f780..7ec2463 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -38,9 +38,9 @@ static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects"
 Render::Render() throw() :
     m_sceneStart(-100., -100.),
     m_sceneWidth(200., 200.),
-    m_antialiasing(false),
     m_scene(nullptr),
     m_view(nullptr),
+    m_antialiasing(false),
     m_aspectRatioMode(Qt::IgnoreAspectRatio)
 {
     newSlot(s_ADD_OBJECTS_SLOT, &Render::addObjects, this);
@@ -98,9 +98,13 @@ void Render::dispatchInteraction( SPTR(::scene2D::data::Event)_event)
      */
     for(ZValue2AdaptorID::reverse_iterator rit = m_zValue2AdaptorID.rbegin(); rit != m_zValue2AdaptorID.rend(); ++rit )
     {
-        if ( !_event->isAccepted() && !m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.expired() )
+        if ( !_event->isAccepted() )
         {
-            m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.lock()->processInteraction( _event );
+            auto adaptor = m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.lock();
+            if(adaptor != nullptr && adaptor->isStarted())
+            {
+                m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.lock()->processInteraction( _event );
+            }
         }
     }
 }
@@ -110,9 +114,9 @@ void Render::dispatchInteraction( SPTR(::scene2D::data::Event)_event)
 ::scene2D::data::Coord Render::mapToScene( const ::scene2D::data::Coord& coord ) const
 {
     /// Returns the viewport coordinate point mapped to scene coordinates.
-    QPoint qp ( coord.getX(), coord.getY() );
+    QPoint qp( static_cast<int>(coord.getX()), static_cast<int>(coord.getY()) );
     QPointF qps = m_view->mapToScene(qp);
-    return ::scene2D::data::Coord(qps.x(),qps.y());
+    return ::scene2D::data::Coord(qps.x(), qps.y());
 }
 
 //-----------------------------------------------------------------------------
@@ -160,7 +164,6 @@ void Render::configuring() throw ( ::fwTools::Failed )
         }
     }
 
-
 }
 
 //-----------------------------------------------------------------------------
@@ -323,17 +326,47 @@ void Render::swapping(const IService::KeyType& key) throw(::fwTools::Failed)
         }
         ::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);
+        ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find(key);
+        if (objectIter != m_objectsID2AdaptorIDVector.end())
+        {
+            for (const AdaptorIDType& adaptorId : objectIter->second)
+            {
+                SceneAdaptor2D& info = m_adaptorID2SceneAdaptor2D[adaptorId];
+
+                if (info.getService() && info.getService()->isStarted())
+                {
+                    info.getService()->stop();
+                }
+            }
+        }
 
         // create connections
         if(obj)
         {
-            this->startAdaptorsFromComposite(map);
+            ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find(key);
+            if (objectIter != m_objectsID2AdaptorIDVector.end())
+            {
+                for (const AdaptorIDType& adaptorId : objectIter->second)
+                {
+                    SceneAdaptor2D& info = m_adaptorID2SceneAdaptor2D[adaptorId];
+
+                    if (info.getService())
+                    {
+                        if(obj != info.getService()->getObject())
+                        {
+                            ::fwServices::OSR::swapService(::fwData::Object::constCast(obj), info.getService());
+                        }
+                        info.getService()->start();
+                    }
+                    else
+                    {
+                        this->startAdaptor(adaptorId, obj);
+                    }
+                }
+            }
 
             ::fwData::Composite::ContainerType mapConnect;
             mapConnect[key] = ::fwData::Object::constCast(obj);
@@ -418,7 +451,7 @@ void Render::startContext()
         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)));
+    m_scene->setBackgroundBrush(QBrush(QColor(0, 0, 0)));
     m_scene->setFocus( Qt::MouseFocusReason );
 
     SPTR(::scene2D::data::Viewport) viewport = ::scene2D::data::Viewport::dynamicCast( m_objectID2Object["view1"] );
@@ -480,14 +513,13 @@ void Render::configureAxis( ConfigurationType _conf )
     std::string scale     = _conf->getAttributeValue("scale");
     std::string scaleType = _conf->getAttributeValue("scaleType");
 
-
     if(m_objectID2Object.count(id) == 0)
     {
         m_objectID2Object[id] = ::scene2D::data::Axis::New();
         SLM_ASSERT( "Sorry, axis ptr is null",  m_objectID2Object[id] );
-        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setOrigin (::boost::lexical_cast< float >( origin ));
-        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setScale (::boost::lexical_cast< float >( scale ));
-        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setScaleType ( scaleType );
+        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setOrigin(std::stof( origin ));
+        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setScale(std::stof( scale ));
+        ::scene2D::data::Axis::dynamicCast(m_objectID2Object[id])->setScaleType( scaleType );
     }
 }
 
@@ -507,10 +539,10 @@ void Render::configureViewport( ConfigurationType _conf )
 
     m_objectID2Object[id] = ::scene2D::data::Viewport::New();
     SLM_ASSERT( "Sorry, viewport ptr is null",  m_objectID2Object[id] );
-    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setX (::boost::lexical_cast< float >( x ));
-    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setY (::boost::lexical_cast< float >( y ));
-    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setWidth (::boost::lexical_cast< float >( width ));
-    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setHeight (::boost::lexical_cast< float >( height ));
+    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setX(std::stof( x ));
+    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setY(std::stof( y ));
+    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setWidth(std::stof( width ));
+    ::scene2D::data::Viewport::dynamicCast(m_objectID2Object[id])->setHeight(std::stof( height ));
 }
 
 //-----------------------------------------------------------------------------
@@ -526,10 +558,10 @@ void Render::configureScene( ConfigurationType _conf )
     std::string width  = _conf->getAttributeValue("width");
     std::string height = _conf->getAttributeValue("height");
 
-    m_sceneStart.setX( ::boost::lexical_cast< float >( x ) );
-    m_sceneStart.setY( ::boost::lexical_cast< float >( y ) );
-    m_sceneWidth.setX( ::boost::lexical_cast< float >( width ) );
-    m_sceneWidth.setY( ::boost::lexical_cast< float >( height ) );
+    m_sceneStart.setX( std::stof( x ) );
+    m_sceneStart.setY( std::stof( y ) );
+    m_sceneWidth.setX( std::stof( width ) );
+    m_sceneWidth.setY( std::stof( height ) );
 
     if( _conf->hasAttribute("antialiasing"))
     {
@@ -701,8 +733,8 @@ void Render::stopAdaptor(const AdaptorIDType& _adaptorID)
 void Render::updateSceneSize( float ratioPercent )
 {
     QRectF rec = m_scene->itemsBoundingRect();
-    qreal x,y,w,h;
-    rec.getRect(&x,&y,&w,&h);
+    qreal x, y, w, h;
+    rec.getRect(&x, &y, &w, &h);
 
     if ( ratioPercent != 0 )
     {
@@ -712,7 +744,7 @@ void Render::updateSceneSize( float ratioPercent )
         h = h + h * ratioPercent;
         x = centerX - w/2.0;
         y = centerY - h/2.0;
-        rec.setRect(x,y,w,h);
+        rec.setRect(x, y, w, h);
     }
     m_sceneStart.setX( x );
     m_sceneStart.setY( y );
@@ -782,5 +814,3 @@ void Render::removeObjects(::fwData::Composite::ContainerType objects)
 
 } // namespace scene2D
 
-
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
index 8185600..578c9de 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/macros.hpp>
+#include "scene2D/data/InitQtPen.hpp"
 
 #include <fwData/Composite.hpp>
 
-#include <QGraphicsItemGroup>
+#include <fwServices/macros.hpp>
 
+#include <QGraphicsItemGroup>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Axis, ::fwData::Composite );
 
@@ -22,7 +22,10 @@ namespace scene2D
 namespace adaptor
 {
 
-Axis::Axis() throw() : m_showLine(true), m_tickSize(0.02f), m_color(Qt::white)
+Axis::Axis() throw() :
+    m_showLine(true),
+    m_tickSize(0.02f),
+    m_color(Qt::white)
 {
 }
 
@@ -72,14 +75,12 @@ void Axis::configuring() throw( ::fwTools::Failed)
 
     this->IAdaptor::configuring();  // Looks for 'xAxis', 'yAxis' and 'zValue'
 
-
     // 'color'
     if (!m_configuration->getAttributeValue("color").empty())
     {
         ::scene2D::data::InitQtPen::setPenColor(m_color, m_configuration->getAttributeValue("color"));
     }
 
-
     // 'align' attribute configuration
     m_align = m_configuration->getAttributeValue("align");
     SLM_ASSERT(
@@ -88,7 +89,6 @@ void Axis::configuring() throw( ::fwTools::Failed)
     SLM_ASSERT("Unsupported value for 'align' attribute.",
                m_align == "left" || m_align == "right" || m_align == "top" || m_align == "bottom");
 
-
     // Axis bounds
     const std::string min = m_configuration->getAttributeValue("min");
     const std::string max = m_configuration->getAttributeValue("max");
@@ -96,14 +96,12 @@ void Axis::configuring() throw( ::fwTools::Failed)
     SLM_ASSERT("'min' attribute is missing.", !min.empty());
     SLM_ASSERT("'max' attribute is missing.", !max.empty());
 
-    m_min = ::boost::lexical_cast< float >( min );
-    m_max = ::boost::lexical_cast< float >( max );
-
+    m_min = std::stof( min );
+    m_max = std::stof( max );
 
     // Ticks size
     const std::string tickSize = m_configuration->getAttributeValue("tickSize");
-    m_tickSize = ( tickSize.empty() ) ? 1.0 : ::boost::lexical_cast< float >( tickSize );
-
+    m_tickSize = ( tickSize.empty() ) ? 1.0 : std::stof( tickSize );
 
     // Viewport
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
@@ -114,10 +112,9 @@ void Axis::configuring() throw( ::fwTools::Failed)
         m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
-
     // Step
     const std::string interval = m_configuration->getAttributeValue("interval");
-    m_interval = ( interval.empty() ) ? 1.0f : ::boost::lexical_cast< float >( interval );
+    m_interval = ( interval.empty() ) ? 1.0f : std::stof( interval );
 }
 
 //---------------------------------------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
index 69899aa..6f24f16 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
@@ -1,28 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Grid2D.hpp"
-#include "scene2D/data/InitQtPen.hpp"
+
 #include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/InitQtPen.hpp"
 
-#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
-#include <QGraphicsItemGroup>
+#include <fwServices/macros.hpp>
 
+#include <QGraphicsItemGroup>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Grid2D, ::fwData::Composite );
 
-
 namespace scene2D
 {
 namespace adaptor
 {
 
-Grid2D::Grid2D() throw() : m_xSpacing(10), m_ySpacing(10)
+Grid2D::Grid2D() throw() :
+    m_xSpacing(10),
+    m_ySpacing(10)
 {
 }
 
@@ -44,24 +46,22 @@ void Grid2D::configuring() throw ( ::fwTools::Failed )
 
     SLM_TRACE("IAdaptor configuring ok");
 
-
     // Set the x/y min/max values
-    m_xMin = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("xMin") );
-    m_xMax = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("xMax") );
-    m_yMin = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("yMin") );
-    m_yMax = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("yMax") );
-
+    m_xMin = std::stof( m_configuration->getAttributeValue("xMin") );
+    m_xMax = std::stof( m_configuration->getAttributeValue("xMax") );
+    m_yMin = std::stof( m_configuration->getAttributeValue("yMin") );
+    m_yMax = std::stof( m_configuration->getAttributeValue("yMax") );
 
     // If the corresponding attributes are present in the config, set the xSpacing, ySpacing between
     // the lines and color of the lines:
     if (!m_configuration->getAttributeValue("xSpacing").empty())
     {
-        m_xSpacing = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("xSpacing") );
+        m_xSpacing = std::stof( m_configuration->getAttributeValue("xSpacing") );
     }
 
     if (!m_configuration->getAttributeValue("ySpacing").empty())
     {
-        m_ySpacing = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("ySpacing") );
+        m_ySpacing = std::stof( m_configuration->getAttributeValue("ySpacing") );
     }
 
     if (!m_configuration->getAttributeValue("color").empty())
@@ -218,5 +218,3 @@ void Grid2D::doStop() throw ( ::fwTools::Failed )
 } // 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 224c4d0..a637ec4 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp
@@ -1,22 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Histogram.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
 
-#include <fwServices/macros.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/InitQtPen.hpp"
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
+#include <fwServices/macros.hpp>
+
 #include <QGraphicsRectItem>
 #include <QGraphicsView>
 
-
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Histogram, ::fwData::Histogram);
 
 namespace scene2D
@@ -29,7 +29,10 @@ const float Histogram::SCALE = 1.1f; // vertical scaling factor applied at each
 
 //---------------------------------------------------------------------------------------------------------
 
-Histogram::Histogram() throw() : m_color("green"), m_opacity( 0.80f ), m_scale(1.0)
+Histogram::Histogram() throw() :
+    m_color("green"),
+    m_opacity( 0.80f ),
+    m_scale(1.0)
 {
     m_layer = NULL;
 }
@@ -59,7 +62,7 @@ void Histogram::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("opacity").empty())
     {
-        m_opacity = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("opacity") );
+        m_opacity = std::stof( m_configuration->getAttributeValue("opacity") );
     }
 
     m_histogramPointUID = m_configuration->getAttributeValue("histogramPointUID");
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
index b015bf8..17bf414 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
@@ -1,21 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "scene2D/Scene2DGraphicsView.hpp"
 #include "scene2D/adaptor/HistogramCursor.hpp"
-#include "scene2D/data/InitQtPen.hpp"
 
-#include <fwServices/macros.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/InitQtPen.hpp"
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
-#include <QGraphicsEllipseItem>
-#include <QFont>
+#include <fwServices/macros.hpp>
 
+#include <QFont>
+#include <QGraphicsEllipseItem>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::HistogramCursor, ::fwData::Histogram);
 
@@ -25,7 +25,12 @@ namespace adaptor
 {
 
 HistogramCursor::HistogramCursor() throw() :
-    m_color("red"), m_borderColor(Qt::gray), m_opacity(0.8f), m_index(nullptr), m_pointSize(6.f), m_layer(nullptr)
+    m_color("red"),
+    m_borderColor(Qt::gray),
+    m_opacity(0.8f),
+    m_index(nullptr),
+    m_pointSize(6.f),
+    m_layer(nullptr)
 {
 }
 
@@ -50,7 +55,7 @@ void HistogramCursor::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("opacity").empty())
     {
-        m_opacity = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("opacity") );
+        m_opacity = std::stof( m_configuration->getAttributeValue("opacity") );
     }
 
     if (!m_configuration->getAttributeValue("borderColor").empty())
@@ -60,7 +65,7 @@ void HistogramCursor::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("pointSize").empty())
     {
-        m_pointSize = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("pointSize") );
+        m_pointSize = std::stof( m_configuration->getAttributeValue("pointSize") );
     }
 
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
index 958ff5f..4b1a8ce 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
@@ -1,21 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "scene2D/Scene2DGraphicsView.hpp"
 #include "scene2D/adaptor/HistogramValue.hpp"
-#include "scene2D/data/InitQtPen.hpp"
 
-#include <fwServices/macros.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/InitQtPen.hpp"
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
-#include <QGraphicsEllipseItem>
-#include <QFont>
+#include <fwServices/macros.hpp>
 
+#include <QFont>
+#include <QGraphicsEllipseItem>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::HistogramValue, ::fwData::Histogram);
 
@@ -25,7 +25,11 @@ namespace adaptor
 {
 
 HistogramValue::HistogramValue() throw() :
-    m_color(Qt::white), m_isInteracting(false),  m_text(nullptr), m_fontSize(8.f), m_layer(nullptr)
+    m_color(Qt::white),
+    m_isInteracting(false),
+    m_text(nullptr),
+    m_fontSize(8.f),
+    m_layer(nullptr)
 {
 }
 
@@ -50,7 +54,7 @@ void HistogramValue::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("fontSize").empty())
     {
-        m_fontSize = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("fontSize") );
+        m_fontSize = std::stof( m_configuration->getAttributeValue("fontSize") );
     }
 
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
@@ -77,7 +81,6 @@ void HistogramValue::doStart() throw( ::fwTools::Failed)
     m_font.setKerning( true );
     m_font.setFixedPitch( true );
 
-
     m_text = new QGraphicsSimpleTextItem();
     m_text->setBrush( QBrush(m_color.color()) );
     m_text->setFont( m_font );
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
index e9bf593..e8ebda2 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 scene2D
 namespace adaptor
 {
 
-
-IAdaptor::IAdaptor() throw() : m_zValue(0), m_opacity(1)
+IAdaptor::IAdaptor() throw() :
+    m_zValue(0),
+    m_opacity(1)
 {
 }
 
@@ -31,6 +32,8 @@ IAdaptor::IAdaptor() throw() : m_zValue(0), m_opacity(1)
 
 IAdaptor::~IAdaptor() throw()
 {
+    m_xAxis.reset();
+    m_yAxis.reset();
 }
 
 //-----------------------------------------------------------------------------
@@ -212,12 +215,12 @@ void IAdaptor::configuring() throw ( ::fwTools::Failed )
 
     if ( m_configuration->hasAttribute("zValue") )
     {
-        m_zValue = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("zValue"));
+        m_zValue = std::stof( m_configuration->getAttributeValue("zValue"));
     }
 
     if ( m_configuration->hasAttribute("opacity") )
     {
-        m_opacity = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("opacity"));
+        m_opacity = std::stof( m_configuration->getAttributeValue("opacity"));
     }
 }
 
@@ -286,9 +289,6 @@ void IAdaptor::stopping() throw ( ::fwTools::Failed )
 {
     m_connections.disconnect();
     doStop();
-
-    m_xAxis.reset();
-    m_yAxis.reset();
 }
 
 //-----------------------------------------------------------------------------
@@ -336,5 +336,3 @@ void IAdaptor::unregisterServices()
 }
 } // namespace scene2D
 
-
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
index aaf578c..dd32a7f 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
@@ -1,30 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Line.hpp"
+
 #include "scene2D/data/InitQtPen.hpp"
 
-#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
-#include <QGraphicsItemGroup>
-
+#include <fwServices/macros.hpp>
 
+#include <QGraphicsItemGroup>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Line, ::fwData::Composite );
 
-
 namespace scene2D
 {
 namespace adaptor
 {
 
 Line::Line() throw() :
-    m_x1(0.f), m_x2(0.f),
-    m_y1(0.f), m_y2(0.f),
+    m_x1(0.f),
+    m_x2(0.f),
+    m_y1(0.f),
+    m_y2(0.f),
     m_lineType(PLAIN),
     m_layer(nullptr)
 {
@@ -49,10 +50,10 @@ void Line::configuring() throw ( ::fwTools::Failed )
     SLM_TRACE("IAdaptor configuring ok");
 
     // Set the beginning and ending coordinates values
-    m_x1 = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("x1") );
-    m_x2 = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("x2") );
-    m_y1 = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("y1") );
-    m_y2 = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("y2") );
+    m_x1 = std::stof( m_configuration->getAttributeValue("x1") );
+    m_x2 = std::stof( m_configuration->getAttributeValue("x2") );
+    m_y1 = std::stof( m_configuration->getAttributeValue("y1") );
+    m_y2 = std::stof( m_configuration->getAttributeValue("y2") );
 
     // If the corresponding attributes are present in the config, set the color of the line
     if (!m_configuration->getAttributeValue("color").empty())
@@ -126,5 +127,3 @@ void Line::doStop() throw ( ::fwTools::Failed )
 } // namespace adaptor
 } // namespace scene2D
 
-
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
index 29858e1..634658c 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
@@ -1,30 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "scene2D/data/InitQtPen.hpp"
 
-#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
+#include <fwServices/macros.hpp>
+
 #include <QGraphicsItemGroup>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ScaleValues, ::fwData::Composite );
 
-
 namespace scene2D
 {
 namespace adaptor
 {
 
 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)
+    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)
 {
 }
 
@@ -52,17 +58,15 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
     SLM_ASSERT("'min' atttribute is missing.", !min.empty());
     SLM_ASSERT("'min' atttribute is missing.", !max.empty());
 
-    m_min = ::boost::lexical_cast< double >( min );
-    m_max = ::boost::lexical_cast< double >( max );
-
+    m_min = std::stod( min );
+    m_max = std::stod( max );
 
     // Interval configuration
     if (!m_configuration->getAttributeValue("interval").empty())
     {
-        m_interval = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("interval") );
+        m_interval = std::stof( m_configuration->getAttributeValue("interval") );
     }
 
-
     // Color configuration
     const std::string color = m_configuration->getAttributeValue("color");
     if (!color.empty())
@@ -74,14 +78,12 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
         ::scene2D::data::InitQtPen::setPenColor(m_pen, "white", m_opacity);
     }
 
-
     // Font size configuratiion
     if (!m_configuration->getAttributeValue("fontSize").empty())
     {
-        m_fontSize = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("fontSize") );
+        m_fontSize = std::stof( m_configuration->getAttributeValue("fontSize") );
     }
 
-
     // Viewport configuratiion
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
                !m_configuration->getAttributeValue("viewportUID").empty());
@@ -91,7 +93,6 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
         m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
-
     // Show unit
     const std::string showUnit = m_configuration->getAttributeValue("showUnit");
     if(showUnit == "true" || showUnit == "false")
@@ -99,11 +100,9 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
         m_showUnit = (showUnit == "true");
     }
 
-
     // Unit text configuration
     m_displayedUnit = m_configuration->getAttributeValue("unit");
 
-
     // 'align' attribute configuration
     m_align = m_configuration->getAttributeValue("align");
 
@@ -437,9 +436,7 @@ void ScaleValues::doStop() throw ( ::fwTools::Failed )
     m_connection.disconnect();
 }
 
-
 } // namespace adaptor
 
 } // namespace scene2D
 
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
index 5f589fa..9246a12 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Square.hpp"
 
-#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
-#include <QGraphicsItemGroup>
+#include <fwServices/macros.hpp>
 
+#include <QGraphicsItemGroup>
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Square, ::fwData::Composite );
 
-
 namespace scene2D
 {
 namespace adaptor
@@ -26,7 +25,7 @@ Square::Square() throw() :
     m_size(0),
     m_layer(nullptr),
     m_rec(nullptr),
-    m_pointIsCaptured (false)
+    m_pointIsCaptured(false)
 {
 }
 
@@ -48,9 +47,9 @@ void Square::configuring() throw ( ::fwTools::Failed )
 
     SLM_TRACE("IAdaptor configuring ok");
 
-    m_coord.setX( ::boost::lexical_cast< double >( m_configuration->getAttributeValue("x") ) );
-    m_coord.setY( ::boost::lexical_cast< double >( m_configuration->getAttributeValue("y") ) );
-    m_size = ::boost::lexical_cast< ::boost::uint32_t >( m_configuration->getAttributeValue("size") );
+    m_coord.setX( std::stod( m_configuration->getAttributeValue("x") ) );
+    m_coord.setY( std::stod( m_configuration->getAttributeValue("y") ) );
+    m_size = std::stoi( m_configuration->getAttributeValue("size") );
     if ( m_configuration->hasAttribute("color") )
     {
         this->setColor(m_configuration->getAttributeValue("color"));
@@ -153,17 +152,17 @@ void Square::processInteraction( ::scene2D::data::Event::sptr _event )
 
 //-----------------------------------------------------------------------------
 
-bool Square::coordViewIsInItem( const ::scene2D::data::Coord & coord, QGraphicsItem * item )
+bool Square::coordViewIsInItem( const ::scene2D::data::Coord& coord, QGraphicsItem* item )
 {
     ::scene2D::data::Coord scenePoint = this->getScene2DRender()->mapToScene( coord );
-    QPointF sp ( scenePoint.getX(), scenePoint.getY() );
+    QPointF sp( scenePoint.getX(), scenePoint.getY() );
     QPointF ip = item->mapFromScene( sp );
     return item->contains( ip );
 }
 
 //-----------------------------------------------------------------------------
 
-::scene2D::data::Coord Square::coordViewToCoordItem( const ::scene2D::data::Coord & coord, QGraphicsItem * item )
+::scene2D::data::Coord Square::coordViewToCoordItem( const ::scene2D::data::Coord& coord, QGraphicsItem* item )
 {
     ::scene2D::data::Coord scenePoint = this->getScene2DRender()->mapToScene( coord );
     //QPointF sp ( scenePoint.getX(), scenePoint.getY() );
@@ -176,5 +175,3 @@ bool Square::coordViewIsInItem( const ::scene2D::data::Coord & coord, QGraphicsI
 } // namespace adaptor
 } // namespace scene2D
 
-
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
index 18012f0..17e3782 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
@@ -220,8 +220,8 @@ void TransferFunction::buildBounds()
 {
     ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
 
-    QGraphicsEllipseItem* beginCircle = m_circles.front();
-    QGraphicsEllipseItem* endCircle   = m_circles.back();
+    const QGraphicsEllipseItem* beginCircle = m_circles.front();
+    const QGraphicsEllipseItem* endCircle   = m_circles.back();
 
     double x1 = viewport->getX() - 10;
     double x2 = beginCircle->rect().x() + beginCircle->pos().x() + m_circleWidth /2;
@@ -296,9 +296,8 @@ void TransferFunction::buildLinearLinesAndPolygons()
     QVector<QPointF> vect;
     QLinearGradient grad;
 
-    QGraphicsEllipseItem* firtsCircle = m_circles.front();
-    QGraphicsEllipseItem* lastCircle  = m_circles.back();
-
+    const QGraphicsEllipseItem* firtsCircle = m_circles.front();
+    const QGraphicsEllipseItem* lastCircle  = m_circles.back();
 
     double xBegin;
     double xEnd;
@@ -334,8 +333,7 @@ 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 ( auto circleIt = m_circles.cbegin(); circleIt != m_circles.cend()-1; ++circleIt)
     {
         QPointF p1((*circleIt)->rect().x() + (*circleIt)->pos().x() + m_circleWidth / 2,
                    (*circleIt)->rect().y() + (*circleIt)->pos().y() + m_circleHeight / 2);
@@ -380,12 +378,11 @@ 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 ( auto circleIt = m_circles.cbegin(); circleIt != m_circles.cend(); ++circleIt)
     {
         QGraphicsEllipseItem* circle = *circleIt;
         QGraphicsEllipseItem* previousCircle;
-        if (circleIt == m_circles.begin())
+        if (circleIt == m_circles.cbegin())
         {
             previousCircle = circle;
         }
@@ -394,7 +391,7 @@ void TransferFunction::buildNearestLinesAndPolygons()
             previousCircle = *(circleIt-1);
         }
         QGraphicsEllipseItem* nextCircle;
-        if (circleIt == m_circles.end()-1)
+        if (circleIt == m_circles.cend()-1)
         {
             nextCircle = circle;
         }
@@ -574,20 +571,21 @@ void TransferFunction::doStop() throw ( ::fwTools::Failed )
     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 (auto circleIt = m_circles.begin(); circleIt != m_circles.end(); ++circleIt )
     {
         delete *circleIt;
     }
+    m_circles.clear();
 
-    for( std::vector< QGraphicsItem* >::iterator linesPolyIt = m_linesAndPolygons.begin();
-         linesPolyIt != m_linesAndPolygons.end(); ++linesPolyIt)
+    for( auto linesPolyIt = m_linesAndPolygons.begin(); linesPolyIt != m_linesAndPolygons.end(); ++linesPolyIt)
     {
         delete *linesPolyIt;
     }
+    m_linesAndPolygons.clear();
 
     this->getScene2DRender()->getScene()->removeItem(m_layer);
     delete m_layer;
+    m_layer = nullptr;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
index 0354df5..aa7d8c3 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/ViewportRangeSelector.hpp"
-#include "scene2D/data/Viewport.hpp"
+
 #include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/Viewport.hpp"
 
 #include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
@@ -15,7 +16,6 @@
 
 #include <QGraphicsRectItem>
 
-
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ViewportRangeSelector,
                          ::scene2D::data::Viewport);
 
@@ -24,7 +24,6 @@ namespace scene2D
 namespace adaptor
 {
 
-
 ViewportRangeSelector::ViewportRangeSelector() throw() :
     m_shutter(nullptr),
     m_isLeftInteracting( false ),
@@ -58,7 +57,7 @@ void ViewportRangeSelector::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("initialWidth").empty())
     {
-        m_initialWidth = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("initialWidth") );
+        m_initialWidth = std::stof( m_configuration->getAttributeValue("initialWidth") );
 
         if( m_initialWidth > viewportWidth || m_initialWidth < m_clickCatchRange )
         {
@@ -75,7 +74,7 @@ void ViewportRangeSelector::configuring() throw( ::fwTools::Failed)
 
     if (!m_configuration->getAttributeValue("initialPos").empty())
     {
-        m_initialX = ::boost::lexical_cast< float >( m_configuration->getAttributeValue("initialPos") );
+        m_initialX = std::stof( m_configuration->getAttributeValue("initialPos") );
 
         if( m_initialX < viewport->getX() || (m_initialX + m_initialWidth) > viewportWidth)
         {
@@ -216,11 +215,13 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
             }
             else if( onShutterMiddle )
             {
-                this->getScene2DRender()->getView()->setCursor( Qt::OpenHandCursor );   // open hand, for moving the whole shutter
+                this->getScene2DRender()->getView()->setCursor( Qt::OpenHandCursor );   // open hand, for moving the
+                                                                                        // whole shutter
             }
             else
             {
-                this->getScene2DRender()->getView()->setCursor( Qt::ArrowCursor );      // reset the cursor to the default cursor
+                this->getScene2DRender()->getView()->setCursor( Qt::ArrowCursor );      // reset the cursor to the
+                                                                                        // default cursor
             }
         }
 
@@ -369,8 +370,8 @@ bool ViewportRangeSelector::mouseOnShutterRight( ::scene2D::data::Coord _coord)
 
     double shutterRightPos = shutterCoordPair.first + m_shutter->rect().width() * m_xAxis->getScale();
 
-    return ( _coord.getX() >=  shutterRightPos - m_clickCatchRange )
-           && ( _coord.getX() <=  shutterRightPos + m_clickCatchRange );
+    return ( _coord.getX() >= shutterRightPos - m_clickCatchRange )
+           && ( _coord.getX() <= shutterRightPos + m_clickCatchRange );
 }
 
 //---------------------------------------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTK/Properties.cmake b/Bundles/LeafVisu/visuVTK/Properties.cmake
index d6c1e0f..00fa962 100644
--- a/Bundles/LeafVisu/visuVTK/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTK/Properties.cmake
@@ -10,3 +10,4 @@ set( DEPENDENCIES
     fwServices
 )
 set( REQUIREMENTS )
+set( USE_PCH_FROM_TARGET fwRenderVTK )
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt b/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
index 70a31c3..bbf705f 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
@@ -1,12 +1,6 @@
 fwLoadProperties()
 
 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
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake b/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
index 201865c..d263a0a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
@@ -21,3 +21,4 @@ set( REQUIREMENTS
     servicesReg
     visuVTK
 )
+set( USE_PCH_FROM_TARGET fwRenderVTK )
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
index 3fb5a65..438f18c 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,27 +9,39 @@
 
 #ifndef ANDROID
 
-// Config include
 #include "visuVTKAdaptor/config.hpp"
 
-// FW4SPL Includes
+#include <fwData/Color.hpp>
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwRenderVTK/vtk/fwVtkAxesActor.hpp>
 
-// VTK Includes
 #include <vtkSmartPointer.h>
-#include <fwRenderVTK/vtk/fwVtkAxesActor.hpp>
 
 namespace visuVTKAdaptor
 {
 
 /**
  * @brief Render axes in the generic scene.
+ *
+ * @code{.xml}
+      <adaptor id="..." class="::visuVTKAdaptor::Axes" objectId="self">
+       <config renderer="default" length="..." transform="..." label="..." marker="..." markerColor="..." />
+      </adaptor>
+     @endcode
+ * - \b renderer : defines the renderer to show the axes.
+ * - \b length : defines the length of the axes.
+ * - \b transform : transformation matrix applied to the axes.
+ * - \b label : display the name of the axes.
+ * - \b marker(no) : enable the sphere marker.
+ * - \b markerColor(#FFFFFF) : color of the sphere marker.
  */
+
 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();
@@ -55,11 +67,18 @@ protected:
 
     void buildPipeline();
 
-    fwVtkAxesActor * m_axesActor;
+    fwVtkAxesActor* m_axesActor;
     double m_length;
     bool m_labelOn;
     vtkSmartPointer< vtkTransform> m_transformAxes;
 
+    /// actor for the sphere marker
+    vtkSmartPointer< vtkActor> m_sphereActor;
+    /// boolean to show the sphere marker
+    bool m_sphereOn;
+    /// color of the sphere marker
+    ::fwData::Color::sptr m_color;
+
     ///X,Y and Z Labels
     std::string m_xLabel;
     std::string m_yLabel;
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
index b2ff28f..541aa55 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,12 +9,13 @@
 
 #ifndef ANDROID
 
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
 #include "visuVTKAdaptor/config.hpp"
 
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
 class vtkTransform;
 class vtkBoxWidget2;
-
+class vtkCommand;
 
 namespace visuVTKAdaptor
 {
@@ -46,7 +47,7 @@ protected:
 
 private:
 
-    ::vtkBoxWidget2* m_vtkBoxWidget;
+    vtkBoxWidget2* m_vtkBoxWidget;
     vtkCommand* m_boxWidgetCommand;
 
     double m_scaleFactor;
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
index 1517ab6..8ed8158 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
@@ -19,7 +19,21 @@ namespace visuVTKAdaptor
 
 
 /**
- * @brief Adaptor to display image landmarks
+ * @brief Adaptor for landmarks in the field of an image.
+ *
+ * Registers a ::fwData::PointList in to the generic scene for the landmarks in the given Image
+ *
+ * @section Slots Slots
+ * - \b updateLandmaks() : Updates the rendering on the scene
+ * - \b updateLandmaksField() : Tests if the added field is a landmark image type and updates the rendering accordingly.
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <adaptor id="..." class="::visuVTKAdaptor::ImageLandmarks" objectId="imageKey">
+            <config renderer="default" picker="default" />
+        </adaptor>
+   @endcode
+ *
  */
 class VISUVTKADAPTOR_CLASS_API ImageLandmarks : public ::fwRenderVTK::IVtkAdaptorService
 {
@@ -55,7 +69,7 @@ protected:
 
     std::list< ::fwRenderVTK::IVtkAdaptorService::sptr > m_subServices;
 
-    vtkCommand * m_rightButtonCommand;
+    vtkCommand* m_rightButtonCommand;
 
     bool m_needSubservicesDeletion;
 
@@ -64,10 +78,10 @@ private:
     /// Slot: update landmarks sub-adaptors
     void updateLandmaks();
 
-};
-
-
+    /// Slot: tests if the added field is a landmark, if it is, updates the vrkPoints.
+    void updateLandmaksField(::fwData::Object::FieldsContainerType fieldsContainer);
 
+};
 
 } //namespace visuVTKAdaptor
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
index 6da8cce..bdc3d1b 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
@@ -34,7 +34,36 @@ namespace visuVTKAdaptor
 
 /**
  * @brief Adaptor to display only one slice of an image
+ *
+ *
+ * @section Slots Slots
+ * - \b checkCtrlImage() : Check if ctrl image changed and update scene
+ * - \b updateSliceIndex() : update image slice index
+ * - \b updateSliceType() : update image slice type
+ *
+ * @section XML XML Configuration
+ *
+ * @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
+ *
+ * @subsection Configuration Configuration
+ *
+ * - \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)
+ *
  */
+
 class VISUVTKADAPTOR_CLASS_API ImageSlice : public ::fwDataTools::helper::MedicalImageAdaptor,
                                             public ::fwRenderVTK::IVtkAdaptorService
 {
@@ -95,25 +124,6 @@ protected:
 
     VISUVTKADAPTOR_API void doUpdate() 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);
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
index 4815c3f..a975cfe 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,6 +15,8 @@
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
+#include <boost/logic/tribool.hpp>
+
 namespace visuVTKAdaptor
 {
 
@@ -26,7 +28,7 @@ class VISUVTKADAPTOR_CLASS_API NegatoMPR : public ::fwDataTools::helper::Medical
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (NegatoMPR)(::fwRenderVTK::IVtkAdaptorService) );
+    fwCoreServiceClassDefinitionsMacro( (NegatoMPR)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API NegatoMPR() throw();
 
@@ -39,14 +41,20 @@ 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;
@@ -91,7 +99,8 @@ protected:
                    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 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
@@ -111,7 +120,6 @@ protected:
 
     ::fwRenderVTK::IVtkAdaptorService::sptr addAdaptor(std::string adaptor, int axis = -1);
 
-
 private:
 
     /**
@@ -142,7 +150,6 @@ private:
     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;
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
index f235e53..1d65b1f 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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__
 
@@ -18,7 +17,6 @@
 #include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwData/Composite.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/PlaneList.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
@@ -34,17 +32,21 @@ class VISUVTKADAPTOR_CLASS_API PlaneSelectionNotifier : public ::fwRenderVTK::IV
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneSelectionNotifier)(::fwRenderVTK::IVtkAdaptorService) );
+    fwCoreServiceClassDefinitionsMacro( (PlaneSelectionNotifier)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneSelectionNotifier() throw();
 
     VISUVTKADAPTOR_API virtual ~PlaneSelectionNotifier() throw();
 
+    //------------------------------------------------------------------------------
+
     void setPlaneListId(const std::string& id)
     {
         m_planeListId = id;
     }
 
+    //------------------------------------------------------------------------------
+
     void setPlaneSelectionId(const std::string& id)
     {
         m_planeSelectionId = id;
@@ -121,7 +123,6 @@ private:
 
 };
 
-
 } //namespace visuVTKAdaptor
 
 #endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
index b7a173d..11f5802 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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__
 
@@ -12,12 +11,10 @@
 
 #include "visuVTKAdaptor/config.hpp"
 
-#include <fwData/Object.hpp>
 #include <fwData/PlaneList.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-
 namespace visuVTKAdaptor
 {
 
@@ -29,7 +26,7 @@ class VISUVTKADAPTOR_CLASS_API PlaneSelector : public ::fwRenderVTK::IVtkAdaptor
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneSelector)(::fwRenderVTK::IVtkAdaptorService) );
+    fwCoreServiceClassDefinitionsMacro( (PlaneSelector)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneSelector() throw();
 
@@ -50,9 +47,6 @@ protected:
     ::fwData::Object::wptr m_currentObject;
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
 #endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
index 69eb824..88b9485 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
@@ -28,7 +28,28 @@ namespace visuVTKAdaptor
 
 /**
  * @brief Cursor management
+ *
+ *
+ * @section Slots Slots
+ * - \b updateSliceIndex(int axial, int frontal, int sagittal) : update image slice index
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <adaptor id="probeCursor" class="::visuVTKAdaptor::ProbeCursor" objectId="self">
+       <config renderer="default" picker="negatodefault" transform="trf" />
+   </adaptor>
+   @endcode
+ *
+ * @subsection Configuration Configuration
+ *
+ * - \b renderer (mandatory): defines the renderer to show the ProbeCursor.
+ * - \b picker (mandatory): identifier of the picker
+ * - \b transform (optional): the vtkTransform to associate to the adaptor
+ *
  */
+
+
 class VISUVTKADAPTOR_CLASS_API ProbeCursor : public  ::fwDataTools::helper::MedicalImageAdaptor,
                                              public ::fwRenderVTK::IVtkAdaptorService
 {
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
index 081e844..38afc2a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
@@ -16,14 +16,42 @@
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 
-class VISUVTKADAPTOR_CLASS_API vtkPolyData;
-class VISUVTKADAPTOR_CLASS_API vtkPolyDataMapper;
-class VISUVTKADAPTOR_CLASS_API vtkActor;
+class vtkPolyData;
+class vtkPolyDataMapper;
+class vtkActor;
 
 
 namespace visuVTKAdaptor
 {
 
+/**
+ * @brief Cursor management
+ *
+ *
+ * @section Slots Slots
+ * - \b setCrossScale(double scale) : set the scale for the cross : 1. means full cross, 0.5 half cross, 0. no cross
+ * - \b updateSliceIndex(int axial, int frontal, int sagittal) : update image slice index
+ * - \b updateSliceType(int from, int to) : update image slice type
+ * - \b updateImage() : update image
+ * - \b showFullCross() : show full cross
+ * - \b showNormalCross() : show normal cross (use m_scale to "normal" size)
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <adaptor id="slicesCursor" class="::visuVTKAdaptor::SlicesCursor" objectId="self">
+       <config renderer="default" picker="negatodefault" transform="trf" scale="0.5"/>
+   </adaptor>
+   @endcode
+ *
+ * @subsection Configuration Configuration
+ *
+ * - \b renderer (mandatory): defines the renderer to show the ProbeCursor.
+ * - \b picker (mandatory): identifier of the picker
+ * - \b scale (mandatory): scale for the cross: 1. means full cross, 0.5 half cross, 0. no cross
+ * - \b transform (optional): the vtkTransform to associate to the adaptor
+ *
+ */
 
 class VISUVTKADAPTOR_CLASS_API SlicesCursor : public ::fwDataTools::helper::MedicalImageAdaptor,
                                               public ::fwRenderVTK::IVtkAdaptorService
@@ -51,6 +79,9 @@ public:
      * @name Slots
      * @{
      */
+    static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_UPDATE_IMAGE_SLOT;
     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;
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
index d4efb00..3d244a5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
@@ -8,8 +8,8 @@
 #define __VISUVTKADAPTOR_SNAPSHOT_HPP__
 
 
-#include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwCom/Slot.hpp>
 #include <fwCom/Slots.hpp>
@@ -18,7 +18,22 @@
 
 namespace visuVTKAdaptor
 {
-
+/**
+ * @brief This service will snapshot the current generic scene.
+ * It has two slots that can either snapshot into an ::fwData::Image or into a chosen image on the filesystem.
+ * @section XML XML configuration
+ * @code{.xml}
+    <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+        <config renderer="default" image="imageUID" />
+    </adaptor>
+   @endcode
+ * - \b image(optional)     : Defines the UID of the fwData::Image to write into.
+ *
+ * @section Slots Slots
+ * - \b snap(std::string filePath)    : This slot snaps onto the filesystem at a specified filepath.
+ * - \b snapToImage()                 : This slot snaps into the configured image.
+ *
+ */
 
 class VISUVTKADAPTOR_CLASS_API Snapshot : public ::fwRenderVTK::IVtkAdaptorService
 {
@@ -33,11 +48,19 @@ public:
 
 protected:
 
+    /// Does nothing.
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
+
+    /// Does nothing.
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+
+    /// Gets the image object if any and stores its uid.
     VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
+    /// Does nothing.
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
+
+    /// Does nothing.
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
 private:
@@ -47,13 +70,23 @@ private:
      * @{
      */
     /// Type of slot to snap shot
-    static const ::fwCom::Slots::SlotKeyType s_SNAP_SIG;
+    static const ::fwCom::Slots::SlotKeyType s_SNAP_SLOT;
+
+    /// Type of slot to snap shot to image
+    static const ::fwCom::Slots::SlotKeyType s_SNAPTOIMAGE_SLOT;
+
 
     /// Slot: snap shot the generic scene.
     void snap(std::string filePath);
+
+    /// Slot: snap shot the generic scene to fwData::Image
+    void snapToImage();
     /**
      * @}
      */
+
+    /// UID of the image
+    std::string m_imageUid;
 };
 
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
index 1444d26..4513801 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,20 +16,20 @@
 #include <vector>
 
 class vtkTransform;
+class vtkCommand;
 
 namespace visuVTKAdaptor
 {
 
 /**
  * @brief Adaptor to manage a TransformationMatrix3D from a vtkTransform and vice versa
- * @class Transform
  */
 class VISUVTKADAPTOR_CLASS_API Transform : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Transform)(::fwRenderVTK::IVtkAdaptorService) );
+    fwCoreServiceClassDefinitionsMacro( (Transform)(::fwRenderVTK::IVtkAdaptorService) );
 
     /// Constructor
     VISUVTKADAPTOR_API Transform() throw();
@@ -37,10 +37,10 @@ public:
     VISUVTKADAPTOR_API virtual ~Transform() throw();
 
     /// Set a new vtkTransform
-    VISUVTKADAPTOR_API void setTransform(vtkTransform *t);
+    VISUVTKADAPTOR_API void setTransform(vtkTransform* t);
 
     /// Returns the current vtkTransform
-    VISUVTKADAPTOR_API vtkTransform *getTransform();
+    VISUVTKADAPTOR_API vtkTransform* getTransform();
 
     /// Updates the TransformationMatrix3D from the vtkTransform
     VISUVTKADAPTOR_API void updateFromVtk();
@@ -90,9 +90,6 @@ protected:
     vtkSmartPointer<vtkTransform> m_parentTransform;
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
 #endif // __VISUVTKADAPTOR_TRANSFORM_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
index dd41662..99f0a75 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,15 +9,18 @@
 #include "visuVTKAdaptor/Axes.hpp"
 
 #include <fwCom/Slots.hxx>
+
 #include <fwServices/macros.hpp>
 
+#include <boost/lexical_cast.hpp>
+
+#include <vtkCommand.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkProp3D.h>
 #include <vtkProperty.h>
 #include <vtkRenderer.h>
+#include <vtkSphereSource.h>
 #include <vtkTransform.h>
-#include <vtkProp3D.h>
-#include <vtkCommand.h>
-
-#include <boost/lexical_cast.hpp>
 
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Axes, ::fwData::Object );
 
@@ -31,13 +34,14 @@ const ::fwCom::Slots::SlotKeyType Axes::s_UPDATE_VISIBILITY_SLOT = "updateVisibi
 
 Axes::Axes() throw() :
     m_axesActor(fwVtkAxesActor::New()),
+    m_sphereActor(nullptr),
     m_length(1.),
     m_labelOn(true),
+    m_sphereOn(false),
     m_transformAxes(vtkTransform::New()),
     m_xLabel("x"),
     m_yLabel("y"),
     m_zLabel("z")
-
 {
     newSlot(s_UPDATE_VISIBILITY_SLOT, &Axes::updateVisibility, this);
 }
@@ -48,6 +52,10 @@ Axes::~Axes() throw()
 {
     m_axesActor->Delete();
     m_axesActor = 0;
+    if(m_sphereOn)
+    {
+        m_sphereActor = 0;
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -56,6 +64,10 @@ void Axes::doStart() throw(fwTools::Failed)
 {
     this->buildPipeline();
     this->addToRenderer( m_axesActor );
+    if(m_sphereOn)
+    {
+        this->addToRenderer( m_sphereActor );
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -64,6 +76,10 @@ void Axes::doStop() throw(fwTools::Failed)
 {
     this->removeAllPropFromRenderer();
     this->getRenderer()->RemoveActor(m_axesActor);
+    if(m_sphereOn)
+    {
+        this->getRenderer()->RemoveActor(m_sphereActor);
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -82,8 +98,7 @@ void Axes::doUpdate() throw(fwTools::Failed)
 
 void Axes::doConfigure() throw(fwTools::Failed)
 {
-    assert( m_configuration->getName() == "config" );
-
+    SLM_ASSERT( "Wrong config name specified.", m_configuration->getName() == "config" );
     if ( m_configuration->hasAttribute( "length" ) )
     {
         m_length = boost::lexical_cast<double>( m_configuration->getAttributeValue( "length" ) );
@@ -106,6 +121,23 @@ void Axes::doConfigure() throw(fwTools::Failed)
     {
         m_zLabel = m_configuration->getAttributeValue( "zLabel" );
     }
+    if ( m_configuration->hasAttribute( "marker" ) )
+    {
+        std::string value = m_configuration->getAttributeValue( "marker" );
+        std::transform( value.begin(), value.end(), value.begin(), tolower );
+        m_sphereOn = ( value == "yes" );
+    }
+    if ( m_configuration->hasAttribute( "markerColor" ) )
+    {
+        const std::string strColor = m_configuration->getAttributeValue("markerColor");
+
+        m_color = ::fwData::Color::New();
+        m_color->setRGBA(strColor);
+    }
+    else
+    {
+        m_color = ::fwData::Color::New(1.0f, 1.0f, 1.0f, 1.0f);
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -125,6 +157,22 @@ void Axes::buildPipeline()
         m_axesActor->AxisLabelsOff();
     }
 
+    if(m_sphereOn)
+    {
+        // build a vtkSphereSource
+        const double sizeRatio = 4.0;
+        auto sphereSource      = vtkSmartPointer<vtkSphereSource>::New();
+        sphereSource->SetRadius(m_length/sizeRatio);
+        auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+        mapper->SetInputConnection(sphereSource->GetOutputPort());
+
+        m_sphereActor = vtkSmartPointer<vtkActor>::New();
+        m_sphereActor->SetMapper(mapper);
+        m_sphereActor->GetProperty()->SetColor(m_color->red(), m_color->green(), m_color->blue());
+        m_sphereActor->GetProperty()->SetOpacity(m_color->alpha());
+        m_sphereActor->SetUserTransform(transform);
+    }
+
     m_axesActor->SetUserTransform(transform);
 
     this->setVtkPipelineModified();
@@ -136,6 +184,10 @@ void Axes::buildPipeline()
 void Axes::updateVisibility(bool _isVisible)
 {
     m_axesActor->SetVisibility(_isVisible);
+    if(m_sphereOn)
+    {
+        m_sphereActor->SetVisibility(_isVisible);
+    }
 
     this->setVtkPipelineModified();
     this->requestRender();
@@ -143,6 +195,6 @@ void Axes::updateVisibility(bool _isVisible)
 
 //------------------------------------------------------------------------------
 
-} //namespace visuVTKAdaptor
+} // namespace visuVTKAdaptor
 
 #endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
index f08abeb..0f55830 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
@@ -1,29 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Transform.hpp"
 #include "visuVTKAdaptor/BoxWidget.hpp"
 
-#include <fwData/TransformationMatrix3D.hpp>
-#include <fwServices/macros.hpp>
+#include "visuVTKAdaptor/Transform.hpp"
 
+#include <fwData/TransformationMatrix3D.hpp>
 
 #include <fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp>
 
-#include <vtkRenderWindowInteractor.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderer.h>
+#include <fwServices/macros.hpp>
+
+#include <vtkBoxRepresentation.h>
+#include <vtkBoxWidget2.h>
 #include <vtkCamera.h>
 #include <vtkCommand.h>
 #include <vtkMatrix4x4.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
 #include <vtkTransform.h>
-#include <vtkBoxRepresentation.h>
-#include <vtkBoxWidget2.h>
 
 #include <boost/lexical_cast.hpp>
 
@@ -34,26 +35,31 @@ class BoxClallback : public ::vtkCommand
 {
 public:
 
+    //------------------------------------------------------------------------------
+
     static BoxClallback* New(::visuVTKAdaptor::BoxWidget* adaptor)
     {
-        BoxClallback *cb = new BoxClallback;
+        BoxClallback* cb = new BoxClallback;
         cb->m_adaptor = adaptor;
         return cb;
     }
 
-    BoxClallback() : m_adaptor(nullptr)
+    BoxClallback() :
+        m_adaptor(nullptr)
     {
     }
     ~BoxClallback()
     {
     }
 
+    //------------------------------------------------------------------------------
+
     virtual void Execute( ::vtkObject* pCaller, unsigned long eventId, void* )
     {
         m_adaptor->updateFromVtk();
     }
 
-    ::visuVTKAdaptor::BoxWidget *m_adaptor;
+    ::visuVTKAdaptor::BoxWidget* m_adaptor;
 };
 
 // BoxWidget
@@ -104,10 +110,10 @@ void BoxWidget::doStart() throw( ::fwTools::Failed )
 {
     m_transform = getTransform();
     SLM_ASSERT("BoxWidget need a vtkTransform", m_transform);
-    fwVtkBoxRepresentation *boxRep = fwVtkBoxRepresentation::New();
+    fwVtkBoxRepresentation* boxRep = fwVtkBoxRepresentation::New();
     boxRep->SetPlaceFactor(m_scaleFactor);
 
-    double bounds[] = {-1,1,-1,1,-1,1};
+    double bounds[] = {-1, 1, -1, 1, -1, 1};
     boxRep->PlaceWidget(bounds);
 
     m_vtkBoxWidget = ::vtkBoxWidget2::New();
@@ -153,7 +159,7 @@ void BoxWidget::updateFromVtk()
 {
     m_vtkBoxWidget->RemoveObserver( m_boxWidgetCommand );
 
-    vtkBoxRepresentation *repr = vtkBoxRepresentation::SafeDownCast( m_vtkBoxWidget->GetRepresentation() );
+    vtkBoxRepresentation* repr = vtkBoxRepresentation::SafeDownCast( m_vtkBoxWidget->GetRepresentation() );
     if( repr )
     {
         repr->GetTransform(m_transform);
@@ -163,11 +169,11 @@ 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));
+            trf->setCoefficient(lt, ct, mat->GetElement(lt, ct));
         }
     }
 
@@ -185,16 +191,16 @@ void BoxWidget::updateFromVtk()
 void BoxWidget::doUpdate() throw( ::fwTools::Failed )
 {
     m_vtkBoxWidget->RemoveObserver( m_boxWidgetCommand );
-    vtkBoxRepresentation *repr = vtkBoxRepresentation::SafeDownCast( m_vtkBoxWidget->GetRepresentation() );
+    vtkBoxRepresentation* repr = vtkBoxRepresentation::SafeDownCast( m_vtkBoxWidget->GetRepresentation() );
     if( repr )
     {
         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));
+                mat->SetElement(lt, ct, transMat->getCoefficient(lt, ct));
             }
         }
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
index 6392437..2bdb2d5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
@@ -45,8 +45,8 @@ fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Im
 namespace visuVTKAdaptor
 {
 
-static const ::fwCom::Slots::SlotKeyType s_UPDATE_LANDMARKS_SLOT = "updateLandmaks";
-
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_LANDMARKS_SLOT       = "updateLandmaks";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_LANDMARKS_FIELD_SLOT = "updateLandmarksField";
 
 //------------------------------------------------------------------------------
 
@@ -201,6 +201,7 @@ ImageLandmarks::ImageLandmarks() throw() :
     m_needSubservicesDeletion(false)
 {
     newSlot(s_UPDATE_LANDMARKS_SLOT, &ImageLandmarks::updateLandmaks, this);
+    newSlot(s_UPDATE_LANDMARKS_FIELD_SLOT, &ImageLandmarks::updateLandmaksField, this);
 }
 
 //------------------------------------------------------------------------------
@@ -298,6 +299,19 @@ void ImageLandmarks::updateLandmaks()
 
 //------------------------------------------------------------------------------
 
+void ImageLandmarks::updateLandmaksField(::fwData::Object::FieldsContainerType fieldsContainer)
+{
+    auto landmarkFound = fieldsContainer.find(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+
+    if( landmarkFound != fieldsContainer.end())
+    {
+        m_needSubservicesDeletion = true; // to manage point deletion
+        this->updating();
+    }
+}
+
+//------------------------------------------------------------------------------
+
 void ImageLandmarks::doStop() throw(fwTools::Failed)
 {
     if ( m_rightButtonCommand ) // can be not instanciated (use of ImageLandmarks::show() )
@@ -332,6 +346,7 @@ void ImageLandmarks::show(bool b)
     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 ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_ADDED_FIELDS_SIG, s_UPDATE_LANDMARKS_FIELD_SLOT ) );
 
     return connections;
 }
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
index e42ba93..bd115c9 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,6 +28,8 @@
 #include <vtkPolyDataMapper.h>
 #include <vtkRenderWindowInteractor.h>
 
+#include <boost/tokenizer.hpp>
+
 #define START_INTERACTION_EVENT vtkCommand::LeftButtonPressEvent
 #define STOP_INTERACTION_EVENT  vtkCommand::LeftButtonReleaseEvent
 
@@ -67,6 +69,8 @@ ImagePickerInteractor::MapEventIdType ImagePickerInteractor::m_eventIdConversion
 class ImagePickerInteractorCallback : public vtkCommand
 {
 public:
+    //------------------------------------------------------------------------------
+
     static ImagePickerInteractorCallback* New()
     {
         return new ImagePickerInteractorCallback();
@@ -74,7 +78,9 @@ public:
 
     //------------------------------------------------------------------------------
 
-    ImagePickerInteractorCallback() : m_picker(nullptr), m_eventId(nullptr)
+    ImagePickerInteractorCallback() :
+        m_picker(nullptr),
+        m_eventId(nullptr)
     {
         m_picker = NULL;
         this->PassiveObserverOn();
@@ -100,7 +106,7 @@ public:
 
     bool pickSomething()
     {
-        int x,y;
+        int x, y;
         double display[3];
 
         m_adaptor->getInteractor()->GetEventPosition(x, y);
@@ -133,7 +139,7 @@ public:
 
             if ( this->pickSomething() )
             {
-                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] );
 
@@ -197,7 +203,8 @@ const ::fwCom::Signals::SignalKeyType ImagePickerInteractor::s_PICKED_SIGNAL = "
 
 //------------------------------------------------------------------------------
 
-ImagePickerInteractor::ImagePickerInteractor() throw() : m_interactionCommand(nullptr)
+ImagePickerInteractor::ImagePickerInteractor() throw() :
+    m_interactionCommand(nullptr)
 {
     newSignal<PickedSignalType>(s_PICKED_SIGNAL);
     newSlot(s_UPDATE_SLICE_INDEX_SLOT, &ImagePickerInteractor::updateSliceIndex, this);
@@ -306,7 +313,6 @@ void ImagePickerInteractor::doStop() throw(fwTools::Failed)
     interactor->RemoveObservers(vtkCommand::MouseWheelBackwardEvent, m_interactionCommand);
     interactor->RemoveObservers(vtkCommand::KeyPressEvent, m_interactionCommand);
 
-
     m_interactionCommand->Delete();
     m_interactionCommand = NULL;
     this->unregisterServices();
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
index 82412ab..9349d71 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
@@ -353,6 +353,7 @@ void ImageSlice::buildOutline()
     m_planeOutlineMapper->SetResolveCoincidentTopologyToPolygonOffset();
     m_planeOutlineActor->SetMapper(m_planeOutlineMapper);
     m_planeOutlineActor->PickableOff();
+    m_planeOutlineActor->GetProperty()->SetOpacity(0.9);
     if(!this->getTransformId().empty())
     {
         m_planeOutlineActor->SetUserTransform(this->getTransform());
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
index a782d6b..af9bdea 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "visuVTKAdaptor/InteractorStyle.hpp"
 
-#include <fwData/Object.hpp>
-
 #include <fwRenderVTK/IInteractorStyle.hpp>
-#include <fwServices/macros.hpp>
 
+#include <fwServices/macros.hpp>
 
 #include <vtkInstantiator.h>
 #include <vtkInteractorStyleImage.h>
@@ -23,7 +21,8 @@ namespace visuVTKAdaptor
 
 //------------------------------------------------------------------------------
 
-InteractorStyle::InteractorStyle() throw() : m_interactorStyle(nullptr)
+InteractorStyle::InteractorStyle() throw() :
+    m_interactorStyle(nullptr)
 {
 }
 
@@ -50,7 +49,7 @@ void InteractorStyle::doConfigure() throw(fwTools::Failed)
 void InteractorStyle::doStart() throw(fwTools::Failed)
 {
     vtkObject* objectStyle         = vtkInstantiator::CreateInstance(m_configuredStyle.c_str());
-    vtkInteractorStyle *interactor = vtkInteractorStyle::SafeDownCast(objectStyle);
+    vtkInteractorStyle* interactor = vtkInteractorStyle::SafeDownCast(objectStyle);
     OSLM_ASSERT(
         "InsteractorStyle adaptor is waiting "
         "for a vtkInteractorStyle object, but '"
@@ -82,7 +81,7 @@ void InteractorStyle::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void InteractorStyle::setInteractorStyle(vtkInteractorStyle *interactor)
+void InteractorStyle::setInteractorStyle(vtkInteractorStyle* interactor)
 {
     if ( m_interactorStyle != nullptr )
     {
@@ -98,7 +97,6 @@ void InteractorStyle::setInteractorStyle(vtkInteractorStyle *interactor)
 
     m_interactorStyle = interactor;
 
-
     this->getInteractor()->SetInteractorStyle(nullptr);
     this->getInteractor()->SetInteractorStyle(m_interactorStyle);
     this->setVtkPipelineModified();
@@ -106,5 +104,4 @@ void InteractorStyle::setInteractorStyle(vtkInteractorStyle *interactor)
 
 //------------------------------------------------------------------------------
 
-
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
index 0778e96..2121005 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwCom/Slot.hxx>
 #include <fwCom/Slots.hxx>
 
-#include <fwData/Object.hpp>
 #include <fwData/String.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 
@@ -23,7 +22,6 @@
 
 #include <boost/assign/list_of.hpp>
 
-
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Medical3DCamera, ::fwData::Object );
 
 namespace visuVTKAdaptor
@@ -53,8 +51,6 @@ Medical3DCamera::Medical3DCamera() throw() :
         (SET_SAGITTAL_SLOT, m_slotSetSagittal)
         (SET_FRONTAL_SLOT, m_slotSetFrontal);
 
-
-
     this->setWorker(m_associatedWorker);
 }
 
@@ -167,9 +163,9 @@ void Medical3DCamera::updateView()
 
 void Medical3DCamera::resetSagittalView()
 {
-    m_camera->SetPosition(-1,0,0);
-    m_camera->SetFocalPoint(0,0,0);
-    m_camera->SetViewUp(0,0,1);
+    m_camera->SetPosition(-1, 0, 0);
+    m_camera->SetFocalPoint(0, 0, 0);
+    m_camera->SetViewUp(0, 0, 1);
     this->getRenderer()->ResetCamera();
     this->setVtkPipelineModified();
 }
@@ -178,9 +174,9 @@ void Medical3DCamera::resetSagittalView()
 
 void Medical3DCamera::resetFrontalView()
 {
-    m_camera->SetPosition(0,-1,0);
-    m_camera->SetFocalPoint(0,0,0);
-    m_camera->SetViewUp(0,0,1);
+    m_camera->SetPosition(0, -1, 0);
+    m_camera->SetFocalPoint(0, 0, 0);
+    m_camera->SetViewUp(0, 0, 1);
     this->getRenderer()->ResetCamera();
     this->setVtkPipelineModified();
 
@@ -190,9 +186,9 @@ void Medical3DCamera::resetFrontalView()
 
 void Medical3DCamera::resetAxialView()
 {
-    m_camera->SetPosition(0,0,-1);
-    m_camera->SetFocalPoint(0,0,0);
-    m_camera->SetViewUp(0,-1,0);
+    m_camera->SetPosition(0, 0, -1);
+    m_camera->SetFocalPoint(0, 0, 0);
+    m_camera->SetViewUp(0, -1, 0);
     this->getRenderer()->ResetCamera();
     this->setVtkPipelineModified();
 }
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
index aa87d76..2ffb7ce 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,6 +28,8 @@
 #include <vtkPolyDataMapper.h>
 #include <vtkRenderWindowInteractor.h>
 
+#include <boost/tokenizer.hpp>
+
 #define START_INTERACTION_EVENT vtkCommand::LeftButtonPressEvent
 #define STOP_INTERACTION_EVENT  vtkCommand::LeftButtonReleaseEvent
 
@@ -68,16 +70,19 @@ const ::fwCom::Signals::SignalKeyType PickerInteractor::s_PICKED_SIGNAL = "picke
 
 //------------------------------------------------------------------------------
 
-
 class PickerInteractorCallback : public vtkCommand
 {
 public:
+    //------------------------------------------------------------------------------
+
     static PickerInteractorCallback* New()
     {
         return new PickerInteractorCallback();
     }
 
-    PickerInteractorCallback() : m_picker(nullptr), m_eventId(nullptr)
+    PickerInteractorCallback() :
+        m_picker(nullptr),
+        m_eventId(nullptr)
     {
         this->PassiveObserverOn();
     }
@@ -86,6 +91,8 @@ public:
     {
     }
 
+    //------------------------------------------------------------------------------
+
     virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
@@ -94,9 +101,11 @@ public:
         this->process(vtkRenderWindowInteractor::SafeDownCast(caller), eventId);
     }
 
+    //------------------------------------------------------------------------------
+
     bool pickSomething()
     {
-        int x,y;
+        int x, y;
         double display[3];
 
         m_adaptor->getInteractor()->GetEventPosition(x, y);
@@ -107,6 +116,7 @@ public:
         return (m_picker->Pick( display, m_adaptor->getRenderer() ) != 0);
     }
 
+    //------------------------------------------------------------------------------
 
     void process(vtkRenderWindowInteractor* caller, unsigned long eventId) // from
     {
@@ -136,7 +146,7 @@ public:
                 info.m_modifierMask |=
                     caller->GetShiftKey() ? ::fwDataTools::PickingInfo::SHIFT : ::fwDataTools::PickingInfo::NONE;
 
-                vtkCellPicker* picker = vtkCellPicker::SafeDownCast ( m_picker );
+                vtkCellPicker* picker = vtkCellPicker::SafeDownCast( m_picker );
                 if (picker)
                 {
                     info.m_cellId         = picker->GetCellId();
@@ -160,16 +170,22 @@ public:
         }
     }
 
+    //------------------------------------------------------------------------------
+
     void setAdaptor( PickerInteractor::sptr adaptor)
     {
         m_adaptor = adaptor;
     }
 
+    //------------------------------------------------------------------------------
+
     void setPicker( vtkAbstractPropPicker* picker)
     {
         m_picker = picker;
     }
 
+    //------------------------------------------------------------------------------
+
     void setEventId(PickerInteractor::SetEventIdType* eventId)
     {
         m_eventId = eventId;
@@ -187,7 +203,8 @@ protected:
 
 //------------------------------------------------------------------------------
 
-PickerInteractor::PickerInteractor() throw() : m_interactionCommand(nullptr)
+PickerInteractor::PickerInteractor() throw() :
+    m_interactionCommand(nullptr)
 {
     newSignal<PickedSignalType>(s_PICKED_SIGNAL);
 }
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
index 76f99a5..02bfd9d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
 
-#include <fwData/Object.hpp>
-
 #include <fwServices/macros.hpp>
 
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneSelector, ::fwData::Object );
@@ -108,4 +106,3 @@ void PlaneSelector::selectObject( ::fwData::Object::sptr object )
 
 #endif //ANDROID
 
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
index b67e7d0..dbaaae7 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
@@ -53,8 +53,6 @@ fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Pr
 namespace visuVTKAdaptor
 {
 
-
-
 class ProbingCallback : public vtkCommand
 {
 public:
@@ -238,6 +236,7 @@ void ProbeCursor::doStart() throw(fwTools::Failed)
     m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
     m_cursorActor->GetProperty()->SetColor(1,0,0);
+    m_cursorActor->GetProperty()->SetOpacity(0.9);
     if(!this->getTransformId().empty())
     {
         m_cursorActor->SetUserTransform(this->getTransform());
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
index fc8a51c..3beb528 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
@@ -28,6 +28,7 @@
 #include <vtkLine.h> // CELL
 #include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
+#include <vtkProperty.h>
 #include <vtkRenderer.h>
 #include <vtkTransform.h>
 
@@ -39,9 +40,9 @@ fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Sl
 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";
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_UPDATE_IMAGE_SLOT       = "updateImage";
 
 const ::fwCom::Slots::SlotKeyType SlicesCursor::s_SHOW_FULL_CROSS_SLOT   = "showFullCross";
 const ::fwCom::Slots::SlotKeyType SlicesCursor::s_SHOW_NORMAL_CROSS_SLOT = "showNormalCross";
@@ -108,6 +109,8 @@ void SlicesCursor::doStart() throw(fwTools::Failed)
     this->updateColors();
     m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
+    m_cursorActor->GetProperty()->SetOpacity(0.9);
+
     if(!this->getTransformId().empty())
     {
         m_cursorActor->SetUserTransform(this->getTransform());
@@ -152,18 +155,14 @@ void SlicesCursor::buildPolyData()
     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);
     }
 
     vtkCellArray* cells = vtkCellArray::New();
     cells->Allocate(cells->EstimateSize(nbPoints,2));
 
-    vtkIdType pts[2];
     for ( int line = 0; line<4; ++line)
     {
-        pts[0] = line; pts[1] = line+4;
-        //cells->InsertNextCell(2,pts);
         vtkLine* lineCell = vtkLine::New();
         lineCell->GetPointIds()->SetId(0, line );
         lineCell->GetPointIds()->SetId(1, line+ 4 );
@@ -322,27 +321,29 @@ void SlicesCursor::updateImageSliceIndex( ::fwData::Image::sptr image )
         pos[1] = m_frontalIndex->value();
         pos[0] = m_sagittalIndex->value();
 
+        const ::fwData::Image::SpacingType spacing = image->getSpacing();
+        const ::fwData::Image::OriginType origin   = image->getOrigin();
+        const ::fwData::Image::SizeType size       = image->getSize();
         double sliceWorld[3];
         for (int dim = 0; dim<3; ++dim )
         {
-            sliceWorld[dim] = pos[dim]*image->getSpacing()[dim] + image->getOrigin().at(dim);
+            sliceWorld[dim] = pos[dim] * spacing[dim] + origin.at(dim);
         }
 
         double cursorPoints[8][3]; // point AB,BC,CD,AD,ABM,BCM,CDM,ADM
-
         for ( int p = 0; p<2; ++p )
         {
             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+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]   = origin.at(dim);
+                    cursorPoints[p+2][dim] = (size[dim]-1) * spacing[dim] + origin.at(dim);
+                }
+                else
+                {
+                    cursorPoints[p][dim]   = sliceWorld[dim];
+                    cursorPoints[p+2][dim] = sliceWorld[dim];
                 }
             }
         }
@@ -356,9 +357,8 @@ void SlicesCursor::updateImageSliceIndex( ::fwData::Image::sptr image )
 
         for ( int i = 0; i < 8; ++i)
         {
-            points->SetPoint(i,cursorPoints[i]);
+            points->SetPoint(i, cursorPoints[i]);
         }
-
     }
     m_cursorPolyData->Modified();
     this->setVtkPipelineModified();
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
index dd4984a..14644c8 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
@@ -19,6 +19,8 @@
 
 #include <fwServices/macros.hpp>
 
+#include <fwVtkIO/vtk.hpp>
+
 #include <vtkActor.h>
 #include <vtkBMPWriter.h>
 #include <vtkImageData.h>
@@ -32,17 +34,18 @@
 
 #include <boost/filesystem.hpp>
 
-
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Snapshot, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
-const ::fwCom::Slots::SlotKeyType Snapshot::s_SNAP_SIG = "snap";
+const ::fwCom::Slots::SlotKeyType Snapshot::s_SNAP_SLOT        = "snap";
+const ::fwCom::Slots::SlotKeyType Snapshot::s_SNAPTOIMAGE_SLOT = "snapToImage";
 
 Snapshot::Snapshot() throw()
 {
-    newSlot(s_SNAP_SIG, &Snapshot::snap, this);
+    newSlot(s_SNAP_SLOT, &Snapshot::snap, this);
+    newSlot(s_SNAPTOIMAGE_SLOT, &Snapshot::snapToImage, this);
 }
 
 //------------------------------------------------------------------------------
@@ -55,6 +58,10 @@ Snapshot::~Snapshot() throw()
 
 void Snapshot::doConfigure() throw(fwTools::Failed)
 {
+    if(m_configuration->hasAttribute("image"))
+    {
+        m_imageUid = m_configuration->getAttributeValue("image");
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -85,6 +92,40 @@ void Snapshot::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+void Snapshot::snapToImage()
+{
+    if ( !m_imageUid.empty() )
+    {
+        ::fwData::Image::sptr imageToSnap;
+
+        if (!this->isVersion2())
+        {
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_imageUid);
+            SLM_ASSERT("Object '" + m_imageUid + "' is not found", obj);
+            imageToSnap = ::fwData::Image::dynamicCast(obj);
+            SLM_ASSERT("Object '" + m_imageUid + "' is not an ::fwData::Image (" + obj->getClassname() + ")",
+                       imageToSnap);
+        }
+        else
+        {
+            imageToSnap = this->getSafeInOut< ::fwData::Image>(m_imageUid);
+            SLM_ASSERT("The image \"" << m_imageUid << "\" is not valid.", imageToSnap);
+        }
+
+        vtkWindowToImageFilter* snapper = vtkWindowToImageFilter::New();
+        snapper->SetMagnification( 1 );
+        snapper->SetInput( this->getRenderer()->GetRenderWindow() );
+        snapper->Update();
+
+        vtkImageData* vtkImage = snapper->GetOutput();
+        ::fwVtkIO::fromVTKImage(vtkImage, imageToSnap);
+
+        snapper->Delete();
+    }
+}
+
+//------------------------------------------------------------------------------
+
 void Snapshot::snap(std::string filePath)
 {
     SLM_ASSERT("filePath is empty", !filePath.empty());
diff --git a/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt b/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
index ddd0393..0a7d9a7 100644
--- a/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
@@ -1,23 +1,21 @@
 fwLoadProperties()
 
-add_definitions("-DQT_NO_KEYWORDS")
-
 find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 find_package(VTK COMPONENTS vtkViewsQt REQUIRED NO_MODULE)
 
 fwForwardInclude(
-    ${VTK_INCLUDE_DIRS} 
+    ${VTK_INCLUDE_DIRS}
     ${Qt5Core_INCLUDE_DIRS}
     ${Qt5Gui_INCLUDE_DIRS}
     ${Qt5Widgets_INCLUDE_DIRS}
 )
 
 fwLink(
-    ${Qt5Core_LIBRARIES} 
-    ${Qt5Gui_LIBRARIES} 
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
     ${Qt5Widgets_LIBRARIES}
     ${VTK_LIBRARIES}
-    
+
 )
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafVisu/visuVTKQt/Properties.cmake b/Bundles/LeafVisu/visuVTKQt/Properties.cmake
index 1499dda..e40c61a 100644
--- a/Bundles/LeafVisu/visuVTKQt/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKQt/Properties.cmake
@@ -16,3 +16,4 @@ set( DEPENDENCIES
 set( REQUIREMENTS
     visuVTK
 )
+set( USE_PCH_FROM_TARGET fwRenderVTK )
diff --git a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
index a7f526a..6b455aa 100644
--- a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
+++ b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,13 +8,13 @@
 #define __VISUVTKQT_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace visuVTKQt contains a vtk Renderer window interactor manager using Qt.
- * @namespace   visuVTKQt
- *
- * @date        2009-2010.
- *
+ * @ingroup apprequirement
+ * @brief   The bundle visuVTKQt contains a vtk Renderer window interactor manager using Qt. It must be set in the
+ *          application (or activity) \p \<requirement\> in order to use a VTK scene in an application using Qt.
  */
 namespace visuVTKQt
 {
+
 }
+
 #endif /* __VISUVTKQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake b/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
index 6cb615a..1f6a8f9 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
@@ -4,4 +4,3 @@ set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES fwCom fwData fwRenderVTK fwRuntime fwServices fwVtkIO fwTools fwCore)
 set( REQUIREMENTS  )
-
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
index 3618713..ec15687 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,6 +30,7 @@
 #include <vtkPiecewiseFunction.h>
 #include <vtkPlaneCollection.h>
 #include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
 #include <vtkRenderer.h>
 #include <vtkSmartVolumeMapper.h>
 #include <vtkTransform.h>
@@ -45,6 +46,8 @@ class TransformCallback : public ::vtkCommand
 {
 public:
 
+    //------------------------------------------------------------------------------
+
     static TransformCallback* New(Volume* adaptor)
     {
         TransformCallback* cb = new TransformCallback;
@@ -52,6 +55,8 @@ public:
         return cb;
     }
 
+    //------------------------------------------------------------------------------
+
     virtual void Execute( ::vtkObject* caller, unsigned long, void* )
     {
         m_adaptor->updateCropBoxTransform();
@@ -68,11 +73,15 @@ class AbortCallback : public vtkCommand
 {
 public:
 
+    //------------------------------------------------------------------------------
+
     static AbortCallback* New()
     {
         return new AbortCallback();
     }
 
+    //------------------------------------------------------------------------------
+
     virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         vtkRenderWindow* win = vtkRenderWindow::SafeDownCast(caller);
@@ -92,6 +101,8 @@ class CroppingCallback : public vtkCommand
 {
 public:
 
+    //------------------------------------------------------------------------------
+
     static CroppingCallback* New(Volume* adaptor)
     {
         CroppingCallback* callback = new CroppingCallback();
@@ -99,6 +110,8 @@ public:
         return callback;
     }
 
+    //------------------------------------------------------------------------------
+
     virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         m_adaptor->crop();
@@ -212,7 +225,6 @@ void Volume::doStart() throw(fwTools::Failed)
     m_croppingCommand = CroppingCallback::New(this);
     m_boxWidget->AddObserver(vtkCommand::InteractionEvent, m_croppingCommand);
 
-
     m_volume->SetUserTransform(this->getTransform());
 }
 
@@ -326,7 +338,6 @@ void Volume::updateImage( ::fwData::Image::sptr image  )
     vtkImageImport* imageImport = vtkImageImport::New();
     ::fwVtkIO::configureVTKImageImport( imageImport, image );
 
-
     m_volumeMapper->RemoveAllClippingPlanes();
     if (m_clippingPlanes)
     {
@@ -513,7 +524,7 @@ void Volume::crop()
     }
     else
     {
-        mapper->SetCroppingRegionPlanes(0.,0.,0.,0.,0.,0.);
+        mapper->SetCroppingRegionPlanes(0., 0., 0., 0., 0., 0.);
     }
 }
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp
index d5aa7f1..89a9117 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp
@@ -13,11 +13,11 @@
 
 #include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
 
-#include <boost/shared_array.hpp>
-
 #include <vtkCommand.h>
 #include <vtkSmartPointer.h>
 
+#include <boost/shared_array.hpp>
+
 // VTK
 class vtkRenderer;
 class vtkPolyData;
@@ -28,7 +28,6 @@ namespace vtkSimpleMesh
 
 /**
  * @brief   Service rendering a ::fwData::Mesh using VTK.
- * @class   SRenderer
  *
  * This service displays a mesh in a scene.
  *
@@ -36,6 +35,24 @@ namespace vtkSimpleMesh
  *   - 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'.
+ *
+ * @section Signals Signals
+ * - \b camUpdated(SharedArray, SharedArray, SharedArray): Emitted when the camera has moved.
+ *
+ * @section Slots Slots
+ * - \b updateCamPosition(SharedArray, SharedArray, SharedArray): update the camera position and orientation.
+ * - \b initPipeline(): initialize or reinitialize the vtk pipeline.
+ * - \b updatePipeline(): update the vtk pipeline.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::vtkSimpleMesh::SRenderer">
+            <in key="mesh" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b mesh [::fwData::Mesh]: mesh to be displayed.
  */
 class VTKSIMPLEMESH_CLASS_API SRenderer : public fwRender::IRender
 {
@@ -46,15 +63,8 @@ public:
     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;
@@ -80,7 +90,7 @@ public:
      * 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;
+    VTKSIMPLEMESH_API virtual KeyConnectionsMap getAutoConnections() const;
 
 
 protected:
@@ -96,11 +106,6 @@ protected:
 
     /**
      * @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);
 
@@ -121,7 +126,7 @@ protected:
     VTKSIMPLEMESH_API virtual void updating() throw(fwTools::Failed);
 
     /// @brief vtk renderer
-    vtkRenderer * m_render;
+    vtkRenderer* m_render;
 
 private:
 
@@ -157,15 +162,6 @@ private:
 
     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;
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp
index 3ac83bd..cf66ec3 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,19 +11,29 @@
 
 #include <fwData/Mesh.hpp>
 
-#include <fwThread/Timer.hpp>
-
-
 #include <fwServices/IController.hpp>
 
-
+#include <fwThread/Timer.hpp>
 
 namespace vtkSimpleMesh
 {
 
 /**
- * @brief   Service used to deform a mesh
- * @class   SSimpleMeshDeformation
+ * @brief   Service used to demonstrate how to deform a mesh.
+ *
+ * @section Slots Slots
+ * - \b startDeformation(): start the deformation of the mesh.
+ * - \b stopDeformation(): stop the deformation of the mesh..
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::vtkSimpleMesh::SSimpleMeshDeformation">
+            <inout key="mesh" uid="..." />
+       </service>
+   @endcode
+ * @subsection In-Out In-Out:
+ * - \b mesh [::fwData::Mesh]: mesh to deform.
  */
 class VTKSIMPLEMESH_CLASS_API SSimpleMeshDeformation : public ::fwServices::IController
 {
@@ -48,11 +58,9 @@ protected:
     /// Starting method. Initialize timer.
     VTKSIMPLEMESH_API virtual void starting() throw(fwTools::Failed);
 
-
     /// Configuring method.
     VTKSIMPLEMESH_API virtual void configuring() throw(::fwTools::Failed);
 
-
     /// Stopping method.
     VTKSIMPLEMESH_API virtual void stopping() throw(fwTools::Failed);
 
@@ -68,18 +76,18 @@ protected:
 private:
 
     /// Helper to copy quicly meshes ( only points, normals and point colors )
-    void copyMesh( const ::fwData::Mesh::sptr & src, const ::fwData::Mesh::sptr & dest ) const;
+    void copyMesh( const ::fwData::Mesh::sptr& src, const ::fwData::Mesh::sptr& dest ) const;
 
     /// Copy associated mesh to m_mesh and initialize m_transformMesh
     void initMeshBackup();
 
     /// Helper to compute mesh deformation
-    void computeDeformation( const ::fwData::Mesh::sptr & refMesh, const ::fwData::Mesh::sptr & transformMesh );
+    void computeDeformation( const ::fwData::Mesh::sptr& refMesh, const ::fwData::Mesh::sptr& transformMesh );
 
     /// Helper to compute mesh deformation
     void computeDeformation(
-        const ::fwData::Mesh::sptr & refMesh,
-        const ::fwData::Mesh::sptr & transformMesh,
+        const ::fwData::Mesh::sptr& refMesh,
+        const ::fwData::Mesh::sptr& transformMesh,
         float deformationPercent );
 
     ::fwThread::Timer::sptr m_timer;
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp
index cf9fdda..465ef4f 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp
@@ -23,32 +23,37 @@
 #include <fwVtkIO/vtk.hpp>
 
 #include <vtkCamera.h>
-#include <vtkCamera.h>
 #include <vtkCommand.h>
+#ifndef ANDROID
+#include <vtkInteractorStyleTrackballCamera.h>
+#else
+#include <vtkInteractorStyleMultiTouchCamera.h>
+#endif
 #include <vtkMatrix4x4.h>
 #include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkPolyDataNormals.h>
 #include <vtkProperty.h>
-#include <vtkRenderer.h>
 #include <vtkRenderWindow.h>
+#include <vtkRenderer.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";
 
+static const std::string s_MESH_KEY = "mesh";
+
+//-----------------------------------------------------------------------------
+
 // vtkCommand used to catch the user interactions and notify the new camera position
 class vtkLocalCommand : public vtkCommand
 {
@@ -82,11 +87,15 @@ private:
     bool m_isMousePressed;
 };
 
-SRenderer::SRenderer() throw() : m_render( 0 ), m_bPipelineIsInit(false)
+//-----------------------------------------------------------------------------
+
+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);
+    newSlot(s_UPDATE_CAM_POSITION_SLOT, &SRenderer::updateCamPosition, this);
+    newSlot(s_UPDATE_PIPELINE_SLOT, &SRenderer::updatePipeline, this);
+    newSlot(s_INIT_PIPELINE_SLOT, &SRenderer::initPipeline, this);
 
     m_sigCamUpdated = newSignal<CamUpdatedSignalType>(s_CAM_UPDATED_SIG);
 }
@@ -115,7 +124,8 @@ void SRenderer::starting() throw(fwTools::Failed)
 
     bool meshIsLoaded;
     {
-        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        ::fwData::Mesh::csptr mesh = this->getInput< ::fwData::Mesh >(s_MESH_KEY);
+        SLM_ASSERT("'" + s_MESH_KEY + "' key not found", mesh);
         ::fwData::mt::ObjectReadLock lock(mesh);
         meshIsLoaded = mesh->getNumberOfPoints() > 0;
     }
@@ -166,8 +176,9 @@ void SRenderer::updating() throw(fwTools::Failed)
 
 void SRenderer::initVTKPipeline()
 {
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-    m_vtkPolyData             = vtkSmartPointer<vtkPolyData>::New();
+    ::fwData::Mesh::csptr mesh = this->getInput< ::fwData::Mesh >(s_MESH_KEY);
+    SLM_ASSERT("'" + s_MESH_KEY + "' key not found", mesh);
+    m_vtkPolyData = vtkSmartPointer<vtkPolyData>::New();
 
     {
         ::fwData::mt::ObjectReadLock lock(mesh);
@@ -200,7 +211,8 @@ void SRenderer::initVTKPipeline()
 
 void SRenderer::updateVTKPipeline(bool resetCamera)
 {
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+    ::fwData::Mesh::csptr mesh = this->getInput< ::fwData::Mesh >(s_MESH_KEY);
+    SLM_ASSERT("'" + s_MESH_KEY + "' key not found", mesh);
 
     {
         ::fwData::mt::ObjectReadLock lock(mesh);
@@ -232,16 +244,14 @@ void SRenderer::notifyCamPositionUpdated()
     std::copy(camera->GetViewUp(), camera->GetViewUp()+3, viewUp.get());
 
     {
-        ::fwCom::Connection::Blocker block(m_sigCamUpdated->getConnection(m_slotUpdateCamPosition));
+        ::fwCom::Connection::Blocker block(m_sigCamUpdated->getConnection(this->slot(s_UPDATE_CAM_POSITION_SLOT)));
         m_sigCamUpdated->asyncEmit (position, focal, viewUp);
     }
 }
 
 //-----------------------------------------------------------------------------
 
-void SRenderer::updateCamPosition(SharedArray positionValue,
-                                  SharedArray focalValue,
-                                  SharedArray viewUpValue)
+void SRenderer::updateCamPosition(SharedArray positionValue, SharedArray focalValue, SharedArray viewUpValue)
 {
     vtkCamera* camera = m_render->GetActiveCamera();
 
@@ -264,8 +274,9 @@ void SRenderer::initPipeline()
     }
     else
     {
-        m_vtkPolyData             = vtkSmartPointer<vtkPolyData>::New();
-        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        m_vtkPolyData              = vtkSmartPointer<vtkPolyData>::New();
+        ::fwData::Mesh::csptr mesh = this->getInput< ::fwData::Mesh >(s_MESH_KEY);
+        SLM_ASSERT("'" + s_MESH_KEY + "' key not found", mesh);
         {
             ::fwData::mt::ObjectReadLock lock(mesh);
             ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, m_vtkPolyData );
@@ -294,11 +305,11 @@ void SRenderer::updatePipeline()
 
 //-----------------------------------------------------------------------------
 
-::fwServices::IService::KeyConnectionsType SRenderer::getObjSrvConnections() const
+::fwServices::IService::KeyConnectionsMap SRenderer::getAutoConnections() 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 ) );
+    KeyConnectionsMap connections;
+    connections.push( s_MESH_KEY, ::fwData::Object::s_MODIFIED_SIG, s_INIT_PIPELINE_SLOT );
+    connections.push( s_MESH_KEY, ::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 0405579..6d383e9 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include <fwCom/Slots.hxx>
 
 #include <fwData/Mesh.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
 #include <fwData/mt/ObjectReadToWriteLock.hpp>
 
@@ -26,9 +25,15 @@ fwServicesRegisterMacro( ::fwServices::IController, ::vtkSimpleMesh::SSimpleMesh
 namespace vtkSimpleMesh
 {
 
+//-----------------------------------------------------------------------------
+
 const ::fwCom::Slots::SlotKeyType SSimpleMeshDeformation::s_START_DEFORMATION_SLOT = "startDeformation";
 const ::fwCom::Slots::SlotKeyType SSimpleMeshDeformation::s_STOP_DEFORMATION_SLOT  = "stopDeformation";
 
+static const std::string s_MESH_KEY = "mesh";
+
+//-----------------------------------------------------------------------------
+
 SSimpleMeshDeformation::SSimpleMeshDeformation() throw()
 {
     newSlot(s_START_DEFORMATION_SLOT, &SSimpleMeshDeformation::startDeformation, this);
@@ -72,21 +77,22 @@ void SSimpleMeshDeformation::stopping() throw(fwTools::Failed)
 void SSimpleMeshDeformation::updating() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+
+    auto mesh = this->getInOut< ::fwData::Mesh >(s_MESH_KEY);
 
     ::fwData::mt::ObjectReadToWriteLock lock(mesh);
     if ( mesh->getNumberOfPoints() > 0 )
     {
         m_hiRestimer.reset();
         m_hiRestimer.start();
-        this->computeDeformation(m_mesh,m_transformMesh);
+        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);
+        copyMesh(m_transformMesh, mesh);
         m_hiRestimer.stop();
         OSLM_INFO("Copy time (milli sec) = " << m_hiRestimer.getElapsedTimeInMilliSec());
         lock.downgrade();
@@ -103,7 +109,7 @@ void SSimpleMeshDeformation::startDeformation()
 {
     bool meshIsLoaded;
     {
-        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        auto mesh = this->getInOut< ::fwData::Mesh >(s_MESH_KEY);
         ::fwData::mt::ObjectReadLock lock(mesh);
         meshIsLoaded = mesh->getNumberOfPoints() > 0;
     }
@@ -164,10 +170,9 @@ void SSimpleMeshDeformation::computeDeformation (
     // Compute limits
     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];
+        const float val = points[i][1];
         if ( val < ymin )
         {
             ymin = val;
@@ -184,7 +189,7 @@ void SSimpleMeshDeformation::computeDeformation (
     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 )
@@ -236,10 +241,9 @@ void SSimpleMeshDeformation::initMeshBackup()
         m_currentIncrement   = 0;
         m_currentDeformation = 0;
 
-        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        auto mesh = this->getInOut< ::fwData::Mesh >(s_MESH_KEY);
         ::fwData::mt::ObjectReadToWriteLock lock(mesh);
 
-
         lock.upgrade();
         ::fwDataTools::Mesh::generatePointNormals(mesh);
         mesh->allocatePointColors( ::fwData::Mesh::RGB );
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp
index 65f9d4e..45fb25d 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp
+++ b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,7 +7,6 @@
 #ifndef __VTKSIMPLENEGATO_SRENDERER_HPP__
 #define __VTKSIMPLENEGATO_SRENDERER_HPP__
 
-
 #include "vtkSimpleNegato/config.hpp"
 
 #include <fwRender/IRender.hpp>
@@ -22,24 +21,29 @@ namespace vtkSimpleNegato
 {
 
 /**
- * @brief    Service rendering a ::fwData::Image using VTK.
- * @class    SRenderer
+ * @brief   Service rendering a ::fwData::Image using VTK.
+ *
+ * This service displays a 3D MPR in a scene. It is rather basic and can not be extended.
+ *
+ * @section XML XML Configuration
  *
- * This service displays a 3D image in a scene.
+ * @code{.xml}
+        <service type="::vtkSimpleNegato::SRenderer">
+            <in key="image" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b image [::fwData::Image]: 3D image to be displayed.
  */
 class VTKSIMPLENEGATO_CLASS_API SRenderer : public fwRender::IRender
 {
 public:
     fwCoreServiceClassDefinitionsMacro ( (SRenderer)(::fwRender::IRender) );
 
-    /**
-     * @brief    Constructor
-     */
+    /// Constructor
     VTKSIMPLENEGATO_API SRenderer() throw();
 
-    /**
-     * @brief    Destructor
-     */
+    /// Destructor
     VTKSIMPLENEGATO_API virtual ~SRenderer() throw();
 
     /**
@@ -49,7 +53,7 @@ public:
      * 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;
+    VTKSIMPLENEGATO_API virtual KeyConnectionsMap getAutoConnections() const;
 
 protected:
 
@@ -83,14 +87,7 @@ protected:
      */
     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.
      *
@@ -107,6 +104,12 @@ private:
      */
     void updateVTKPipeline();
 
+    /// @brief vtk renderer
+    vtkRenderer* m_render;
+
+    /// @brief VTK Interactor window manager
+    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
+
     /// @brief image wireframe outline.
     vtkOutlineFilter* m_outline;
 
@@ -119,10 +122,7 @@ private:
     /// @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.
-     */
+    /// the m_bPipelineIsInit value is \b true if the pipeline is initialized.
     bool m_bPipelineIsInit;
 };
 
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp
index 95119f4..2cbac52 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp
+++ b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp
@@ -39,10 +39,13 @@ namespace vtkSimpleNegato
 
 static const ::fwCom::Slots::SlotKeyType s_REFRESH_SLOT = "refresh";
 
+static const std::string s_IMAGE_KEY = "image";
+
 //-----------------------------------------------------------------------------
 
-SRenderer::SRenderer() throw()
-    : m_render( 0 ), m_bPipelineIsInit(false)
+SRenderer::SRenderer() throw() :
+    m_render( 0 ),
+    m_bPipelineIsInit(false)
 {
     SLM_TRACE_FUNC();
     newSlot(s_REFRESH_SLOT, &SRenderer::refresh, this);
@@ -121,7 +124,8 @@ void SRenderer::updating() throw(fwTools::Failed)
 
 void SRenderer::refresh()
 {
-    ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
+    auto img = this->getInput< ::fwData::Image >(s_IMAGE_KEY);
+    SLM_ASSERT("'" + s_IMAGE_KEY + "' key not found", img);
     bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
     if(imageIsValid )
     {
@@ -152,11 +156,14 @@ void SRenderer::refresh()
 
 void SRenderer::initVTKPipeline()
 {
-    vtkSmartPointer< vtkImageData > vtk_img = vtkSmartPointer< vtkImageData >::New();
-    ::fwVtkIO::toVTKImage( this->getObject< ::fwData::Image >(), vtk_img);
+    vtkSmartPointer< vtkImageData > vtkImg = vtkSmartPointer< vtkImageData >::New();
+
+    auto image = this->getInput< ::fwData::Image >(s_IMAGE_KEY);
+    SLM_ASSERT("'" + s_IMAGE_KEY + "' key not found", image);
+    ::fwVtkIO::toVTKImage( image, vtkImg);
 
     m_outline = vtkOutlineFilter::New();
-    m_outline->SetInputData(vtk_img);
+    m_outline->SetInputData(vtkImg);
 
     vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper::New();
     outlineMapper->SetInputConnection(m_outline->GetOutputPort());
@@ -175,7 +182,7 @@ void SRenderer::initVTKPipeline()
     m_negatoSagittal->SetPicker(picker);
     m_negatoSagittal->GetPlaneProperty()->SetColor(1,0,0);
     m_negatoSagittal->TextureInterpolateOn();
-    m_negatoSagittal->SetInputData(vtk_img);
+    m_negatoSagittal->SetInputData(vtkImg);
     m_negatoSagittal->SetPlaneOrientationToXAxes();
     m_negatoSagittal->DisplayTextOn();
     m_negatoSagittal->On();
@@ -187,7 +194,7 @@ void SRenderer::initVTKPipeline()
     m_negatoFrontal->SetPicker(picker);
     m_negatoFrontal->GetPlaneProperty()->SetColor(0,1,0);
     m_negatoFrontal->TextureInterpolateOn();
-    m_negatoFrontal->SetInputData(vtk_img);
+    m_negatoFrontal->SetInputData(vtkImg);
     m_negatoFrontal->SetPlaneOrientationToYAxes();
     m_negatoFrontal->SetLookupTable( m_negatoSagittal->GetLookupTable());
     m_negatoFrontal->DisplayTextOn();
@@ -200,7 +207,7 @@ void SRenderer::initVTKPipeline()
     m_negatoAxial->SetPicker(picker);
     m_negatoAxial->GetPlaneProperty()->SetColor(0,0,1);
     m_negatoAxial->TextureInterpolateOn();
-    m_negatoAxial->SetInputData(vtk_img);
+    m_negatoAxial->SetInputData(vtkImg);
     m_negatoAxial->SetPlaneOrientationToZAxes();
     m_negatoAxial->SetLookupTable( m_negatoSagittal->GetLookupTable());
     m_negatoAxial->DisplayTextOn();
@@ -221,23 +228,25 @@ void SRenderer::initVTKPipeline()
 
 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);
+    auto image = this->getInput< ::fwData::Image >(s_IMAGE_KEY);
+    SLM_ASSERT("'" + s_IMAGE_KEY + "' key not found", image);
+
+    vtkSmartPointer< vtkImageData > vtkImg = vtkSmartPointer< vtkImageData >::New();
+    ::fwVtkIO::toVTKImage( image, vtkImg);
+
+    m_outline->SetInputData(vtkImg);
+    m_negatoSagittal->SetInputData(vtkImg);
+    m_negatoFrontal->SetInputData(vtkImg);
+    m_negatoAxial->SetInputData(vtkImg);
 }
 
 //------------------------------------------------------------------------------
 
-::fwServices::IService::KeyConnectionsType SRenderer::getObjSrvConnections() const
+::fwServices::IService::KeyConnectionsMap SRenderer::getAutoConnections() 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 ) );
+    KeyConnectionsMap connections;
+    connections.push( s_IMAGE_KEY, ::fwData::Image::s_MODIFIED_SIG, s_REFRESH_SLOT );
+    connections.push( s_IMAGE_KEY, ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_REFRESH_SLOT );
 
     return connections;
 }
diff --git a/Bundles/core/activities/include/activities/namespace.hpp b/Bundles/core/activities/include/activities/namespace.hpp
index e9c0190..74ba2c1 100644
--- a/Bundles/core/activities/include/activities/namespace.hpp
+++ b/Bundles/core/activities/include/activities/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,12 @@
 #define __ACTIVITIES_NAMESPACE_HPP__
 
 /**
- * @brief The namespace activities contains helper and services allowing to launch activities.
- * @namespace activities
+ * @ingroup apprequirement
+ * @brief The namespace activities contains helpers and services allowing to launch activities.
+ *
+ * This bundles allows to register the activities available for an application. It is required for application using
+ * Activities.
  **/
-
 namespace activities
 {
 
diff --git a/Bundles/core/appXml/include/appXml/Namespace.hpp b/Bundles/core/appXml/include/appXml/Namespace.hpp
index 89de242..c9e3b4b 100644
--- a/Bundles/core/appXml/include/appXml/Namespace.hpp
+++ b/Bundles/core/appXml/include/appXml/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,9 @@
 #define __APPXML_NAMESPACE_HPP__
 
 /**
- * @brief      The namespace appXml.
- * @namespace  appXml
- *
- * @date       2009-2010.
- *
+ * @ingroup apprequirement
+ * @brief  The namespace appXml allows to parse xml configuration of an application.
+ * See @ref AppConfig for more details.
  */
 namespace appXml
 {
diff --git a/Bundles/core/appXml2/include/appXml2/Namespace.hpp b/Bundles/core/appXml2/include/appXml2/Namespace.hpp
index e74537d..32b4447 100644
--- a/Bundles/core/appXml2/include/appXml2/Namespace.hpp
+++ b/Bundles/core/appXml2/include/appXml2/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,28 @@
 #define __APPXML2_NAMESPACE_HPP__
 
 /**
- * @brief      The namespace appXml2.
+ * @ingroup apprequirement
+ * @brief  The bundle appXml2 allows to parse xml configuration of an application.
+ * See @ref AppConfig2 for more details.
+ *
+ * This bundle is automatically started at the launch of the application if it is present in the REQUIREMENTS of the
+ * application's Properties.cmake.
+ *
+ * Example
+ * @code{cmake}
+    set( NAME Tuto01Basic )
+    set( VERSION 0.1 )
+    set( TYPE APP )
+    set( DEPENDENCIES  )
+    set( REQUIREMENTS
+        dataReg
+        servicesReg
+        guiQt # it will be automatically started when the application launches
+        fwlauncher
+        appXml2 # it will be automatically started when the application launches
+    )
+    bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoBasicConfig)
+   @endcode
  */
 namespace appXml2
 {
diff --git a/Bundles/core/dataReg/Properties.cmake b/Bundles/core/dataReg/Properties.cmake
index fc34f49..e13e29a 100644
--- a/Bundles/core/dataReg/Properties.cmake
+++ b/Bundles/core/dataReg/Properties.cmake
@@ -6,6 +6,8 @@ set( DEPENDENCIES
     fwCore
     fwData
     fwMedData
+    fwDataCamp
+    fwMedDataCamp
     fwRuntime
     fwServices
 )
diff --git a/Bundles/core/dataReg/include/dataReg/Namespace.hpp b/Bundles/core/dataReg/include/dataReg/Namespace.hpp
index 7c7dfac..6619ce9 100644
--- a/Bundles/core/dataReg/include/dataReg/Namespace.hpp
+++ b/Bundles/core/dataReg/include/dataReg/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,48 @@
 #define __DATAREG_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace dataReg (data registration) contains classes which describes all types of data existing in FW4SPL.
- * @namespace   dataReg
+ * @ingroup apprequirement
+ * @brief  The namespace dataReg (data registration) contains classes which allow to parse the xml configuration
+ *         of objects .
+ *
+ * It also is used to load fwData and fwMedData library. So, if you want to use any objects in your application
+ * described in XML, you require this bundle: add the requirement in your application plugin.xml.
+ *
+ * @code{xml}
+    <requirement id="dataReg" />
+   @endcode
+ *
+ *  Example of plugin.xml:
+ *
+ * @code{xml}
+    <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>
+   @endcode
  */
 namespace dataReg
 {
diff --git a/Bundles/core/dataReg/include/dataReg/pch.hpp b/Bundles/core/dataReg/include/dataReg/pch.hpp
new file mode 100644
index 0000000..29c63eb
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/pch.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PCH_HPP__
+#define __DATAREG_PCH_HPP__
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/IXMLParser.hpp>
+#include <fwServices/macros.hpp>
+
+#endif // __DATAREG_PCH_HPP__
diff --git a/Bundles/core/dataReg/src/dataReg/Plugin.cpp b/Bundles/core/dataReg/src/dataReg/Plugin.cpp
index 4e81df7..331e0dc 100644
--- a/Bundles/core/dataReg/src/dataReg/Plugin.cpp
+++ b/Bundles/core/dataReg/src/dataReg/Plugin.cpp
@@ -1,24 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 "dataReg/Plugin.hpp"
+
 #include <fwData/Float.hpp>
+
+#include <fwDataCamp/Version.hpp>
+
 #include <fwMedData/Patient.hpp>
 
-#include "dataReg/Plugin.hpp"
+#include <fwMedDataCamp/Version.hpp>
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
 namespace dataReg
 {
 
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::dataReg::Plugin");
 
+//-----------------------------------------------------------------------------
+
 Plugin::~Plugin() throw()
 {
 }
 
+//-----------------------------------------------------------------------------
+
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
     //Hack: force link with fwData
@@ -28,10 +38,22 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
     //Hack: force link with fwMedData
     ::fwMedData::Patient::sptr pat = ::fwMedData::Patient::New();
     pat->getClassname();
+
+    //Force link with fwDataCamp
+    static const int fwDataCampVersion = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(fwDataCampVersion);
+
+    //Force link with rdDataCamp
+    static const int fwMedDataCampVersion = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(fwMedDataCampVersion);
 }
 
+//-----------------------------------------------------------------------------
+
 void Plugin::stop() throw()
 {
 }
 
+//-----------------------------------------------------------------------------
+
 } // namespace dataReg
diff --git a/Bundles/core/dataReg/src/dataReg/parser/Object.cpp b/Bundles/core/dataReg/src/dataReg/parser/Object.cpp
index 5c9b78e..eb70e77 100644
--- a/Bundles/core/dataReg/src/dataReg/parser/Object.cpp
+++ b/Bundles/core/dataReg/src/dataReg/parser/Object.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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>
@@ -60,7 +58,6 @@ 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 )
@@ -89,7 +86,6 @@ void Object::createConfig( ::fwTools::Object::sptr _obj )
                              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");
diff --git a/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp b/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp
index 90bb9d6..b7496b9 100644
--- a/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp
+++ b/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,14 +18,14 @@ 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 )
 {
@@ -46,23 +46,22 @@ void TransferFunction::createConfig( ::fwTools::Object::sptr _obj )
             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"));
+            double value         = std::stod(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);
+            ::fwData::TransferFunction::TFColor color(newColor->red(), newColor->green(),
+                                                      newColor->blue(), newColor->alpha());
+            tf->addTFColor(value, color);
         }
+        tf->setWLMinMax(tf->getMinMaxTFValues());
     }
-
-    tf->setWLMinMax(tf->getMinMaxTFValues());
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
-} //namespace parser
-} //namespace dataReg
+} // namespace parser
+} // namespace dataReg
 
diff --git a/Bundles/core/gui/include/gui/Namespace.hpp b/Bundles/core/gui/include/gui/Namespace.hpp
index 73d2f3a..2fbd72f 100644
--- a/Bundles/core/gui/include/gui/Namespace.hpp
+++ b/Bundles/core/gui/include/gui/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #define __GUI_NAMESPACE_HPP__
 
 /**
+ * @ingroup bundlerequirement
  * @brief The namespace gui contains the basic services to build the application IHM.
+ *
+ * It shoud be added in \p \<requirement\> section in bunldes containing \e gui services like actions or editors.
  */
 namespace gui
 {
diff --git a/Bundles/core/gui/src/gui/action/SStarter.cpp b/Bundles/core/gui/src/gui/action/SStarter.cpp
index 9b65e76..e41a28b 100644
--- a/Bundles/core/gui/src/gui/action/SStarter.cpp
+++ b/Bundles/core/gui/src/gui/action/SStarter.cpp
@@ -41,7 +41,6 @@ SStarter::~SStarter() throw()
 
 void SStarter::starting() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
     this->actionServiceStarting();
 }
 
@@ -49,7 +48,8 @@ void SStarter::starting() throw( ::fwTools::Failed )
 
 void SStarter::stopping() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+
     for( VectPairIDActionType::value_type serviceUid :  m_uuidServices)
     {
         bool srv_exists = ::fwTools::fwID::exist(serviceUid.first );
@@ -58,17 +58,19 @@ void SStarter::stopping() throw( ::fwTools::Failed )
             ::fwServices::IService::sptr service = ::fwServices::get( serviceUid.first );
             if (service->isStarted())
             {
-                service->stop();
+                futures.push_back(service->stop());
             }
         }
     }
 
+    ::boost::wait_for_all(futures.begin(), futures.end());
+
     this->actionServiceStopping();
 }
 
 //-----------------------------------------------------------------------------
 
-void SStarter::info(std::ostream &_sstream )
+void SStarter::info(std::ostream& _sstream )
 {
     _sstream << "Starter Action" << std::endl;
 }
@@ -77,8 +79,6 @@ void SStarter::info(std::ostream &_sstream )
 
 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;
@@ -183,7 +183,6 @@ void SStarter::updating() throw( ::fwTools::Failed )
 
 void SStarter::configuring() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
     this->initialize();
 
     for(ConfigurationType actionCfg :  m_configuration->getElements() )
diff --git a/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp b/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp
index 42445e0..e44d94a 100644
--- a/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp
+++ b/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp
@@ -1,16 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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
@@ -62,7 +59,7 @@ void SDefaultToolBar::updating() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SDefaultToolBar::info( std::ostream &_sstream )
+void SDefaultToolBar::info( std::ostream& _sstream )
 {
     SLM_TRACE_FUNC();
 }
diff --git a/Bundles/core/gui/src/gui/view/SDefaultView.cpp b/Bundles/core/gui/src/gui/view/SDefaultView.cpp
index 2459f37..a42b69b 100644
--- a/Bundles/core/gui/src/gui/view/SDefaultView.cpp
+++ b/Bundles/core/gui/src/gui/view/SDefaultView.cpp
@@ -1,18 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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
@@ -20,7 +17,6 @@ namespace view
 
 fwServicesRegisterMacro( ::gui::view::IView, ::gui::view::SDefaultView, ::fwData::Object );
 
-
 SDefaultView::SDefaultView() throw()
 {
 }
@@ -56,7 +52,7 @@ void SDefaultView::stopping() throw(::fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-void SDefaultView::info(std::ostream &_sstream )
+void SDefaultView::info(std::ostream& _sstream )
 {
     SLM_TRACE_FUNC();
 }
diff --git a/Bundles/core/io/include/io/Namespace.hpp b/Bundles/core/io/include/io/Namespace.hpp
index cee905f..5c06aa2 100644
--- a/Bundles/core/io/include/io/Namespace.hpp
+++ b/Bundles/core/io/include/io/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@
 #define __IO_NAMESPACE_HPP__
 
 /**
+ * @ingroup bundlerequirement
  * @brief     The namespace io contains the base interface for reader and writer services.
- * @namespace io
- *
- * @date      2009-2010.
- *
+ * It shoud be added in \p \<requirement\> section in bunldes containing services inheriting of io::IReader or
+ * io::IWriter.
  */
 namespace io
 {
diff --git a/Bundles/core/io/src/io/IReader.cpp b/Bundles/core/io/src/io/IReader.cpp
index 46deb7d..f97ea55 100644
--- a/Bundles/core/io/src/io/IReader.cpp
+++ b/Bundles/core/io/src/io/IReader.cpp
@@ -13,8 +13,8 @@
 
 #include <fwCore/base.hpp>
 
-#include <fwRuntime/ConfigurationElementContainer.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/ConfigurationElementContainer.hpp>
 
 #include <fwServices/macros.hpp>
 
@@ -23,9 +23,10 @@ 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";
+static const ::fwCom::Slots::SlotKeyType s_READ_FOLDER_SLOT   = "readFolder";
+static const ::fwCom::Slots::SlotKeyType s_READ_FILE_SLOT     = "readFile";
+static const ::fwCom::Slots::SlotKeyType s_READ_FILES_SLOT    = "readFiles";
+static const ::fwCom::Slots::SlotKeyType s_CONFIGURE_WITH_IHM = "configureWithIHM";
 
 //-----------------------------------------------------------------------------
 
@@ -34,6 +35,7 @@ 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);
+    newSlot(s_CONFIGURE_WITH_IHM, &IReader::configureWithIHM, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -58,7 +60,7 @@ std::vector< std::string > IReader::getSupportedExtensions()
 
 //-----------------------------------------------------------------------------
 
-const ::boost::filesystem::path &IReader::getFile() const
+const ::boost::filesystem::path& IReader::getFile() const
 {
     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);
@@ -67,7 +69,7 @@ const ::boost::filesystem::path &IReader::getFile() const
 
 //-----------------------------------------------------------------------------
 
-void IReader::setFile( const ::boost::filesystem::path &file)
+void IReader::setFile( const ::boost::filesystem::path& file)
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
     m_locations.clear();
@@ -76,7 +78,7 @@ void IReader::setFile( const ::boost::filesystem::path &file)
 
 //-----------------------------------------------------------------------------
 
-const ::io::LocationsType &IReader::getFiles() const
+const ::io::LocationsType& IReader::getFiles() const
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
     FW_RAISE_IF("At least one file must be define in location", m_locations.empty() );
@@ -85,7 +87,7 @@ const ::io::LocationsType &IReader::getFiles() const
 
 //-----------------------------------------------------------------------------
 
-void IReader::setFiles(const ::io::LocationsType &files)
+void IReader::setFiles(const ::io::LocationsType& files)
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
     m_locations = files;
@@ -93,7 +95,7 @@ void IReader::setFiles(const ::io::LocationsType &files)
 
 //-----------------------------------------------------------------------------
 
-const ::boost::filesystem::path &IReader::getFolder() const
+const ::boost::filesystem::path& IReader::getFolder() const
 {
     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 );
@@ -102,7 +104,7 @@ const ::boost::filesystem::path &IReader::getFolder() const
 
 //-----------------------------------------------------------------------------
 
-void IReader::setFolder(const ::boost::filesystem::path &folder)
+void IReader::setFolder(const ::boost::filesystem::path& folder)
 {
     FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
     m_locations.clear();
@@ -111,7 +113,7 @@ void IReader::setFolder(const ::boost::filesystem::path &folder)
 
 //-----------------------------------------------------------------------------
 
-const ::io::LocationsType &IReader::getLocations() const
+const ::io::LocationsType& IReader::getLocations() const
 {
     FW_RAISE_IF("At least one path must be define in location", m_locations.empty() );
     return m_locations;
@@ -132,13 +134,11 @@ void IReader::configuring() throw (fwTools::Failed)
                !( this->getIOPathType() & ::io::TYPE_NOT_DEFINED ) );
 
     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)) );
+               ( this->getIOPathType() & ::io::FOLDER ) || (m_configuration->find("folder").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)) );
+               (m_configuration->find("file").size() == 0));
 
     if ( this->getIOPathType() & ::io::FILE )
     {
diff --git a/Bundles/core/io/src/io/IWriter.cpp b/Bundles/core/io/src/io/IWriter.cpp
index cdb2aa3..2e833c0 100644
--- a/Bundles/core/io/src/io/IWriter.cpp
+++ b/Bundles/core/io/src/io/IWriter.cpp
@@ -5,16 +5,23 @@
  * ****** END LICENSE BLOCK ****** */
 #include "io/IWriter.hpp"
 
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
 #include <fwCore/base.hpp>
+
 #include <fwServices/macros.hpp>
 
 namespace io
 {
 
+static const ::fwCom::Slots::SlotKeyType s_CONFIGURE_WITH_IHM = "configureWithIHM";
+
 //-----------------------------------------------------------------------------
 
 IWriter::IWriter() throw()
 {
+    newSlot(s_CONFIGURE_WITH_IHM, &IWriter::configureWithIHM, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -25,7 +32,7 @@ IWriter::~IWriter() throw()
 
 //-----------------------------------------------------------------------------
 
-const ::boost::filesystem::path &IWriter::getFile() const
+const ::boost::filesystem::path& IWriter::getFile() const
 {
     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);
@@ -34,7 +41,7 @@ const ::boost::filesystem::path &IWriter::getFile() const
 
 //-----------------------------------------------------------------------------
 
-void IWriter::setFile( const ::boost::filesystem::path &file)
+void IWriter::setFile( const ::boost::filesystem::path& file)
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
     m_locations.clear();
@@ -43,7 +50,7 @@ void IWriter::setFile( const ::boost::filesystem::path &file)
 
 //-----------------------------------------------------------------------------
 
-const ::io::LocationsType &IWriter::getFiles() const
+const ::io::LocationsType& IWriter::getFiles() const
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
     FW_RAISE_IF("At least one file must be define in location", m_locations.empty() );
@@ -52,7 +59,7 @@ const ::io::LocationsType &IWriter::getFiles() const
 
 //-----------------------------------------------------------------------------
 
-void IWriter::setFiles(const ::io::LocationsType &files)
+void IWriter::setFiles(const ::io::LocationsType& files)
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
     m_locations = files;
@@ -60,7 +67,7 @@ void IWriter::setFiles(const ::io::LocationsType &files)
 
 //-----------------------------------------------------------------------------
 
-const ::boost::filesystem::path &IWriter::getFolder() const
+const ::boost::filesystem::path& IWriter::getFolder() const
 {
     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 );
@@ -69,7 +76,7 @@ const ::boost::filesystem::path &IWriter::getFolder() const
 
 //-----------------------------------------------------------------------------
 
-void IWriter::setFolder(const ::boost::filesystem::path &folder)
+void IWriter::setFolder(const ::boost::filesystem::path& folder)
 {
     FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
     m_locations.clear();
@@ -78,7 +85,7 @@ void IWriter::setFolder(const ::boost::filesystem::path &folder)
 
 //-----------------------------------------------------------------------------
 
-const ::io::LocationsType &IWriter::getLocations() const
+const ::io::LocationsType& IWriter::getLocations() const
 {
     FW_RAISE_IF("At least one path must be define in location", m_locations.empty() );
     return m_locations;
@@ -100,12 +107,11 @@ void IWriter::configuring() throw (fwTools::Failed)
 
     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)) );
+               (m_configuration->find("folder").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)) );
+               (m_configuration->find("file").size() == 0));
 
     if ( this->getIOPathType() & ::io::FILE )
     {
diff --git a/Bundles/core/memory/include/memory/Namespace.hpp b/Bundles/core/memory/include/memory/Namespace.hpp
index d908716..4575a86 100644
--- a/Bundles/core/memory/include/memory/Namespace.hpp
+++ b/Bundles/core/memory/include/memory/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,15 @@
 #define __MEMORY_NAMESPACE_HPP__
 
 /**
- * @brief     The namespace memory contains tools to manage memory. Used for dump.
- * @namespace memory
- *
- * @date      2009-2011.
+ * @ingroup   apprequirement
+ * @brief     The namespace memory contains tools to manage memory. It is used for dump.
+ *            It allows to define the buffer loading mode for the application (lazy and direct) at the start of this
+ *            bundle. Add it in the application's \p \<requirement\> section.
  *
+ * To configure the loading mode (here 'lazy') , add the following line in your application's Properties.cmake
+ * @code{cmake}
+    bundleParam(memory PARAM_LIST loading_mode PARAM_VALUES lazy)
+   @endcode
  */
 namespace memory
 {
diff --git a/Bundles/core/memory/src/memory/SDumpPolicy.cpp b/Bundles/core/memory/src/memory/SDumpPolicy.cpp
index 903b831..e705ef0 100644
--- a/Bundles/core/memory/src/memory/SDumpPolicy.cpp
+++ b/Bundles/core/memory/src/memory/SDumpPolicy.cpp
@@ -1,24 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "memory/SDumpPolicy.hpp"
 
 #include <fwCore/base.hpp>
 
-// Service associated data
-#include <fwData/Object.hpp>
-
-// Services tools
-#include <fwServices/macros.hpp>
-
 #include <fwMemory/BufferManager.hpp>
 #include <fwMemory/IPolicy.hpp>
 
-#include "memory/SDumpPolicy.hpp"
+#include <fwServices/macros.hpp>
 
+#include <vector>
 
 namespace memory
 {
@@ -55,7 +50,7 @@ void SDumpPolicy::configuring() throw ( ::fwTools::Failed )
 
         if(!paramsElement.empty())
         {
-            const ConfigurationType &params = paramsElement.at(0);
+            const ConfigurationType& params = paramsElement.at(0);
 
             ::fwRuntime::ConfigurationElement::Container::const_iterator iter;
 
@@ -79,7 +74,7 @@ void SDumpPolicy::starting() throw ( ::fwTools::Failed )
         if (policy)
         {
             bool success;
-            for(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 '"
@@ -101,6 +96,8 @@ void SDumpPolicy::stopping() throw ( ::fwTools::Failed )
 {
 }
 
+//------------------------------------------------------------------------------
+
 void SDumpPolicy::updating() throw ( ::fwTools::Failed )
 {
 }
@@ -115,4 +112,3 @@ void SDumpPolicy::swapping() throw ( ::fwTools::Failed )
 
 } // namespace memory
 
-
diff --git a/Bundles/core/preferences/Properties.cmake b/Bundles/core/preferences/Properties.cmake
index 874cf98..3afa3b4 100644
--- a/Bundles/core/preferences/Properties.cmake
+++ b/Bundles/core/preferences/Properties.cmake
@@ -13,6 +13,7 @@ set( DEPENDENCIES
     fwAtomConversion
     fwZip
     fwAtoms
+    fwPreferences
 )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/preferences/include/preferences/Plugin.hpp b/Bundles/core/preferences/include/preferences/Plugin.hpp
index e000513..b788ab6 100644
--- a/Bundles/core/preferences/include/preferences/Plugin.hpp
+++ b/Bundles/core/preferences/include/preferences/Plugin.hpp
@@ -7,18 +7,18 @@
 #ifndef __PREFERENCES_PLUGIN_HPP__
 #define __PREFERENCES_PLUGIN_HPP__
 
-#include <string>
-#include <boost/filesystem.hpp>
+#include <fwData/Composite.hpp>
 
 #include <fwRuntime/Plugin.hpp>
 
-#include <fwData/Composite.hpp>
+#include <string>
 
 namespace preferences
 {
 
-struct Plugin : public ::fwRuntime::Plugin
+class Plugin : public ::fwRuntime::Plugin
 {
+public:
     ~Plugin() throw()
     {
     }
@@ -27,13 +27,11 @@ struct Plugin : public ::fwRuntime::Plugin
 
     void stop() throw();
 
-    protected:
-
-        ::boost::filesystem::path getPreferencesFile() const;
+protected:
 
-        static const std::string s_PREF_SERVICE_UID;
+    static const std::string s_PREF_SERVICE_UID;
 
-        ::fwData::Composite::sptr m_preferences;
+    ::fwData::Composite::sptr m_preferences;
 };
 
 } // namespace preferences
diff --git a/Bundles/core/preferences/include/preferences/SPreferences.hpp b/Bundles/core/preferences/include/preferences/SPreferences.hpp
index cf8f71a..09acfe0 100644
--- a/Bundles/core/preferences/include/preferences/SPreferences.hpp
+++ b/Bundles/core/preferences/include/preferences/SPreferences.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2014-2017.
  * 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,11 @@
 #ifndef __PREFERENCES_SPREFERENCES_HPP__
 #define __PREFERENCES_SPREFERENCES_HPP__
 
-#include "preferences/IPreferencesService.hpp"
+#include "preferences/config.hpp"
+
+#include <fwPreferences/IPreferences.hpp>
+
+#include <boost/filesystem/path.hpp>
 
 namespace preferences
 {
@@ -19,11 +23,11 @@ namespace preferences
  * @endcode
  * @throw ::fwTools::Failed
  */
-class PREFERENCES_CLASS_API SPreferences : public ::preferences::IPreferencesService
+class PREFERENCES_CLASS_API SPreferences : public ::fwPreferences::IPreferences
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SPreferences)(::preferences::IPreferencesService) );
+    fwCoreServiceClassDefinitionsMacro( (SPreferences)(::fwPreferences::IPreferences) );
 
     ///Destructor
 
diff --git a/Bundles/core/preferences/include/preferences/namespace.hpp b/Bundles/core/preferences/include/preferences/namespace.hpp
new file mode 100644
index 0000000..6dee281
--- /dev/null
+++ b/Bundles/core/preferences/include/preferences/namespace.hpp
@@ -0,0 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PREFERENCES_NAMESPACE_HPP__
+#define __PREFERENCES_NAMESPACE_HPP__
+
+/**
+ * @ingroup apprequirement
+ * @brief  The namespace preferences contains the service to manage the application's preferences (window size/position,
+ *         default read/write directory, ...).
+ *
+ * This bundle must be added in the \p \<requirement\> section of your application if you want to save the
+ * application's preferences.
+ */
+namespace preferences
+{
+
+} // namespace preferences
+
+#endif //__PREFERENCES_NAMESPACE_HPP__
diff --git a/Bundles/core/preferences/rc/plugin.xml b/Bundles/core/preferences/rc/plugin.xml
index 43280bb..33a98f0 100644
--- a/Bundles/core/preferences/rc/plugin.xml
+++ b/Bundles/core/preferences/rc/plugin.xml
@@ -3,7 +3,7 @@
     <library name="preferences"/>
     
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::preferences::IPreferencesService</type>
+        <type>::fwPreferences::IPreferences</type>
         <service>::preferences::SPreferences</service>
         <object>::fwData::Composite</object>
     </extension>
diff --git a/Bundles/core/preferences/src/preferences/Plugin.cpp b/Bundles/core/preferences/src/preferences/Plugin.cpp
index b134ada..59e0163 100644
--- a/Bundles/core/preferences/src/preferences/Plugin.cpp
+++ b/Bundles/core/preferences/src/preferences/Plugin.cpp
@@ -8,6 +8,8 @@
 
 #include <fwData/String.hpp>
 
+#include <fwPreferences/helper.hpp>
+
 #include <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/profile/Profile.hpp>
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
@@ -33,13 +35,13 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 
     ::fwServices::IService::sptr prefSrv;
     prefSrv = ::fwServices::add (m_preferences,
-                                 "::preferences::IPreferencesService", "::preferences::SPreferences",
+                                 "::fwPreferences::IPreferences", "::preferences::SPreferences",
                                  s_PREF_SERVICE_UID);
 
     try
     {
         ::fwRuntime::EConfigurationElement::sptr prefConfig = ::fwRuntime::EConfigurationElement::New( "filename" );
-        ::boost::filesystem::path prefFile                  = this->getPreferencesFile();
+        ::boost::filesystem::path prefFile                  = ::fwPreferences::getPreferencesFile();
         prefConfig->setValue(prefFile.string());
 
         prefSrv->setConfiguration(prefConfig);
@@ -73,30 +75,4 @@ void Plugin::stop() throw()
 
 //-----------------------------------------------------------------------------
 
-::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
index 8fbf461..05f85b3 100644
--- a/Bundles/core/preferences/src/preferences/SPreferences.cpp
+++ b/Bundles/core/preferences/src/preferences/SPreferences.cpp
@@ -6,11 +6,11 @@
 
 #include "preferences/SPreferences.hpp"
 
-#include <fwAtomsBoostIO/types.hpp>
+#include <fwAtomConversion/convert.hpp>
+
 #include <fwAtomsBoostIO/Reader.hpp>
 #include <fwAtomsBoostIO/Writer.hpp>
-
-#include <fwAtomConversion/convert.hpp>
+#include <fwAtomsBoostIO/types.hpp>
 
 #include <fwData/Composite.hpp>
 
@@ -28,7 +28,7 @@
 namespace preferences
 {
 
-fwServicesRegisterMacro( ::preferences::IPreferencesService, ::preferences::SPreferences, ::fwData::Composite );
+fwServicesRegisterMacro( ::fwPreferences::IPreferences, ::preferences::SPreferences, ::fwData::Composite );
 
 //-----------------------------------------------------------------------------
 
@@ -121,5 +121,5 @@ void SPreferences::save()
 
 //-----------------------------------------------------------------------------
 
-}
+} //namespace preferences
 
diff --git a/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp b/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
index e4bd96c..c259e1b 100644
--- a/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
+++ b/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,16 @@
 #ifndef __SERVICESREG_NAMESPACE_HPP__
 #define __SERVICESREG_NAMESPACE_HPP__
 
+
 /**
- * @brief      The namespace servicesReg (registration service) contains all types of low-level services essential to FW4SPL.
+ * @ingroup apprequirement
+ * @brief The namespace servicesReg (registration service) allows to load all the service managment registry.
+ *
+ * It is required for all applications.
  */
 namespace servicesReg
 {
 
 }
+
 #endif /* __SERVICESREG_NAMESPACE_HPP__ */
diff --git a/Bundles/core/servicesReg/rc/serviceFactory.xsd b/Bundles/core/servicesReg/rc/serviceFactory.xsd
index e555872..3244895 100644
--- a/Bundles/core/servicesReg/rc/serviceFactory.xsd
+++ b/Bundles/core/servicesReg/rc/serviceFactory.xsd
@@ -1,17 +1,16 @@
 <?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="type" type="xs:string" minOccurs="1" maxOccurs="1"/>
             <xs:element name="service" type="xs:string" minOccurs="1" maxOccurs="1"/>
-            <xs:element name="object" type="xs:string" minOccurs="1" maxOccurs="1"/>
+            <xs:element name="object" type="xs:string" minOccurs="0" maxOccurs="1"/>
             <xs:element name="desc" type="xs:string" minOccurs="0" maxOccurs="1"/>
         </xs:sequence>
         <xs:attribute name="implements" type="xs:string" use="required" />
     </xs:complexType>
 
 </xs:schema>
-  
\ No newline at end of file
diff --git a/Bundles/media/rc/icons/AttachmentSeries.svg b/Bundles/media/rc/icons/AttachmentSeries.svg
new file mode 100644
index 0000000..8c52bd3
--- /dev/null
+++ b/Bundles/media/rc/icons/AttachmentSeries.svg
@@ -0,0 +1,135 @@
+<?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.91 r13725"
+   sodipodi:docname="AttachmentSeries.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="linearGradient5789"
+       y2="29.858999"
+       gradientUnits="userSpaceOnUse"
+       x2="20.605"
+       y1="5.7753"
+       x1="23.506001"
+       inkscape:collect="always">
+      <stop
+         id="stop5785"
+         style="stop-color:#d3d7cf"
+         offset="0" />
+      <stop
+         id="stop5791"
+         style="stop-color:#f5f5f5"
+         offset=".5" />
+      <stop
+         id="stop5787"
+         style="stop-color:#bebebe"
+         offset="1" />
+    </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="63.407686"
+     inkscape:cy="43.12835"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1027"
+     inkscape:window-x="1912"
+     inkscape:window-y="31"
+     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></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>
+    <g
+       id="g3902"
+       transform="matrix(3.1625208,0,0,3.6566448,242.31113,100.38098)">
+      <path
+         id="path7057"
+         style="fill:none;stroke:#888a85;stroke-width:3;stroke-linecap:round;stroke-linejoin:round"
+         inkscape:r_cy="true"
+         d="m 21.326,9.3279 -10.877,18.614 c -1.9223,3.292 -0.7714,7.539 2.559,9.44 l 2.094,1.197 c 3.332,1.901 7.63,0.763 9.554,-2.529 l 11.756,-20.121 c 1.923,-3.293 1.213,-7.2884 -1.577,-8.8813 -2.79,-1.5928 -6.647,-0.2024 -8.57,3.0903 l -8.155,13.962 c -1.924,3.291 -2.131,6.771 -0.462,7.737 1.669,0.962 4.609,-0.943 6.532,-4.234 l 3.962,-6.783"
+         transform="translate(0.49405,1.0562)"
+         inkscape:r_cx="true"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path7053"
+         style="fill:none;stroke:url(#linearGradient5789);stroke-linecap:round;stroke-linejoin:round"
+         inkscape:r_cy="true"
+         d="m 21.326,9.2155 -10.877,18.614 c -1.9223,3.291 -0.7714,7.539 2.559,9.44 l 2.094,1.197 c 3.332,1.901 7.63,0.762 9.554,-2.529 l 11.756,-20.122 c 1.923,-3.292 1.213,-7.2878 -1.577,-8.8806 -2.79,-1.5928 -6.647,-0.2025 -8.57,3.0896 l -8.155,13.962 c -1.924,3.292 -2.131,6.772 -0.462,7.737 1.669,0.963 4.609,-0.942 6.532,-4.234 l 3.962,-6.783"
+         transform="translate(0.49405,1.1685)"
+         inkscape:r_cx="true"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/style/CMakeLists.txt b/Bundles/style/CMakeLists.txt
new file mode 100644
index 0000000..0c8e18b
--- /dev/null
+++ b/Bundles/style/CMakeLists.txt
@@ -0,0 +1,11 @@
+fwLoadProperties()
+
+find_package(Qt5 COMPONENTS Core REQUIRED)
+
+qt5_add_binary_resources(${FWPROJECT_NAME}_DARKSTYLE_RCC 
+    "rc/darkstyle.qrc" 
+    DESTINATION "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}/darkstyle.rcc"
+)
+
+add_dependencies(${FWPROJECT_NAME} ${FWPROJECT_NAME}_DARKSTYLE_RCC)
+
diff --git a/Bundles/style/Properties.cmake b/Bundles/style/Properties.cmake
new file mode 100644
index 0000000..53bc3b3
--- /dev/null
+++ b/Bundles/style/Properties.cmake
@@ -0,0 +1,7 @@
+
+set( NAME style )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS  )
+
diff --git a/Bundles/style/rc/darkstyle.qrc b/Bundles/style/rc/darkstyle.qrc
new file mode 100644
index 0000000..bedeaca
--- /dev/null
+++ b/Bundles/style/rc/darkstyle.qrc
@@ -0,0 +1,46 @@
+<RCC>
+  <qresource>
+    <file>darkstyle/up_arrow_disabled.png</file>
+    <file>darkstyle/Hmovetoolbar.png</file>
+    <file>darkstyle/stylesheet-branch-end.png</file>
+    <file>darkstyle/branch_closed-on.png</file>
+    <file>darkstyle/stylesheet-vline.png</file>
+    <file>darkstyle/branch_closed.png</file>
+    <file>darkstyle/branch_open-on.png</file>
+    <file>darkstyle/transparent.png</file>
+    <file>darkstyle/right_arrow_disabled.png</file>
+    <file>darkstyle/sizegrip.png</file>
+    <file>darkstyle/close.png</file>
+    <file>darkstyle/close-hover.png</file>
+    <file>darkstyle/close-pressed.png</file>
+    <file>darkstyle/down_arrow.png</file>
+    <file>darkstyle/Vmovetoolbar.png</file>
+    <file>darkstyle/left_arrow.png</file>
+    <file>darkstyle/stylesheet-branch-more.png</file>
+    <file>darkstyle/up_arrow.png</file>
+    <file>darkstyle/right_arrow.png</file>
+    <file>darkstyle/left_arrow_disabled.png</file>
+    <file>darkstyle/Hsepartoolbar.png</file>
+    <file>darkstyle/branch_open.png</file>
+    <file>darkstyle/Vsepartoolbar.png</file>
+    <file>darkstyle/down_arrow_disabled.png</file>
+    <file>darkstyle/undock.png</file>
+    <file>darkstyle/checkbox_checked_disabled.png</file>
+    <file>darkstyle/checkbox_checked_focus.png</file>
+    <file>darkstyle/checkbox_checked.png</file>
+    <file>darkstyle/checkbox_indeterminate.png</file>
+    <file>darkstyle/checkbox_indeterminate_focus.png</file>
+    <file>darkstyle/checkbox_unchecked_disabled.png</file>
+    <file>darkstyle/checkbox_unchecked_focus.png</file>
+    <file>darkstyle/checkbox_unchecked.png</file>
+    <file>darkstyle/radio_checked_disabled.png</file>
+    <file>darkstyle/radio_checked_focus.png</file>
+    <file>darkstyle/radio_checked.png</file>
+    <file>darkstyle/radio_unchecked_disabled.png</file>
+    <file>darkstyle/radio_unchecked_focus.png</file>
+    <file>darkstyle/radio_unchecked.png</file>
+  </qresource>
+  <qresource>
+      <file>darkstyle.qss</file>
+  </qresource>
+</RCC>
diff --git a/Bundles/style/rc/darkstyle.qss b/Bundles/style/rc/darkstyle.qss
new file mode 100644
index 0000000..db0c17d
--- /dev/null
+++ b/Bundles/style/rc/darkstyle.qss
@@ -0,0 +1,1223 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) <2013-2014> <Colin Duquesnoy>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+QProgressBar:horizontal {
+    border: 1px solid #3A3939;
+    text-align: center;
+    padding: 1px;
+    background: #201F1F;
+}
+QProgressBar::chunk:horizontal {
+    background-color: qlineargradient(spread:reflect, x1:1, y1:0.545, x2:1, y2:0, stop:0 rgba(28, 66, 111, 255), stop:1 rgba(37, 87, 146, 255));
+}
+
+QToolTip
+{
+    border: 1px solid #3A3939;
+    background-color: rgb(90, 102, 117);;
+    color: white;
+    padding: 1px;
+    opacity: 200;
+}
+
+QWidget#QfwToolBoxButton
+{
+    text-align: left;
+}
+
+QWidget
+{
+    color: silver;
+    background-color: #302F2F;
+    selection-background-color:#3d8ec9;
+    selection-color: black;
+    background-clip: border;
+    border-image: none;
+    outline: 0;
+}
+
+QWidget:item:hover
+{
+    background-color: #78879b;
+    color: black;
+}
+
+QWidget:item:selected
+{
+    background-color: #3d8ec9;
+}
+
+QCheckBox
+{
+    spacing: 5px;
+    outline: none;
+    color: #bbb;
+    margin-bottom: 2px;
+}
+
+QCheckBox:disabled
+{
+    color: #777777;
+}
+QCheckBox::indicator,
+QGroupBox::indicator
+{
+    width: 18px;
+    height: 18px;
+}
+QGroupBox::indicator
+{
+    margin-left: 2px;
+}
+
+QCheckBox::indicator:unchecked,
+QCheckBox::indicator:unchecked:hover,
+QGroupBox::indicator:unchecked,
+QGroupBox::indicator:unchecked:hover
+{
+    image: url(:/darkstyle/checkbox_unchecked.png);
+}
+
+QCheckBox::indicator:unchecked:focus,
+QCheckBox::indicator:unchecked:pressed,
+QGroupBox::indicator:unchecked:focus,
+QGroupBox::indicator:unchecked:pressed
+{
+  border: none;
+    image: url(:/darkstyle/checkbox_unchecked_focus.png);
+}
+
+QCheckBox::indicator:checked,
+QCheckBox::indicator:checked:hover,
+QGroupBox::indicator:checked,
+QGroupBox::indicator:checked:hover
+{
+    image: url(:/darkstyle/checkbox_checked.png);
+}
+
+QCheckBox::indicator:checked:focus,
+QCheckBox::indicator:checked:pressed,
+QGroupBox::indicator:checked:focus,
+QGroupBox::indicator:checked:pressed
+{
+  border: none;
+    image: url(:/darkstyle/checkbox_checked_focus.png);
+}
+
+QCheckBox::indicator:indeterminate,
+QCheckBox::indicator:indeterminate:hover,
+QCheckBox::indicator:indeterminate:pressed
+QGroupBox::indicator:indeterminate,
+QGroupBox::indicator:indeterminate:hover,
+QGroupBox::indicator:indeterminate:pressed
+{
+    image: url(:/darkstyle/checkbox_indeterminate.png);
+}
+
+QCheckBox::indicator:indeterminate:focus,
+QGroupBox::indicator:indeterminate:focus
+{
+    image: url(:/darkstyle/checkbox_indeterminate_focus.png);
+}
+
+QCheckBox::indicator:checked:disabled,
+QGroupBox::indicator:checked:disabled
+{
+    image: url(:/darkstyle/checkbox_checked_disabled.png);
+}
+
+QCheckBox::indicator:unchecked:disabled,
+QGroupBox::indicator:unchecked:disabled
+{
+    image: url(:/darkstyle/checkbox_unchecked_disabled.png);
+}
+
+QRadioButton
+{
+    spacing: 5px;
+    outline: none;
+    color: #bbb;
+    margin-bottom: 2px;
+}
+
+QRadioButton:disabled
+{
+    color: #777777;
+}
+QRadioButton::indicator
+{
+    width: 21px;
+    height: 21px;
+}
+
+QRadioButton::indicator:unchecked,
+QRadioButton::indicator:unchecked:hover
+{
+    image: url(:/darkstyle/radio_unchecked.png);
+}
+
+QRadioButton::indicator:unchecked:focus,
+QRadioButton::indicator:unchecked:pressed
+{
+  border: none;
+  outline: none;
+    image: url(:/darkstyle/radio_unchecked_focus.png);
+}
+
+QRadioButton::indicator:checked,
+QRadioButton::indicator:checked:hover
+{
+  border: none;
+  outline: none;
+    image: url(:/darkstyle/radio_checked.png);
+}
+
+QRadioButton::indicator:checked:focus,
+QRadioButton::indicato::menu-arrowr:checked:pressed
+{
+  border: none;
+  outline: none;
+    image: url(:/darkstyle/radio_checked_focus.png);
+}
+
+QRadioButton::indicator:indeterminate,
+QRadioButton::indicator:indeterminate:hover,
+QRadioButton::indicator:indeterminate:pressed
+{
+        image: url(:/darkstyle/radio_indeterminate.png);
+}
+
+QRadioButton::indicator:checked:disabled
+{
+  outline: none;
+  image: url(:/darkstyle/radio_checked_disabled.png);
+}
+
+QRadioButton::indicator:unchecked:disabled
+{
+    image: url(:/darkstyle/radio_unchecked_disabled.png);
+}
+
+
+QMenuBar
+{
+    background-color: #302F2F;
+    color: silver;
+}
+
+QMenuBar::item
+{
+    background: transparent;
+}
+
+QMenuBar::item:selected
+{
+    background: transparent;
+    border: 1px solid #3A3939;
+}
+
+QMenuBar::item:pressed
+{
+    border: 1px solid #3A3939;
+    background-color: #3d8ec9;
+    color: black;
+    margin-bottom:-1px;
+    padding-bottom:1px;
+}
+
+QMenu
+{
+    border: 1px solid #3A3939;
+    color: silver;
+    margin: 2px;
+}
+
+QMenu::icon
+{
+    margin: 5px;
+}
+
+QMenu::item
+{
+    padding: 5px 30px 5px 30px;
+    margin-left: 5px;
+    border: 1px solid transparent; /* reserve space for selection border */
+}
+
+QMenu::item:selected
+{
+    color: black;
+}
+
+QMenu::separator {
+    height: 2px;
+    background: lightblue;
+    margin-left: 10px;
+    margin-right: 5px;
+}
+
+QMenu::indicator {
+    width: 18px;
+    height: 18px;
+}
+
+/* non-exclusive indicator = check box style indicator
+   (see QActionGroup::setExclusive) */
+QMenu::indicator:non-exclusive:unchecked {
+    image: url(:/darkstyle/checkbox_unchecked.png);
+}
+
+QMenu::indicator:non-exclusive:unchecked:selected {
+    image: url(:/darkstyle/checkbox_unchecked_disabled.png);
+}
+
+QMenu::indicator:non-exclusive:checked {
+    image: url(:/darkstyle/checkbox_checked.png);
+}
+
+QMenu::indicator:non-exclusive:checked:selected {
+    image: url(:/darkstyle/checkbox_checked_disabled.png);
+}
+
+/* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */
+QMenu::indicator:exclusive:unchecked {
+    image: url(:/darkstyle/radio_unchecked.png);
+}
+
+QMenu::indicator:exclusive:unchecked:selected {
+    image: url(:/darkstyle/radio_unchecked_disabled.png);
+}
+
+QMenu::indicator:exclusive:checked {
+    image: url(:/darkstyle/radio_checked.png);
+}
+
+QMenu::indicator:exclusive:checked:selected {
+    image: url(:/darkstyle/radio_checked_disabled.png);
+}
+
+QMenu::right-arrow {
+    margin: 5px;
+    image: url(:/darkstyle/right_arrow.png)
+}
+
+
+QWidget:disabled
+{
+    color: #404040;
+    background-color: #302F2F;
+}
+
+QAbstractItemView
+{
+    alternate-background-color: #3A3939;
+    color: silver;
+    border: 1px solid 3A3939;
+    border-radius: 2px;
+    padding: 1px;
+}
+
+QWidget:focus, QMenuBar:focus
+{
+    border: 1px solid #78879b;
+}
+
+QTabWidget:focus, QCheckBox:focus, QRadioButton:focus, QSlider:focus
+{
+    border: none;
+}
+
+QLineEdit
+{
+    background-color: #201F1F;
+    padding: 2px;
+    border-style: solid;
+    border: 1px solid #3A3939;
+    border-radius: 2px;
+    color: silver;
+}
+
+QGroupBox {
+    border:1px solid #3A3939;
+    border-radius: 2px;
+    margin-top: 20px;
+}
+
+QGroupBox::title {
+    subcontrol-origin: margin;
+    subcontrol-position: top center;
+    padding-left: 10px;
+    padding-right: 10px;
+    padding-top: 10px;
+}
+
+QAbstractScrollArea
+{
+    border-radius: 2px;
+    border: 1px solid #3A3939;
+    background-color: transparent;
+}
+
+QScrollBar:horizontal
+{
+    height: 15px;
+    margin: 3px 15px 3px 15px;
+    border: 1px transparent #2A2929;
+    border-radius: 4px;
+    background-color: #2A2929;
+}
+
+QScrollBar::handle:horizontal
+{
+    background-color: #605F5F;
+    min-width: 5px;
+    border-radius: 4px;
+}
+
+QScrollBar::add-line:horizontal
+{
+    margin: 0px 3px 0px 3px;
+    border-image: url(:/darkstyle/right_arrow_disabled.png);
+    width: 10px;
+    height: 10px;
+    subcontrol-position: right;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal
+{
+    margin: 0px 3px 0px 3px;
+    border-image: url(:/darkstyle/left_arrow_disabled.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: left;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:horizontal:hover,QScrollBar::add-line:horizontal:on
+{
+    border-image: url(:/darkstyle/right_arrow.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: right;
+    subcontrol-origin: margin;
+}
+
+
+QScrollBar::sub-line:horizontal:hover, QScrollBar::sub-line:horizontal:on
+{
+    border-image: url(:/darkstyle/left_arrow.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: left;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:horizontal, QScrollBar::down-arrow:horizontal
+{
+    background: none;
+}
+
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
+{
+    background: none;
+}
+
+QScrollBar:vertical
+{
+    background-color: #2A2929;
+    width: 15px;
+    margin: 15px 3px 15px 3px;
+    border: 1px transparent #2A2929;
+    border-radius: 4px;
+}
+
+QScrollBar::handle:vertical
+{
+    background-color: #605F5F;
+    min-height: 5px;
+    border-radius: 4px;
+}
+
+QScrollBar::sub-line:vertical
+{
+    margin: 3px 0px 3px 0px;
+    border-image: url(:/darkstyle/up_arrow_disabled.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: top;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::add-line:vertical
+{
+    margin: 3px 0px 3px 0px;
+    border-image: url(:/darkstyle/down_arrow_disabled.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: bottom;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:vertical:hover,QScrollBar::sub-line:vertical:on
+{
+
+    border-image: url(:/darkstyle/up_arrow.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: top;
+    subcontrol-origin: margin;
+}
+
+
+QScrollBar::add-line:vertical:hover, QScrollBar::add-line:vertical:on
+{
+    border-image: url(:/darkstyle/down_arrow.png);
+    height: 10px;
+    width: 10px;
+    subcontrol-position: bottom;
+    subcontrol-origin: margin;
+}
+
+QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical
+{
+    background: none;
+}
+
+
+QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
+{
+    background: none;
+}
+
+QTextEdit
+{
+    background-color: #201F1F;
+    color: silver;
+    border: 1px solid #3A3939;
+}
+
+QPlainTextEdit
+{
+    background-color: #201F1F;;
+    color: silver;
+    border-radius: 2px;
+    border: 1px solid #3A3939;
+}
+
+QHeaderView::section
+{
+    background-color: #3A3939;
+    color: silver;
+    padding-left: 4px;
+    border: 1px solid #6c6c6c;
+}
+
+QSizeGrip {
+    image: url(:/darkstyle/sizegrip.png);
+    width: 12px;
+    height: 12px;
+}
+
+
+QMainWindow::separator
+{
+    background-color: #302F2F;
+    color: white;
+    padding-left: 4px;
+    spacing: 2px;
+    border: 1px dashed #3A3939;
+}
+
+QMainWindow::separator:hover
+{
+
+    background-color: #787876;
+    color: white;
+    padding-left: 4px;
+    border: 1px solid #3A3939;
+    spacing: 2px;
+}
+
+
+QMenu::separator
+{
+    height: 1px;
+    background-color: #3A3939;
+    color: white;
+    padding-left: 4px;
+    margin-left: 10px;
+    margin-right: 5px;
+}
+
+
+QFrame
+{
+    border-radius: 2px;
+    border: 1px solid #444;
+}
+
+QFrame[frameShape="0"]
+{
+    border-radius: 2px;
+    border: 1px transparent #444;
+}
+
+QStackedWidget
+{
+    border: 1px transparent black;
+}
+
+QToolBar {
+    border: 1px transparent #393838;
+    background: 1px solid #302F2F;
+    font-weight: bold;
+}
+
+QToolBar::handle:horizontal {
+    image: url(:/darkstyle/Hmovetoolbar.png);
+}
+QToolBar::handle:vertical {
+    image: url(:/darkstyle/Vmovetoolbar.png);
+}
+QToolBar::separator:horizontal {
+    image: url(:/darkstyle/Hsepartoolbar.png);
+}
+QToolBar::separator:vertical {
+    image: url(:/darkstyle/Vsepartoolbars.png);
+}
+
+QPushButton
+{
+    color: silver;
+    background-color: #302F2F;
+    border-width: 1px;
+    border-color: #4A4949;
+    border-style: solid;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    padding-left: 5px;
+    padding-right: 5px;
+    border-radius: 2px;
+    outline: none;
+}
+
+QPushButton:disabled
+{
+    background-color: #302F2F;
+    border-width: 1px;
+    border-color: #3A3939;
+    border-style: solid;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    padding-left: 10px;
+    padding-right: 10px;
+    /*border-radius: 2px;*/
+    color: #454545;
+}
+
+QPushButton:focus {
+    background-color: #3d8ec9;
+    color: white;
+}
+
+QComboBox
+{
+    selection-background-color: #3d8ec9;
+    background-color: #201F1F;
+    border-style: solid;
+    border: 1px solid #3A3939;
+    border-radius: 2px;
+    padding: 2px;
+    min-width: 75px;
+}
+
+QPushButton:checked{
+    background-color: #4A4949;
+    border-color: #6A6969;
+}
+
+QComboBox:hover,QPushButton:hover,QAbstractSpinBox:hover,QLineEdit:hover,QTextEdit:hover,QPlainTextEdit:hover,QAbstractView:hover,QTreeView:hover
+{
+    border: 1px solid #78879b;
+    color: silver;
+}
+
+QComboBox:on
+{
+    background-color: #626873;
+    padding-top: 3px;
+    padding-left: 4px;
+    selection-background-color: #4a4a4a;
+}
+
+QComboBox QAbstractItemView
+{
+    background-color: #201F1F;
+    border-radius: 2px;
+    border: 1px solid #444;
+    selection-background-color: #3d8ec9;
+}
+
+QComboBox::drop-down
+{
+    subcontrol-origin: padding;
+    subcontrol-position: top right;
+    width: 15px;
+
+    border-left-width: 0px;
+    border-left-color: darkgray;
+    border-left-style: solid;
+    border-top-right-radius: 3px;
+    border-bottom-right-radius: 3px;
+}
+
+QComboBox::down-arrow
+{
+    image: url(:/darkstyle/down_arrow_disabled.png);
+}
+
+QComboBox::down-arrow:on, QComboBox::down-arrow:hover,
+QComboBox::down-arrow:focus
+{
+    image: url(:/darkstyle/down_arrow.png);
+}
+
+QPushButton:pressed
+{
+    background-color: #484846;
+}
+
+QAbstractSpinBox {
+    padding-top: 2px;
+    padding-bottom: 2px;
+    border: 1px solid #3A3939;
+    background-color: #201F1F;
+    color: silver;
+    border-radius: 2px;
+    min-width: 75px;
+}
+
+QAbstractSpinBox:up-button
+{
+    background-color: transparent;
+    subcontrol-origin: border;
+    subcontrol-position: center right;
+}
+
+QAbstractSpinBox:down-button
+{
+    background-color: transparent;
+    subcontrol-origin: border;
+    subcontrol-position: center left;
+}
+
+QAbstractSpinBox::up-arrow,QAbstractSpinBox::up-arrow:disabled,QAbstractSpinBox::up-arrow:off {
+    image: url(:/darkstyle/up_arrow_disabled.png);
+    width: 10px;
+    height: 10px;
+}
+QAbstractSpinBox::up-arrow:hover
+{
+    image: url(:/darkstyle/up_arrow.png);
+}
+
+
+QAbstractSpinBox::down-arrow,QAbstractSpinBox::down-arrow:disabled,QAbstractSpinBox::down-arrow:off
+{
+    image: url(:/darkstyle/down_arrow_disabled.png);
+    width: 10px;
+    height: 10px;
+}
+QAbstractSpinBox::down-arrow:hover
+{
+    image: url(:/darkstyle/down_arrow.png);
+}
+
+
+QLabel
+{
+    border: 0px solid black;
+}
+
+QTabWidget{
+    border: 1px transparent black;
+}
+
+QTabWidget::pane {
+    border: 1px solid #444;
+    border-radius: 3px;
+    padding: 3px;
+}
+
+QTabBar
+{
+    qproperty-drawBase: 0;
+    left: 5px; /* move to the right by 5px */
+}
+
+QTabBar:focus
+{
+    border: 0px transparent black;
+}
+
+QTabBar::close-button  {
+    image: url(:/darkstyle/close.png);
+    background: transparent;
+}
+
+QTabBar::close-button:hover
+{
+    image: url(:/darkstyle/close-hover.png);
+    background: transparent;
+}
+
+QTabBar::close-button:pressed {
+    image: url(:/darkstyle/close-pressed.png);
+    background: transparent;
+}
+
+/* TOP TABS */
+QTabBar::tab:top {
+    color: #b1b1b1;
+    border: 1px solid #4A4949;
+    border-bottom: 1px transparent black;
+    background-color: #302F2F;
+    padding: 5px;
+    border-top-left-radius: 2px;
+    border-top-right-radius: 2px;
+}
+
+QTabBar::tab:top:!selected
+{
+    color: #b1b1b1;
+    background-color: #201F1F;
+    border: 1px transparent #4A4949;
+    border-bottom: 1px transparent #4A4949;
+    border-top-left-radius: 0px;
+    border-top-right-radius: 0px;
+}
+
+QTabBar::tab:top:!selected:hover {
+    background-color: #48576b;
+}
+
+/* BOTTOM TABS */
+QTabBar::tab:bottom {
+    color: #b1b1b1;
+    border: 1px solid #4A4949;
+    border-top: 1px transparent black;
+    background-color: #302F2F;
+    padding: 5px;
+    border-bottom-left-radius: 2px;
+    border-bottom-right-radius: 2px;
+}
+
+QTabBar::tab:bottom:!selected
+{
+    color: #b1b1b1;
+    background-color: #201F1F;
+    border: 1px transparent #4A4949;
+    border-top: 1px transparent #4A4949;
+    border-bottom-left-radius: 0px;
+    border-bottom-right-radius: 0px;
+}
+
+QTabBar::tab:bottom:!selected:hover {
+    background-color: #78879b;
+}
+
+/* LEFT TABS */
+QTabBar::tab:left {
+    color: #b1b1b1;
+    border: 1px solid #4A4949;
+    border-left: 1px transparent black;
+    background-color: #302F2F;
+    padding: 5px;
+    border-top-right-radius: 2px;
+    border-bottom-right-radius: 2px;
+}
+
+QTabBar::tab:left:!selected
+{
+    color: #b1b1b1;
+    background-color: #201F1F;
+    border: 1px transparent #4A4949;
+    border-right: 1px transparent #4A4949;
+    border-top-right-radius: 0px;
+    border-bottom-right-radius: 0px;
+}
+
+QTabBar::tab:left:!selected:hover {
+    background-color: #48576b;
+}
+
+
+/* RIGHT TABS */
+QTabBar::tab:right {
+    color: #b1b1b1;
+    border: 1px solid #4A4949;
+    border-right: 1px transparent black;
+    background-color: #302F2F;
+    padding: 5px;
+    border-top-left-radius: 2px;
+    border-bottom-left-radius: 2px;
+}
+
+QTabBar::tab:right:!selected
+{
+    color: #b1b1b1;
+    background-color: #201F1F;
+    border: 1px transparent #4A4949;
+    border-right: 1px transparent #4A4949;
+    border-top-left-radius: 0px;
+    border-bottom-left-radius: 0px;
+}
+
+QTabBar::tab:right:!selected:hover {
+    background-color: #48576b;
+}
+
+QTabBar QToolButton::right-arrow:enabled {
+     image: url(:/darkstyle/right_arrow.png);
+ }
+
+ QTabBar QToolButton::left-arrow:enabled {
+     image: url(:/darkstyle/left_arrow.png);
+ }
+
+QTabBar QToolButton::right-arrow:disabled {
+     image: url(:/darkstyle/right_arrow_disabled.png);
+ }
+
+ QTabBar QToolButton::left-arrow:disabled {
+     image: url(:/darkstyle/left_arrow_disabled.png);
+ }
+
+
+QDockWidget {
+    border: 1px solid #403F3F;
+    titlebar-close-icon: url(:/darkstyle/close.png);
+    titlebar-normal-icon: url(:/darkstyle/undock.png);
+}
+
+QDockWidget::close-button, QDockWidget::float-button {
+    border: 1px solid transparent;
+    border-radius: 2px;
+    background: transparent;
+}
+
+QDockWidget::close-button:hover, QDockWidget::float-button:hover {
+    background: rgba(255, 255, 255, 10);
+}
+
+QDockWidget::close-button:pressed, QDockWidget::float-button:pressed {
+    padding: 1px -1px -1px 1px;
+    background: rgba(255, 255, 255, 10);
+}
+
+QTreeView, QListView
+{
+    border: 1px solid #444;
+    background-color: #201F1F;
+}
+
+QTreeView:branch:selected, QTreeView:branch:hover
+{
+    background: url(:/darkstyle/transparent.png);
+}
+
+QTreeView::branch:has-siblings:!adjoins-item {
+    border-image: url(:/darkstyle/transparent.png);
+}
+
+QTreeView::branch:has-siblings:adjoins-item {
+    border-image: url(:/darkstyle/transparent.png);
+}
+
+QTreeView::branch:!has-children:!has-siblings:adjoins-item {
+    border-image: url(:/darkstyle/transparent.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed,
+QTreeView::branch:closed:has-children:has-siblings {
+    image: url(:/darkstyle/branch_closed.png);
+}
+
+QTreeView::branch:open:has-children:!has-siblings,
+QTreeView::branch:open:has-children:has-siblings  {
+    image: url(:/darkstyle/branch_open.png);
+}
+
+QTreeView::branch:has-children:!has-siblings:closed:hover,
+QTreeView::branch:closed:has-children:has-siblings:hover {
+    image: url(:/darkstyle/branch_closed-on.png);
+    }
+
+QTreeView::branch:open:has-children:!has-siblings:hover,
+QTreeView::branch:open:has-children:has-siblings:hover  {
+    image: url(:/darkstyle/branch_open-on.png);
+    }
+
+QListView::item:!selected:hover, QListView::item:!selected:hover, QTreeView::item:!selected:hover  {
+    background: rgba(0, 0, 0, 0);
+    outline: 0;
+    color: #FFFFFF
+}
+
+QListView::item:selected:hover, QListView::item:selected:hover, QTreeView::item:selected:hover  {
+    background: #3d8ec9;
+    color: #FFFFFF;
+}
+
+QSlider::groove:horizontal {
+    border: 1px solid #3A3939;
+    height: 8px;
+    background: #201F1F;
+    margin: 2px 0;
+    border-radius: 2px;
+}
+
+QSlider::handle:horizontal {
+    background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1,
+      stop: 0.0 silver, stop: 0.2 #a8a8a8, stop: 1 #727272);
+    border: 1px solid #3A3939;
+    width: 14px;
+    height: 14px;
+    margin: -4px 0;
+    border-radius: 2px;
+}
+
+QSlider::groove:vertical {
+    border: 1px solid #3A3939;
+    width: 8px;
+    background: #201F1F;
+    margin: 0 0px;
+    border-radius: 2px;
+}
+
+QSlider::handle:vertical {
+    background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 silver,
+      stop: 0.2 #a8a8a8, stop: 1 #727272);
+    border: 1px solid #3A3939;
+    width: 14px;
+    height: 14px;
+    margin: 0 -4px;
+    border-radius: 2px;
+}
+
+QToolButton {
+    background-color: transparent;
+    border: 1px transparent #4A4949;
+    border-radius: 2px;
+    margin: 3px;
+    padding: 3px;
+}
+
+QToolButton[popupMode="1"] { /* only for MenuButtonPopup */
+ padding-right: 20px; /* make way for the popup button */
+ border: 1px transparent #4A4949;
+ border-radius: 5px;
+}
+
+QToolButton[popupMode="2"] { /* only for InstantPopup */
+ padding-right: 10px; /* make way for the popup button */
+ border: 1px transparent #4A4949;
+}
+
+
+QToolButton:hover, QToolButton::menu-button:hover {
+    background-color: transparent;
+    border: 1px solid #78879b;
+}
+
+QToolButton:checked, QToolButton:pressed,
+        QToolButton::menu-button:pressed {
+    background-color: #4A4949;
+    border: 1px solid #78879b;
+}
+
+/* the subcontrol below is used only in the InstantPopup or DelayedPopup mode */
+QToolButton::menu-indicator {
+    image: url(:/darkstyle/down_arrow.png);
+    top: -7px; left: -2px; /* shift it a bit */
+}
+
+/* the subcontrols below are used only in the MenuButtonPopup mode */
+QToolButton::menu-button {
+    border: 1px transparent #4A4949;
+    border-top-right-radius: 6px;
+    border-bottom-right-radius: 6px;
+    /* 16px width + 4px for border = 20px allocated above */
+    width: 16px;
+    outline: none;
+}
+
+QToolButton::menu-arrow {
+    image: url(:/darkstyle/down_arrow.png);
+}
+
+QToolButton::menu-arrow:open {
+    top: 1px; left: 1px; /* shift it a bit */
+    border: 1px solid #3A3939;
+}
+
+QPushButton::menu-indicator  {
+    subcontrol-origin: padding;
+    subcontrol-position: bottom right;
+    left: 8px;
+}
+
+QTableView
+{
+    border: 1px solid #444;
+    gridline-color: #6c6c6c;
+    background-color: #201F1F;
+}
+
+
+QTableView, QHeaderView
+{
+    border-radius: 0px;
+}
+
+QTableView::item:pressed, QListView::item:pressed, QTreeView::item:pressed  {
+    background: #78879b;
+    color: #FFFFFF;
+}
+
+QTableView::item:selected:active, QTreeView::item:selected:active, QListView::item:selected:active  {
+    background: #3d8ec9;
+    color: #FFFFFF;
+}
+
+
+QHeaderView
+{
+    border: 1px transparent;
+    border-radius: 2px;
+    margin: 0px;
+    padding: 0px;
+}
+
+QHeaderView::section  {
+    background-color: #3A3939;
+    color: silver;
+    padding: 4px;
+    border: 1px solid #6c6c6c;
+    border-radius: 0px;
+    text-align: center;
+}
+
+QHeaderView::section::vertical::first, QHeaderView::section::vertical::only-one
+{
+    border-top: 1px solid #6c6c6c;
+}
+
+QHeaderView::section::vertical
+{
+    border-top: transparent;
+}
+
+QHeaderView::section::horizontal::first, QHeaderView::section::horizontal::only-one
+{
+    border-left: 1px solid #6c6c6c;
+}
+
+QHeaderView::section::horizontal
+{
+    border-left: transparent;
+}
+
+
+QHeaderView::section:checked
+ {
+    color: white;
+    background-color: #5A5959;
+ }
+
+ /* style the sort indicator */
+QHeaderView::down-arrow {
+    image: url(:/darkstyle/down_arrow.png);
+}
+
+QHeaderView::up-arrow {
+    image: url(:/darkstyle/up_arrow.png);
+}
+
+
+QTableCornerButton::section {
+    background-color: #3A3939;
+    border: 1px solid #3A3939;
+    border-radius: 2px;
+}
+
+QToolBox  {
+    padding: 3px;
+    border: 1px transparent black;
+}
+
+QToolBox::tab {
+    color: #b1b1b1;
+    background-color: #302F2F;
+    border: 1px solid #4A4949;
+    border-bottom: 1px transparent #302F2F;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
+}
+
+ QToolBox::tab:selected { /* italicize selected tabs */
+    font: italic;
+    background-color: #302F2F;
+    border-color: #3d8ec9;
+ }
+
+QStatusBar::item {
+    border: 1px solid #3A3939;
+    border-radius: 2px;
+ }
+
+
+QFrame[height="3"], QFrame[width="3"] {
+    background-color: #444;
+}
+
+
+QSplitter::handle {
+    border: 1px dashed #3A3939;
+}
+
+QSplitter::handle:hover {
+    background-color: #787876;
+    border: 1px solid #3A3939;
+}
+
+QSplitter::handle:horizontal {
+    width: 1px;
+}
+
+QSplitter::handle:vertical {
+    height: 1px;
+}
diff --git a/Bundles/style/rc/darkstyle/Hmovetoolbar.png b/Bundles/style/rc/darkstyle/Hmovetoolbar.png
new file mode 100644
index 0000000..cead99e
Binary files /dev/null and b/Bundles/style/rc/darkstyle/Hmovetoolbar.png differ
diff --git a/Bundles/style/rc/darkstyle/Hsepartoolbar.png b/Bundles/style/rc/darkstyle/Hsepartoolbar.png
new file mode 100644
index 0000000..7f183c8
Binary files /dev/null and b/Bundles/style/rc/darkstyle/Hsepartoolbar.png differ
diff --git a/Bundles/style/rc/darkstyle/Vmovetoolbar.png b/Bundles/style/rc/darkstyle/Vmovetoolbar.png
new file mode 100644
index 0000000..512edce
Binary files /dev/null and b/Bundles/style/rc/darkstyle/Vmovetoolbar.png differ
diff --git a/Bundles/style/rc/darkstyle/Vsepartoolbar.png b/Bundles/style/rc/darkstyle/Vsepartoolbar.png
new file mode 100644
index 0000000..d9dc156
Binary files /dev/null and b/Bundles/style/rc/darkstyle/Vsepartoolbar.png differ
diff --git a/Bundles/style/rc/darkstyle/branch_closed-on.png b/Bundles/style/rc/darkstyle/branch_closed-on.png
new file mode 100644
index 0000000..d081e9b
Binary files /dev/null and b/Bundles/style/rc/darkstyle/branch_closed-on.png differ
diff --git a/Bundles/style/rc/darkstyle/branch_closed.png b/Bundles/style/rc/darkstyle/branch_closed.png
new file mode 100644
index 0000000..d652159
Binary files /dev/null and b/Bundles/style/rc/darkstyle/branch_closed.png differ
diff --git a/Bundles/style/rc/darkstyle/branch_open-on.png b/Bundles/style/rc/darkstyle/branch_open-on.png
new file mode 100644
index 0000000..ec372b2
Binary files /dev/null and b/Bundles/style/rc/darkstyle/branch_open-on.png differ
diff --git a/Bundles/style/rc/darkstyle/branch_open.png b/Bundles/style/rc/darkstyle/branch_open.png
new file mode 100644
index 0000000..66f8e1a
Binary files /dev/null and b/Bundles/style/rc/darkstyle/branch_open.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_checked.png b/Bundles/style/rc/darkstyle/checkbox_checked.png
new file mode 100644
index 0000000..830cfee
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_checked.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_checked_disabled.png b/Bundles/style/rc/darkstyle/checkbox_checked_disabled.png
new file mode 100644
index 0000000..cb63cc2
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_checked_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_checked_focus.png b/Bundles/style/rc/darkstyle/checkbox_checked_focus.png
new file mode 100644
index 0000000..3cf0e54
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_checked_focus.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_indeterminate.png b/Bundles/style/rc/darkstyle/checkbox_indeterminate.png
new file mode 100644
index 0000000..41024f7
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_indeterminate.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_indeterminate_disabled.png b/Bundles/style/rc/darkstyle/checkbox_indeterminate_disabled.png
new file mode 100644
index 0000000..abdc01d
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_indeterminate_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_indeterminate_focus.png b/Bundles/style/rc/darkstyle/checkbox_indeterminate_focus.png
new file mode 100644
index 0000000..a9a16f7
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_indeterminate_focus.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_unchecked.png b/Bundles/style/rc/darkstyle/checkbox_unchecked.png
new file mode 100644
index 0000000..2159aca
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_unchecked.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_unchecked_disabled.png b/Bundles/style/rc/darkstyle/checkbox_unchecked_disabled.png
new file mode 100644
index 0000000..ade721e
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_unchecked_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/checkbox_unchecked_focus.png b/Bundles/style/rc/darkstyle/checkbox_unchecked_focus.png
new file mode 100644
index 0000000..66f5bf5
Binary files /dev/null and b/Bundles/style/rc/darkstyle/checkbox_unchecked_focus.png differ
diff --git a/Bundles/style/rc/darkstyle/close-hover.png b/Bundles/style/rc/darkstyle/close-hover.png
new file mode 100644
index 0000000..657943a
Binary files /dev/null and b/Bundles/style/rc/darkstyle/close-hover.png differ
diff --git a/Bundles/style/rc/darkstyle/close-pressed.png b/Bundles/style/rc/darkstyle/close-pressed.png
new file mode 100644
index 0000000..937d005
Binary files /dev/null and b/Bundles/style/rc/darkstyle/close-pressed.png differ
diff --git a/Bundles/style/rc/darkstyle/close.png b/Bundles/style/rc/darkstyle/close.png
new file mode 100644
index 0000000..bc0f576
Binary files /dev/null and b/Bundles/style/rc/darkstyle/close.png differ
diff --git a/Bundles/style/rc/darkstyle/down_arrow.png b/Bundles/style/rc/darkstyle/down_arrow.png
new file mode 100644
index 0000000..e271f7f
Binary files /dev/null and b/Bundles/style/rc/darkstyle/down_arrow.png differ
diff --git a/Bundles/style/rc/darkstyle/down_arrow_disabled.png b/Bundles/style/rc/darkstyle/down_arrow_disabled.png
new file mode 100644
index 0000000..5805d98
Binary files /dev/null and b/Bundles/style/rc/darkstyle/down_arrow_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/left_arrow.png b/Bundles/style/rc/darkstyle/left_arrow.png
new file mode 100644
index 0000000..f808d2d
Binary files /dev/null and b/Bundles/style/rc/darkstyle/left_arrow.png differ
diff --git a/Bundles/style/rc/darkstyle/left_arrow_disabled.png b/Bundles/style/rc/darkstyle/left_arrow_disabled.png
new file mode 100644
index 0000000..f5b9af8
Binary files /dev/null and b/Bundles/style/rc/darkstyle/left_arrow_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_checked.png b/Bundles/style/rc/darkstyle/radio_checked.png
new file mode 100644
index 0000000..235e6b0
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_checked.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_checked_disabled.png b/Bundles/style/rc/darkstyle/radio_checked_disabled.png
new file mode 100644
index 0000000..bf0051e
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_checked_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_checked_focus.png b/Bundles/style/rc/darkstyle/radio_checked_focus.png
new file mode 100644
index 0000000..14b1cb1
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_checked_focus.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_unchecked.png b/Bundles/style/rc/darkstyle/radio_unchecked.png
new file mode 100644
index 0000000..9a4def6
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_unchecked.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_unchecked_disabled.png b/Bundles/style/rc/darkstyle/radio_unchecked_disabled.png
new file mode 100644
index 0000000..6ece890
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_unchecked_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/radio_unchecked_focus.png b/Bundles/style/rc/darkstyle/radio_unchecked_focus.png
new file mode 100644
index 0000000..27af811
Binary files /dev/null and b/Bundles/style/rc/darkstyle/radio_unchecked_focus.png differ
diff --git a/Bundles/style/rc/darkstyle/right_arrow.png b/Bundles/style/rc/darkstyle/right_arrow.png
new file mode 100644
index 0000000..9b0a4e6
Binary files /dev/null and b/Bundles/style/rc/darkstyle/right_arrow.png differ
diff --git a/Bundles/style/rc/darkstyle/right_arrow_disabled.png b/Bundles/style/rc/darkstyle/right_arrow_disabled.png
new file mode 100644
index 0000000..5c0bee4
Binary files /dev/null and b/Bundles/style/rc/darkstyle/right_arrow_disabled.png differ
diff --git a/Bundles/style/rc/darkstyle/sizegrip.png b/Bundles/style/rc/darkstyle/sizegrip.png
new file mode 100644
index 0000000..350583a
Binary files /dev/null and b/Bundles/style/rc/darkstyle/sizegrip.png differ
diff --git a/Bundles/style/rc/darkstyle/stylesheet-branch-end.png b/Bundles/style/rc/darkstyle/stylesheet-branch-end.png
new file mode 100644
index 0000000..cb5d3b5
Binary files /dev/null and b/Bundles/style/rc/darkstyle/stylesheet-branch-end.png differ
diff --git a/Bundles/style/rc/darkstyle/stylesheet-branch-more.png b/Bundles/style/rc/darkstyle/stylesheet-branch-more.png
new file mode 100644
index 0000000..6271140
Binary files /dev/null and b/Bundles/style/rc/darkstyle/stylesheet-branch-more.png differ
diff --git a/Bundles/style/rc/darkstyle/stylesheet-vline.png b/Bundles/style/rc/darkstyle/stylesheet-vline.png
new file mode 100644
index 0000000..87536cc
Binary files /dev/null and b/Bundles/style/rc/darkstyle/stylesheet-vline.png differ
diff --git a/Bundles/style/rc/darkstyle/transparent.png b/Bundles/style/rc/darkstyle/transparent.png
new file mode 100644
index 0000000..483df25
Binary files /dev/null and b/Bundles/style/rc/darkstyle/transparent.png differ
diff --git a/Bundles/style/rc/darkstyle/undock.png b/Bundles/style/rc/darkstyle/undock.png
new file mode 100644
index 0000000..88691d7
Binary files /dev/null and b/Bundles/style/rc/darkstyle/undock.png differ
diff --git a/Bundles/style/rc/darkstyle/up_arrow.png b/Bundles/style/rc/darkstyle/up_arrow.png
new file mode 100644
index 0000000..abcc724
Binary files /dev/null and b/Bundles/style/rc/darkstyle/up_arrow.png differ
diff --git a/Bundles/style/rc/darkstyle/up_arrow_disabled.png b/Bundles/style/rc/darkstyle/up_arrow_disabled.png
new file mode 100644
index 0000000..b9c8e3b
Binary files /dev/null and b/Bundles/style/rc/darkstyle/up_arrow_disabled.png differ
diff --git a/Bundles/style/rc/plugin.xml b/Bundles/style/rc/plugin.xml
new file mode 100644
index 0000000..57b8bac
--- /dev/null
+++ b/Bundles/style/rc/plugin.xml
@@ -0,0 +1,2 @@
+<plugin id="style" version="@DASH_VERSION@" >
+</plugin>
diff --git a/CMake/build/config.hpp.in b/CMake/build/config.hpp.in
index 50e9625..494b6f9 100644
--- a/CMake/build/config.hpp.in
+++ b/CMake/build/config.hpp.in
@@ -1,7 +1,17 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __ at PROJECT_NAME_UPCASE@_CONFIG_HPP__
 #define __ at PROJECT_NAME_UPCASE@_CONFIG_HPP__
 
+    // This helps to override the log level when using PCH
+    #if defined(@PROJECT_NAME_UPCASE at _EXPORTS) && !defined(SPYLOG_NO_INCLUDE)
+        #include "spyLogLevel.hpp"
+    #endif
+
     #ifdef _WIN32
 
         #ifdef @PROJECT_NAME_UPCASE at _EXPORTS
diff --git a/CMake/build/pch.cpp b/CMake/build/pch.cpp
new file mode 100644
index 0000000..b29b4b5
--- /dev/null
+++ b/CMake/build/pch.cpp
@@ -0,0 +1,7 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "pch.hpp"
diff --git a/CMake/build/plugin_config.cmake b/CMake/build/plugin_config.cmake
index 0f2fd98..f912fa6 100644
--- a/CMake/build/plugin_config.cmake
+++ b/CMake/build/plugin_config.cmake
@@ -53,17 +53,27 @@ function(plugin_setup ${PROJECT})
         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_]+)\\);")
+        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>")
+
+            if(CMAKE_MATCH_3)
+                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>")
+            else()
+                list(APPEND EXTENSION_LIST "\n    <extension implements=\"::fwServices::registry::ServiceFactory\">"
+                                           "         <type>${SRV_TYPE}</type>"
+                                           "         <service>${SRV_IMPL}</service>"
+                                           "         <desc>${SRV_DESC}</desc>"
+                                           "    </extension>")
+            endif()
         endif()
     endforeach()
     if(EXTENSION_LIST)
diff --git a/CMake/build/spyLogLevel.hpp.in b/CMake/build/spyLogLevel.hpp.in
new file mode 100644
index 0000000..df68470
--- /dev/null
+++ b/CMake/build/spyLogLevel.hpp.in
@@ -0,0 +1,25 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ at PROJECT_NAME_UPCASE@_SPYLOGLEVEL_HPP__
+#define __ at PROJECT_NAME_UPCASE@_SPYLOGLEVEL_HPP__
+
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/comparison/greater_equal.hpp>
+
+// This file is included in 2 different ways whe using PCH:
+// - From the config.hpp, it the compile unit uses a PCH (this it is included at the very beginning)
+// - From the command line, if a PCH is being compiled
+
+// We undef first the macro to remove the definition from the PCH
+// So far indeed, the log level of the PCH was used
+#undef __FWCORE_IF_ENABLED
+
+// Now define the macro with the log level of this target
+#define __FWCORE_IF_ENABLED( level, expr ) \
+    BOOST_PP_EXPR_IIF( BOOST_PP_GREATER_EQUAL(SPYLOG_LEVEL_ at FWPROJECT_NAME@, level), expr)
+
+#endif // __ at PROJECT_NAME_UPCASE@_SPYLOGLEVEL_HPP__
diff --git a/CMake/install/generic_install.cmake b/CMake/install/generic_install.cmake
index 0aaee58..cbf9292 100644
--- a/CMake/install/generic_install.cmake
+++ b/CMake/install/generic_install.cmake
@@ -3,6 +3,8 @@ if(APPLE)
 elseif(WIN32)
     include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/win_install.cmake)
 elseif(UNIX)
+    #Don't use rpath at install step
+    set(CMAKE_SKIP_INSTALL_RPATH ON)
     include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/linux_install.cmake)
 endif()
 
diff --git a/CMake/install/linux/linux_fixup.cmake.in b/CMake/install/linux/linux_fixup.cmake.in
index 124c9cc..cc02a87 100644
--- a/CMake/install/linux/linux_fixup.cmake.in
+++ b/CMake/install/linux/linux_fixup.cmake.in
@@ -1,7 +1,5 @@
 #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@*)
@@ -11,7 +9,9 @@ function(findFwlibsAndBundles FWLIBS_BUNDLES_DIRECTORIES)
         get_filename_component(LIB_DIR "${LIB}" DIRECTORY)
         list(APPEND FOLDERS ${LIB_DIR})
     endforeach()
-    list(REMOVE_DUPLICATES FOLDERS)
+    if(FOLDERS)
+        list(REMOVE_DUPLICATES FOLDERS)
+    endif()
     set(${FWLIBS_BUNDLES_DIRECTORIES} ${FOLDERS} PARENT_SCOPE)
 endfunction()
 
@@ -19,20 +19,20 @@ endfunction()
 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)
+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@)
+list(APPEND FWLIBS_BUNDLES_DIRECTORIES @CMAKE_INSTALL_PREFIX@/lib)
 #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/")
diff --git a/CMake/install/linux/template.sh.in b/CMake/install/linux/template.sh.in
index 6aa3446..7beb266 100644
--- a/CMake/install/linux/template.sh.in
+++ b/CMake/install/linux/template.sh.in
@@ -45,4 +45,4 @@ export LD_LIBRARY_PATH
 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/.."
+exec "$bindir/bin/@LAUNCHER@" "$bundledir/@PROFILE_PATH@" "-B" "$bundledir" "--rwd" "$bindir/"
diff --git a/CMake/install/linux_install.cmake b/CMake/install/linux_install.cmake
index 72f93fe..4ee4311 100644
--- a/CMake/install/linux_install.cmake
+++ b/CMake/install/linux_install.cmake
@@ -14,6 +14,7 @@ endfunction()
 
 #Linux install
 macro(linux_install PRJ_NAME)
+
     if(NOT USE_SYSTEM_LIB)
         findExtLibDir(EXTERNAL_LIBRARIES_DIRECTORIES)
     endif()
@@ -43,19 +44,21 @@ macro(linux_install PRJ_NAME)
         install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/linux_fixup.cmake)
     endif()
 
+    set(CPACK_OUTPUT_FILE_PREFIX packages)
     set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_INSTALL_PREFIX};.") #look inside install dir for packaging
 
-    set(CPACK_PACKAGE_VENDOR "IRCAD")
+    execute_process( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE )
+
+    set(CPACK_PACKAGE_FILE_NAME "${PRJ_NAME}-${VERSION}-linux_${ARCHITECTURE}")
+    set(CPACK_PACKAGE_VENDOR "IRCAD-IHU")
     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 )
+        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PRJ_NAME}_${DASH_VERSION}.sh DESTINATION ${CMAKE_INSTALL_PREFIX} )
     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/")
diff --git a/CMake/modules/PrecompiledHeader.cmake b/CMake/modules/PrecompiledHeader.cmake
new file mode 100644
index 0000000..3450970
--- /dev/null
+++ b/CMake/modules/PrecompiledHeader.cmake
@@ -0,0 +1,437 @@
+# Function for setting up precompiled headers. Usage:
+#
+#   add_library/executable(target
+#       pchheader.c pchheader.cpp pchheader.h)
+#
+#   add_precompiled_header(target pchheader.h
+#       [FORCEINCLUDE]
+#       [SOURCE_C pchheader.c]
+#       [SOURCE_CXX pchheader.cpp])
+#
+# Options:
+#
+#   FORCEINCLUDE: Add compiler flags to automatically include the
+#   pchheader.h from every source file. Works with both GCC and
+#   MSVC. This is recommended.
+#
+#   SOURCE_C/CXX: Specifies the .c/.cpp source file that includes
+#   pchheader.h for generating the pre-compiled header
+#   output. Defaults to pchheader.c. Only required for MSVC.
+#
+# Caveats:
+#
+#   * Its not currently possible to use the same precompiled-header in
+#     more than a single target in the same directory (No way to set
+#     the source file properties differently for each target).
+#
+#   * MSVC: A source file with the same name as the header must exist
+#     and be included in the target (E.g. header.cpp). Name of file
+#     can be changed using the SOURCE_CXX/SOURCE_C options.
+#
+# License:
+#
+# Copyright (C) 2009-2013 Lars Christensen <larsch at belunktum.dk>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the 'Software') deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+include(CMakeParseArguments)
+
+if(ENABLE_PCH)
+    if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+        # We need 3.7 because of DEPFILE in add_custom_command
+        cmake_minimum_required(VERSION 3.7)
+    endif()
+endif()
+
+macro(combine_arguments _variable)
+  set(_result "")
+  foreach(_element ${${_variable}})
+    set(_result "${_result} \"${_element}\"")
+  endforeach()
+  string(STRIP "${_result}" _result)
+  set(${_variable} "${_result}")
+endmacro()
+
+# Hook used to add a dependency on the automoc obj file for each pch target
+function(pch_msvc_hook variable access value current_list_file stack)
+
+    if(NOT CMAKE_PCH_COMPILER_TARGETS)
+        return()
+    endif()
+    list(LENGTH CMAKE_PCH_COMPILER_TARGETS length)
+    foreach(index RANGE -${length} -1)
+        list(GET CMAKE_PCH_COMPILER_TARGETS ${index} target)
+        list(GET CMAKE_PCH_COMPILER_TARGET_FLAGS ${index} flags)
+        set(pch_target ${target}.pch)
+
+        # Find OBJ pch target dependencies
+        get_target_property(DIRINC ${target} INCLUDE_DIRECTORIES)
+        list(APPEND listinc ${DIRINC})
+
+        list(APPEND srcTargets ${target})
+        while(srcTargets)
+            list(GET srcTargets 0 srcTarget)
+            list(APPEND visited ${srcTarget})
+            list(REMOVE_AT srcTargets 0)
+            foreach(depends ${${srcTarget}_DEPENDENCIES})
+                list(APPEND targets ${depends})
+
+                list(FIND visited ${depends} targetFound)
+                if(targetFound EQUAL -1)
+                    list(APPEND srcTargets ${depends})
+                endif()
+
+            endforeach()
+        endwhile()
+
+        if(targets)
+            list(REMOVE_DUPLICATES targets)
+        endif()
+        list(APPEND targets ${target})
+
+        # In the following we configure the object library used to compile the pch
+
+        # 1. Add the same include directories than the regular target
+        foreach(depends ${targets})
+            get_target_property(DIRINC ${depends} INTERFACE_INCLUDE_DIRECTORIES)
+            list(APPEND listinc ${DIRINC})
+        endforeach()
+        target_include_directories(${target}_PCH_OBJ SYSTEM PRIVATE "${listinc}")
+
+        # 2. Add the same compile definitions
+        get_target_property(def ${target} COMPILE_DEFINITIONS)
+        list(APPEND defines ${def})
+
+        # 3. Add the same define symbols
+        get_target_property(def ${target} DEFINE_SYMBOL)
+        list(APPEND defines ${def})
+
+        # 4. Remove symbols that would not defined by other targets using this pch
+        foreach(def ${defines})
+            string(REGEX REPLACE ".*_VER=\"[0-9]-[0-9]\"" "" def1 ${def})
+            if(def1)
+                string(REGEX REPLACE ".*_EXPORTS" "" def2 ${def1})
+                if(def2)
+                    target_compile_definitions(${target}_PCH_OBJ PRIVATE ${def2})
+                endif()
+            endif()
+        endforeach()
+    endforeach()
+
+endfunction()
+
+function(export_all_flags _filename)
+  set(_compile_definitions "$<TARGET_PROPERTY:${_target},COMPILE_DEFINITIONS>")
+  set(_include_directories "$<TARGET_PROPERTY:${_target},INCLUDE_DIRECTORIES>")
+  set(_compile_flags "$<TARGET_PROPERTY:${_target},COMPILE_FLAGS>")
+  set(_compile_options "$<TARGET_PROPERTY:${_target},COMPILE_OPTIONS>")
+  set(_define_symbol "$<TARGET_PROPERTY:${_target},DEFINE_SYMBOL>")
+  set(_include_directories "$<$<BOOL:${_include_directories}>:-isystem$<JOIN:${_include_directories},\n-isystem>\n>")
+  set(_compile_definitions "$<$<BOOL:${_compile_definitions}>:-D$<JOIN:${_compile_definitions},\n-D>\n>")
+  set(_compile_flags "$<$<BOOL:${_compile_flags}>:$<JOIN:${_compile_flags},\n>\n>")
+  set(_compile_options "$<$<BOOL:${_compile_options}>:$<JOIN:${_compile_options},\n>\n>")
+  set(_define_symbol "$<$<BOOL:${_define_symbol}>:-D$<JOIN:${_define_symbol},\n-D>\n>")
+  file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}${_define_symbol}\n")
+endfunction()
+
+function(assign_precompiled_header _target _pch _pch_header)
+
+    # Iterate over all source files and request pch usage
+    get_property(_sources TARGET ${_target} PROPERTY SOURCES)
+    foreach(_source ${_sources})
+        set(_pch_compile_flags "")
+
+        if(_source MATCHES \\.\(cc|cxx|cpp\)$)
+            get_source_file_property(_pch_compile_flags "${_source}" COMPILE_FLAGS)
+            if(NOT _pch_compile_flags)
+                set(_pch_compile_flags)
+            endif()
+            separate_arguments(_pch_compile_flags)
+            list(APPEND _pch_compile_flags -Winvalid-pch)
+            if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+                list(APPEND _pch_compile_flags -include-pch "${_pch}")
+            else()
+                list(INSERT _pch_compile_flags 0 -include "${_pch_header}" )
+            endif()
+
+            get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+            if(NOT _object_depends)
+                set(_object_depends)
+            endif()
+            list(APPEND _object_depends "${_pch}")
+
+            combine_arguments(_pch_compile_flags)
+            set_source_files_properties(${_source} PROPERTIES
+                COMPILE_FLAGS "${_pch_compile_flags}"
+                OBJECT_DEPENDS "${_object_depends}")
+        endif()
+    endforeach()
+
+endfunction()
+
+macro(add_precompiled_header_cpp _target)
+
+    # Add an "object" library to compile the pch
+    # That allows to share the pch, targets using this pch can then link with the pch.obj thanks to this fake library
+    # This also help us to remove some unwanted compile definitions (see pch_msvc_hook function)
+    add_library(${_target}_PCH_OBJ OBJECT "${FWCMAKE_RESOURCE_PATH}/build/pch.cpp")
+    set_target_properties(${_target}_PCH_OBJ PROPERTIES COMPILE_PDB_OUTPUT_DIRECTORY
+        "${CMAKE_BINARY_DIR}/${_target}/CMakeFiles/${_target}.dir/")
+endmacro()
+
+function(add_precompiled_header _target _input)
+  cmake_parse_arguments(_PCH "FORCEINCLUDE" "SOURCE_CXX:SOURCE_C" "" ${ARGN})
+
+  if(MSVC)
+    get_filename_component(_input_we ${_input} NAME_WE)
+    get_filename_component(_input_pch ${_input} NAME)
+
+    set(_PCH_SOURCE_CXX "${FWCMAKE_RESOURCE_PATH}/build/pch.cpp")
+
+    set(_cxx_path "${CMAKE_CURRENT_BINARY_DIR}/include/${_target}")
+    make_directory("${_cxx_path}")
+    set(_pch_cxx_header "${CMAKE_CURRENT_SOURCE_DIR}/include/${_target}/pch.hpp")
+    set(_pch_cxx_pch "${_cxx_path}/${_input_we}.pch")
+    set(_pch_cxx_pdb "${_cxx_path}/${_input_we}.pdb")
+
+    # Iterate over all source files and request pch usage
+    get_target_property(sources ${_target} SOURCES)
+    foreach(_source ${sources})
+        set(_pch_compile_flags "")
+        if(_source MATCHES \\.\(cc|cxx|cpp\)$)
+
+            set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_cxx_pch}\" /Yu${_input}")
+            set_source_files_properties("${_source}" PROPERTIES OBJECT_DEPENDS "${_pch_cxx_pch}")
+            # Force the include of the PCH on every source file
+            set(_pch_compile_flags "${_pch_compile_flags} /FI${_input}")
+
+            get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+            if(NOT _object_depends)
+                set(_object_depends)
+            endif()
+
+            list(APPEND _object_depends "${_pch_cxx_header}")
+
+            set_source_files_properties(${_source} PROPERTIES
+                COMPILE_FLAGS "${_pch_compile_flags}"
+                OBJECT_DEPENDS "${_object_depends}")
+        endif()
+    endforeach()
+
+    # Iterate over the pch source file and compile the pch
+    get_target_property(sources ${_target}_PCH_OBJ SOURCES)
+    foreach(_source ${sources})
+        set(_pch_compile_flags "")
+        if(_source STREQUAL "${_PCH_SOURCE_CXX}")
+            set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_cxx_pch}\" /Yc${_input_pch} \
+                                    \"/I${CMAKE_CURRENT_SOURCE_DIR}\\include\\${_target}\" \
+                                    \"/FI${CMAKE_CURRENT_BINARY_DIR}\\include\\${_target}\\spyLogLevel.hpp\"")
+            set(_pch_source_cxx_found TRUE)
+            set_source_files_properties("${_source}" PROPERTIES OBJECT_OUTPUTS "${_pch_cxx_pch}")
+
+            get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+            if(NOT _object_depends)
+                set(_object_depends)
+            endif()
+
+            list(APPEND _object_depends "${_pch_cxx_header}")
+
+            set_source_files_properties(${_source} PROPERTIES
+                COMPILE_FLAGS "${_pch_compile_flags}"
+                OBJECT_DEPENDS "${_object_depends}")
+        endif()
+    endforeach()
+
+    # Add this target to process in pch_msvc_hook
+    # Indeed at this point all compile definitions and include directories may be not set yet
+    list(APPEND CMAKE_PCH_COMPILER_TARGETS ${_target})
+    set(CMAKE_PCH_COMPILER_TARGETS "${CMAKE_PCH_COMPILER_TARGETS}" PARENT_SCOPE)
+
+    if(NOT _pch_source_cxx_found)
+      message(FATAL_ERROR "A source file ${_PCH_SOURCE_CXX} for ${_input} is required for MSVC builds. Can be set with the SOURCE_CXX option.")
+    endif()
+  endif(MSVC)
+
+  if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+    get_filename_component(_name ${_input} NAME)
+    set(_pch_header "${CMAKE_CURRENT_SOURCE_DIR}/${_input}")
+    set(_pch_binary_dir "${CMAKE_CURRENT_BINARY_DIR}")
+    set(_pchfile "${_pch_binary_dir}/${_input}")
+
+    if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+        set(_outdir "${_pchfile}.pch")
+    else()
+        set(_outdir "${_pchfile}.gch")
+
+        target_include_directories(${_target} PRIVATE ${_pch_binary_dir}/include/${_target})
+    endif()
+    set(_output_cxx "${_outdir}")
+
+    # we use a response file to pass most compiler flags
+    set(_pch_response_file "compile_flags.rsp")
+    set(_pch_flags_file "${_pch_binary_dir}/${_pch_response_file}")
+    export_all_flags("${_pch_flags_file}.in")
+    set(_compiler_FLAGS "@${_pch_flags_file}")
+
+    if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
+        set(CXXFLAGS "${CMAKE_CXX_FLAGS}")
+        string(APPEND CXXFLAGS " ${CMAKE_CXX_FLAGS_DEBUG}")
+    else()
+        set(CXXFLAGS "${CMAKE_CXX_FLAGS}")
+        string(APPEND CXXFLAGS " ${CMAKE_CXX_FLAGS_RELEASE}")
+    endif()
+    separate_arguments(CXXFLAGS)
+
+    # hopelessly these guys don't manage to get passed by the global CMake switch, add them manually
+    list(APPEND CXXFLAGS "-std=gnu++11" "-fPIC")
+
+    # Hacky custom command to remove the custom defines that would prevent from sharing the pch
+    # and they should be useless anyway
+    add_custom_command(
+      OUTPUT "${_pch_flags_file}"
+      COMMAND sed 's/"/\\\\"/g' ${_pch_response_file}.in | sed '/_VER=\\\|_EXPORTS/d' > ${_pch_flags_file}
+      DEPENDS "${_pch_flags_file}.in"
+      COMMENT "Fixing ${_pch_flags_file}")
+
+    if(${CMAKE_GENERATOR} STREQUAL "Ninja")
+      # Ninja generator does not support IMPLICIT_DEPENDS, thus we have to use an another way to get correct
+      # dependencies so that the pch is recompiled when one of its include file changes.
+      # We generate the dependencies file manually with the compiler
+      file(RELATIVE_PATH relative_output_cxx "${CMAKE_BINARY_DIR}" "${_output_cxx}")
+
+      add_custom_command(
+        OUTPUT "${_pch_binary_dir}/pch.d"
+        COMMAND "${CMAKE_CXX_COMPILER}" ${_compiler_FLAGS} ${CXXFLAGS} -M -MF "${_pch_binary_dir}/pch.d.in" "${_pch_header}"
+        COMMAND sed 's|^pch\.o|${relative_output_cxx}|' "${_pch_binary_dir}/pch.d.in" > "${_pch_binary_dir}/pch.d"
+        DEPENDS "${_pch_header}" "${_pch_flags_file}"
+        COMMENT "Generating pch deps file for ${_target} (PCH)")
+      add_custom_command(
+        OUTPUT "${_output_cxx}"
+        COMMAND "${CMAKE_CXX_COMPILER}" ${_compiler_FLAGS} -x c++-header  -include "${_target}/spyLogLevel.hpp" -o "${_output_cxx}" "${_pch_header}" ${CXXFLAGS}
+        DEPENDS "${_pch_header}" "${_pch_flags_file}" "${_pch_binary_dir}/pch.d"
+        DEPFILE "${_pch_binary_dir}/pch.d"
+        COMMENT "Precompiling ${_name} for ${_target} (PCH)")
+    else()
+      add_custom_command(
+        OUTPUT "${_output_cxx}"
+        COMMAND "${CMAKE_CXX_COMPILER}" ${_compiler_FLAGS} -x c++-header  -include "${_target}/spyLogLevel.hpp" -o "${_output_cxx}" "${_pch_header}" ${CXXFLAGS}
+        DEPENDS "${_pch_header}" "${_pch_flags_file}"
+        IMPLICIT_DEPENDS CXX "${_pch_header}"
+        COMMENT "Precompiling ${_name} for ${_target} (PCH)")
+    endif()
+
+    assign_precompiled_header(${_target} ${_output_cxx} pch.hpp)
+  endif()
+endfunction()
+
+function(use_precompiled_header _target _input)
+    cmake_parse_arguments(_PCH "FORCEINCLUDE" "SOURCE_CXX:SOURCE_C" "" ${ARGN})
+
+    if(MSVC)
+        if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
+            if(MSVC14)
+                set(INPUT_PDB_NAME "vc140.pdb")
+            elseif(MSVC12)
+                set(INPUT_PDB_NAME "vc120.pdb")
+            endif()
+
+            file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${_input}/CMakeFiles/${_input}.dir/${INPUT_PDB_NAME}" INPUT_PDB_FILE)
+            file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/${_target}/CMakeFiles/${_target}.dir/" OUTPUT_PDB_PATH)
+
+            # Copy the pdb from the library where the pch belongs to the library using the pch
+            # We need to do that otherwise cl.exe miss the debugging symbols of the pdb and fails
+            add_custom_target(
+                ${_target}_pdbCopy
+                COMMAND xcopy /D /Y ${INPUT_PDB_FILE} ${OUTPUT_PDB_PATH}
+                DEPENDS ${${_target}_DEPENDENCIES} ${_input}
+                )
+            add_dependencies( ${_target} ${_target}_pdbCopy)
+        endif()
+
+        target_include_directories(${_target} PRIVATE "${${_input}_PROJECT_DIR}/include/${_input}" )
+
+        set(_pch_header "${${_input}_PROJECT_DIR}/include/${_input}/pch.hpp")
+        set(_pch_binary_dir "${CMAKE_BINARY_DIR}")
+        set(_cxx_path "${_pch_binary_dir}/${_input}/include/${_input}")
+        set(_pch_cxx_pch "${_cxx_path}/pch.pch")
+
+        # Iterate over all source files and request pch usage
+        get_target_property(sources ${_target} SOURCES)
+        foreach(_source ${sources})
+            set(_pch_compile_flags "")
+            if(_source MATCHES \\.\(cc|cxx|cpp\)$)
+
+                set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_cxx_pch}\" /Yu${_pch_header}")
+                set_source_files_properties("${_source}" PROPERTIES OBJECT_DEPENDS "${_pch_cxx_pch}")
+                # Force the include of the PCH on every source file
+                set(_pch_compile_flags "${_pch_compile_flags} /FI${_pch_header}")
+
+                get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+                if(NOT _object_depends)
+                    set(_object_depends)
+                endif()
+
+                list(APPEND _object_depends "${_pch_header}")
+
+                set_source_files_properties(${_source}  PROPERTIES
+                                                        COMPILE_FLAGS "${_pch_compile_flags}"
+                                                        OBJECT_DEPENDS "${_object_depends}")
+            endif()
+        endforeach()
+
+        # Add the SPYLOG_LEVEL of the source pch target
+        # It will not be used but this makes the compiler happy
+        get_target_property(_pch_compile_definitions ${${_target}_PCH_TARGET} COMPILE_DEFINITIONS)
+        foreach(def ${_pch_compile_definitions})
+            if("${def}" MATCHES "SPYLOG_LEVEL_")
+                target_compile_definitions(${_target} PRIVATE ${def})
+            endif()
+        endforeach()
+    endif(MSVC)
+
+    if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+        set(_pch_header "pch.hpp")
+        set(_pch_binary_dir "${CMAKE_BINARY_DIR}")
+        set(_pchfile "${_pch_binary_dir}/${_input}/include/${_input}/pch.hpp")
+
+        if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+            set(_outdir "${_pchfile}.pch")
+        else()
+            set(_outdir "${_pchfile}.gch")
+
+            # Add the location of the pch as an include directory
+            target_include_directories(${_target} PRIVATE ${_pch_binary_dir}/${_input}/include/${_input} )
+
+            # Add the SPYLOG_LEVEL of the source pch target
+            # It will not be used but this makes the compiler happy
+            get_target_property(_input_compile_definitions ${_input} COMPILE_DEFINITIONS)
+            foreach(def ${_input_compile_definitions})
+                if("${def}" MATCHES "SPYLOG_LEVEL_")
+                    target_compile_definitions(${_target} PRIVATE ${def})
+                endif()
+            endforeach()
+        endif()
+        set(_output_cxx "${_outdir}")
+
+        assign_precompiled_header(${_target} ${_output_cxx} ${_pch_header})
+
+    endif()
+endfunction()
diff --git a/CMake/modules/fw-Qt5.cmake b/CMake/modules/fw-Qt5.cmake
index 01e5135..0bec78f 100644
--- a/CMake/modules/fw-Qt5.cmake
+++ b/CMake/modules/fw-Qt5.cmake
@@ -1,3 +1,2 @@
-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/CMakeLists.txt b/CMakeLists.txt
index 2c732a2..caa3af9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,6 +11,15 @@ 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)
+include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/modules/PrecompiledHeader.cmake)
+
+
+if(MSVC)
+    if(NOT DEFINED CMAKE_PCH_COMPILER_TARGETS)
+        # this will be executed in just before makefile generation
+        variable_watch(CMAKE_BACKWARDS_COMPATIBILITY pch_msvc_hook)
+    endif()
+endif(MSVC)
 
 set(BUILD_SHARED_LIBS ON)
 if (NOT CMAKE_BUILD_TYPE)
@@ -41,6 +50,23 @@ else()
     endif()
 endif()
 
+set(ENABLE_PCH ON CACHE BOOL "Use pre-compiled headers to speedup the compilation")
+
+# Append our 'FindPackages.cmake' to CMAKE_MODULE_PATH
+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})
+
+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)
+
+endif()
+
 
 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)")
@@ -69,7 +95,15 @@ if(ADDITIONAL_PROJECTS)
     endforeach()
 endif()
 
-set(BUNDLE_PREFIX "Bundles")
+
+if(ANDROID)
+    set(BUNDLE_PREFIX "/data/data/com.fw4spl.${PROJECTS_TO_INSTALL}/Bundles")
+elseif(DEBIAN_INSTALL)
+    #To make a debian package we should install our bundle in /usr/share/...
+    set(BUNDLE_PREFIX "share/Bundles")
+else()
+    set(BUNDLE_PREFIX "Bundles")
+endif()
 
 # Set warning level and function export visibility on Unix
 if(UNIX)
@@ -81,18 +115,16 @@ if(UNIX)
     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")
+        #Color output for gcc > 4.9
+        elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.99")
+            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color")
+            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color")
         endif()
     endif()
 endif()
@@ -235,7 +267,7 @@ macro(configureProject FWPROJECT_NAME PROJECT_VERSION)
 
     set_target_properties(${FWPROJECT_NAME} PROPERTIES DEFINE_SYMBOL ${PROJECT_NAME_UPCASE}_EXPORTS)
 
-    add_definitions(-D${PROJECT_NAME_UPCASE}_VER="${DASH_VERSION}")
+    target_compile_definitions(${FWPROJECT_NAME} PRIVATE ${PROJECT_NAME_UPCASE}_VER="${DASH_VERSION}")
 
     get_target_property(TARGET_TYPE ${FWPROJECT_NAME} TYPE)
 
@@ -251,7 +283,14 @@ macro(configureProject FWPROJECT_NAME PROJECT_VERSION)
     mark_as_advanced(SPYLOG_LEVEL_${FWPROJECT_NAME})
 
     if( SPYLOG_LEVEL_MAP_${SPYLOG_LEVEL_${FWPROJECT_NAME}} )
-        add_definitions(-DSPYLOG_LEVEL=${SPYLOG_LEVEL_MAP_${SPYLOG_LEVEL_${FWPROJECT_NAME}}})
+        if(ENABLE_PCH AND (${TARGET_TYPE} MATCHES "LIBRARY" OR ${TARGET_TYPE} MATCHES "BUNDLE" ))
+            target_compile_definitions(${FWPROJECT_NAME}
+                PRIVATE SPYLOG_LEVEL_${FWPROJECT_NAME}=${SPYLOG_LEVEL_MAP_${SPYLOG_LEVEL_${FWPROJECT_NAME}}})
+        else()
+            target_compile_definitions(${FWPROJECT_NAME}
+                PRIVATE SPYLOG_LEVEL=${SPYLOG_LEVEL_MAP_${SPYLOG_LEVEL_${FWPROJECT_NAME}}}
+                PRIVATE SPYLOG_NO_INCLUDE=1)
+        endif()
     else()
         message(SEND_ERROR "${SPYLOG_LEVEL_${FWPROJECT_NAME}} is not a valid value for SPYLOG_LEVEL_${FWPROJECT_NAME}" )
     endif()
@@ -265,16 +304,16 @@ macro(createResourcesTarget TARGET RES_DIR TARGET_DIR)
     set(CREATED_RESOURCES_LIST)
     foreach(RESOURCE_FILE ${RESOURCES_FILES})
         file(RELATIVE_PATH REL_PATH "${RES_DIR}" "${RESOURCE_FILE}")
-        if ("${TARGET_DIR}/${REL_PATH}" MATCHES "^.*\\.(txt|xml)$")
+        if ("${TARGET_DIR}/${REL_PATH}" MATCHES "^.*\\.(txt|xml|cfg)$")
             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
+                             -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()
@@ -435,10 +474,19 @@ macro(fwLib FWPROJECT_NAME PROJECT_VERSION)
 
     setVersion(${FWPROJECT_NAME} ${PROJECT_VERSION})
 
-    add_library(${FWPROJECT_NAME} ${ARGN} ${${FWPROJECT_NAME}_HEADERS}
-               ${${FWPROJECT_NAME}_SOURCES}
-               ${${FWPROJECT_NAME}_RC_FILES}
-               ${${FWPROJECT_NAME}_CMAKE_FILES})
+    if(ENABLE_PCH AND MSVC)
+        if(${${FWPROJECT_NAME}_PCH_TARGET} STREQUAL ${FWPROJECT_NAME})
+            add_precompiled_header_cpp(${FWPROJECT_NAME})
+        endif()
+        set(${FWPROJECT_NAME}_PCH_LIB $<TARGET_OBJECTS:${${FWPROJECT_NAME}_PCH_TARGET}_PCH_OBJ>)
+    endif()
+
+    add_library(${FWPROJECT_NAME} ${ARGN}
+        ${${FWPROJECT_NAME}_HEADERS}
+        ${${FWPROJECT_NAME}_SOURCES}
+        ${${FWPROJECT_NAME}_RC_FILES}
+        ${${FWPROJECT_NAME}_CMAKE_FILES}
+        ${${FWPROJECT_NAME}_PCH_LIB})
 
     configureProject( ${FWPROJECT_NAME} ${PROJECT_VERSION} )
 
@@ -475,6 +523,22 @@ macro(fwLib FWPROJECT_NAME PROJECT_VERSION)
     # Adds project into folder lib
     set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "lib")
 
+    if(ENABLE_PCH)
+        # create the config.hpp for the current library
+        configure_file(
+            "${CMAKE_SOURCE_DIR}/CMake/build/spyLogLevel.hpp.in"
+            "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/${FWPROJECT_NAME}/spyLogLevel.hpp"
+            IMMEDIATE @ONLY)
+
+        if(${${FWPROJECT_NAME}_PCH_TARGET} STREQUAL ${FWPROJECT_NAME})
+            add_precompiled_header(${FWPROJECT_NAME} include/${FWPROJECT_NAME}/pch.hpp)
+            message(STATUS "Use custom precompiled header")
+        else()
+            use_precompiled_header(${FWPROJECT_NAME} ${${FWPROJECT_NAME}_PCH_TARGET})
+            message(STATUS "Use ${${FWPROJECT_NAME}_PCH_TARGET} precompiled header")
+        endif()
+    endif()
+
     fwLibExtra()
 
 endmacro()
@@ -485,14 +549,22 @@ macro(fwBundle FWPROJECT_NAME PROJECT_VERSION)
     set(${FWPROJECT_NAME}_TYPE ${${FWPROJECT_NAME}_TYPE} PARENT_SCOPE)
     setVersion(${FWPROJECT_NAME} ${PROJECT_VERSION})
 
+    if(ENABLE_PCH AND MSVC)
+        if(${${FWPROJECT_NAME}_PCH_TARGET} STREQUAL ${FWPROJECT_NAME})
+            add_precompiled_header_cpp(${FWPROJECT_NAME})
+        endif()
+        set(${FWPROJECT_NAME}_PCH_LIB $<TARGET_OBJECTS:${${FWPROJECT_NAME}_PCH_TARGET}_PCH_OBJ>)
+    endif()
+
     set(BUNDLE_DIR "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}")
 
     if(EXISTS "${PRJ_SOURCE_DIR}/src")
-        add_library( ${FWPROJECT_NAME} SHARED ${ARGN}
+        add_library(${FWPROJECT_NAME} ${ARGN}
             ${${FWPROJECT_NAME}_HEADERS}
             ${${FWPROJECT_NAME}_SOURCES}
             ${${FWPROJECT_NAME}_RC_FILES}
-            ${${FWPROJECT_NAME}_CMAKE_FILES})
+            ${${FWPROJECT_NAME}_CMAKE_FILES}
+            ${${FWPROJECT_NAME}_PCH_LIB})
 
         configureProject( ${FWPROJECT_NAME} ${PROJECT_VERSION} )
 
@@ -524,6 +596,22 @@ macro(fwBundle FWPROJECT_NAME PROJECT_VERSION)
             IMMEDIATE @ONLY)
 
         target_include_directories(${FWPROJECT_NAME} PUBLIC "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/")
+
+        if(ENABLE_PCH)
+            # create the config.hpp for the current library
+            configure_file(
+                "${CMAKE_SOURCE_DIR}/CMake/build/spyLogLevel.hpp.in"
+                "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/${FWPROJECT_NAME}/spyLogLevel.hpp"
+                IMMEDIATE @ONLY)
+
+            if(${${FWPROJECT_NAME}_PCH_TARGET} STREQUAL ${FWPROJECT_NAME})
+                add_precompiled_header(${FWPROJECT_NAME} include/${FWPROJECT_NAME}/pch.hpp)
+                message(STATUS "Use custom precompiled header")
+            else()
+                use_precompiled_header(${FWPROJECT_NAME} ${${FWPROJECT_NAME}_PCH_TARGET})
+                message(STATUS "Use ${${FWPROJECT_NAME}_PCH_TARGET} precompiled header")
+            endif()
+        endif()
     else()
         add_custom_target(${FWPROJECT_NAME} SOURCES
             ${${FWPROJECT_NAME}_RC_FILES}
@@ -698,6 +786,25 @@ function(findTests FWPROJECTS RESULT_VAR)
     set(${RESULT_VAR} ${RESULT} PARENT_SCOPE)
 endfunction()
 
+function(getPchTarget FWPROJECT_NAME PROJECT_DIR TYPE)
+
+    if(ARGN)
+        # Use pch from an another target
+        set(${FWPROJECT_NAME}_PCH_TARGET ${ARGN} PARENT_SCOPE)
+    elseif(EXISTS "${PROJECT_DIR}/include/${FWPROJECT_NAME}/pch.hpp")
+        # Custom pch
+        set(${FWPROJECT_NAME}_PCH_TARGET ${FWPROJECT_NAME} PARENT_SCOPE)
+    else()
+        # Default pch
+        if( TYPE STREQUAL "BUNDLE" )
+            set(${FWPROJECT_NAME}_PCH_TARGET pchServices PARENT_SCOPE)
+        else()
+            set(${FWPROJECT_NAME}_PCH_TARGET pchCore PARENT_SCOPE)
+        endif()
+    endif()
+
+endfunction()
+
 macro(loadProperties PROPERTIES_FILE)
     unset(NAME)
     unset(OPTIONS)
@@ -709,6 +816,7 @@ macro(loadProperties PROPERTIES_FILE)
     unset(CPPUNITTEST_OPTIONS)
     unset(UNIQUE)
     unset(PLATFORM)
+    unset(USE_PCH_FROM_TARGET)
 
     include("${PROPERTIES_FILE}")
 endmacro()
@@ -774,25 +882,23 @@ macro(addProject PROJECT)
     unset(PROJECT_CACHE)
 endmacro()
 
+# Parsing of 'fw-*.cmake' scripts
 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()
+
 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()
 
 
@@ -855,8 +961,23 @@ foreach(PROPERTIES_FILE ${PROJECTS_PROPERTIES})
             message(FATAL_ERROR "${PROPERTIES_FILE}: A project NAME must be unique in the workspace. ${NAME} already defined there : ${${NAME}_DIR}")
         endif()
 
+        string( TOUPPER "${TYPE}" TYPE )
+
         set(${NAME}_DEPENDENCIES "${DEPENDENCIES}")
         set(${NAME}_REQUIREMENTS "${REQUIREMENTS}")
+
+        # Get the pch target, test the existence of type variable to exclude unbuilt projects
+        if(ENABLE_PCH AND TYPE)
+            set(${NAME}_PROJECT_DIR "${PROJECT_DIR}")
+
+            getPchTarget(${NAME} ${PROJECT_DIR} ${TYPE} ${USE_PCH_FROM_TARGET})
+
+            # Append the pch target as a dependency (duplicate will be stripped later if it was already a dependency)
+            if(NOT ${${NAME}_PCH_TARGET} STREQUAL ${NAME})
+                list(APPEND ${NAME}_REQUIREMENTS ${${NAME}_PCH_TARGET})
+            endif()
+        endif()
+
         set(${NAME}_VERSION "${VERSION}")
         set(${NAME}_DIR "${PROJECT_DIR}")
 
diff --git a/README.md b/README.md
index b0c9534..218ad0c 100644
--- a/README.md
+++ b/README.md
@@ -7,25 +7,25 @@ Description
 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.
+See [documentation](http://fw4spl.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).
+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.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)
+See how to install fw4spl [here](http://fw4spl.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
+* **documentation**: http://fw4spl.readthedocs.org/
+* **tutorials**: http://fw4spl.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/
 
diff --git a/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml b/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml
index a7963d5..05b05d0 100644
--- a/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml
+++ b/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml
@@ -474,6 +474,9 @@ Comment: Name inside the drawing are the uid of the service defined below.
             <start uid="fieldMgr" />
             <start uid="IHM" />
 
+            <!-- Deferred start -->
+            <start uid="TFEditor" />
+
         </config>
     </extension>
 
diff --git a/Samples/Examples/Ex02ImageMix/rc/plugin.xml b/Samples/Examples/Ex02ImageMix/rc/plugin.xml
index 65c4068..2413265 100644
--- a/Samples/Examples/Ex02ImageMix/rc/plugin.xml
+++ b/Samples/Examples/Ex02ImageMix/rc/plugin.xml
@@ -153,11 +153,11 @@
                 <item key="compositeVisu">
                     <object uid="compositeVisu" type="::fwData::Composite">
 
-                        <service uid="updaterBackImgUID" impl="::ctrlSelection::updater::SObjFromUid" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                        <service uid="updaterBackImgUID" impl="::ctrlSelection::SManage" autoConnect="no">
                             <uid>backgroundImageUID</uid>
                             <compositeKey>backgroundImage</compositeKey>
                         </service>
-                        <service uid="updaterFrontImgUID" impl="::ctrlSelection::updater::SObjFromUid" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                        <service uid="updaterFrontImgUID" impl="::ctrlSelection::SManage" autoConnect="no">
                             <uid>frontImageUID</uid>
                             <compositeKey>frontImage</compositeKey>
                         </service>
diff --git a/Samples/Examples/Ex03Registration/Properties.cmake b/Samples/Examples/Ex03Registration/Properties.cmake
index 3ad87e2..e219825 100644
--- a/Samples/Examples/Ex03Registration/Properties.cmake
+++ b/Samples/Examples/Ex03Registration/Properties.cmake
@@ -25,9 +25,9 @@ set( REQUIREMENTS
     ctrlSelection
     uiMeasurement
     uiMeasurementQt
-    appXml
+    appXml2
     basicRegistration
     ioAtoms
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES Ex03RegistrationConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES Ex03RegistrationConfig)
diff --git a/Samples/Examples/Ex03Registration/rc/plugin.xml b/Samples/Examples/Ex03Registration/rc/plugin.xml
index 4a0280b..61aa15f 100644
--- a/Samples/Examples/Ex03Registration/rc/plugin.xml
+++ b/Samples/Examples/Ex03Registration/rc/plugin.xml
@@ -41,7 +41,7 @@ Regsitration Tab selected
 
 Detail of the ToolBar
 =======================================================================================================================================
-| actionOpenFile | actionOpenMesh1 | actionOpenMesh2 | ActionNewLandmarkPL1 | ActionNewLandmarkPL2 | TransformAction | RegisterAction |                                                               |
+| actionOpenFile | actionOpenMesh1 | actionOpenMesh2 | ActionNewLandmarkPL1 | ActionNewLandmarkPL2 | RegisterAction |                                                               |
 =======================================================================================================================================
 
 
@@ -52,8 +52,6 @@ Detail of the ToolBar
  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@" >
 
@@ -61,12 +59,24 @@ Detail of the ToolBar
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <id>Ex03RegistrationConfig</id>
         <config>
-           <object type="::fwData::Composite">
+            <!-- Object to store the image loading in the first tab -->
+             <object uid="myImage" type="::fwData::Image" />
+
+             <object uid="meshOnNegato1" type="::fwData::Mesh" />
+             <object uid="meshOnNegato2" type="::fwData::Mesh" />
+
+            <!-- Object to store the point put in the first tab -->
+            <object uid="pointList1" type="::fwData::PointList" />
+            <!-- Object to store the point put in the second tab -->
+            <object uid="pointList2" type="::fwData::PointList" />
 
-            <service uid="mainFrame" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+            <!-- Object to store the registration matrix -->
+            <object uid="registrationMatrix" type="::fwData::TransformationMatrix3D" />
+
+            <service uid="mainFrame" type="::gui::frame::SDefaultFrame" >
                 <gui>
                     <frame>
                         <name>Ex03Registration</name>
@@ -78,7 +88,7 @@ Detail of the ToolBar
                 </registry>
             </service>
 
-            <service uid="mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+            <service uid="mainView" type="::gui::view::SDefaultView" >
                 <gui>
                     <layout type="::fwGui::CardinalLayoutManager">
                         <view caption="Negato1" align="center" />
@@ -90,8 +100,9 @@ Detail of the ToolBar
                     <view sid="multiView" start="yes" />
                 </registry>
             </service>
+
             <!-- service which create a toolbar -->
-            <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
+            <service uid="toolBar" type="::gui::aspect::SDefaultToolBar" >
                 <gui>
                     <layout>
                         <menuItem name="Load Image" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/icon-load1.png" />
@@ -102,7 +113,6 @@ Detail of the ToolBar
                         <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>
@@ -113,14 +123,13 @@ Detail of the ToolBar
                     <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">
+            <service uid="multiView" type="::gui::view::SDefaultView" >
                 <gui>
                     <layout type="::fwGui::TabLayoutManager" >
                         <view caption="Point List 1" selected="yes" />
@@ -136,7 +145,7 @@ Detail of the ToolBar
             </service>
 
             <!-- NEGATO 1 VIEW  (Content of the first Tab)-->
-            <service uid="multiView_negato1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+            <service uid="multiView_negato1" type="::gui::view::SDefaultView" >
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -149,7 +158,8 @@ Detail of the ToolBar
                     <view sid="multiView_negato1_bottom" start="yes" />
                 </registry>
             </service>
-            <service uid="multiView_negato1_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+
+            <service uid="multiView_negato1_bottom" type="::gui::view::SDefaultView" >
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="horizontal" />
@@ -159,224 +169,190 @@ Detail of the ToolBar
                 </gui>
                 <registry>
                     <view sid="snapshotNegato1Editor" start="yes" />
-                    <view sid="slider_negato1" start="no" />
+                    <view sid="sliderNegato1" start="no" />
                 </registry>
             </service>
-            <service uid="snapshotNegato1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no"/>
+
+            <service uid="snapshotNegato1Editor" type="::uiVisu::SnapshotEditor" />
 
             <!-- Action to load an image in the Tab 1 (Point list 1)-->
-            <service uid="actionOpenFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+            <service uid="actionOpenFile" type="::gui::action::SStarter" >
                 <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">
+            <service uid="actionOpenMesh1" type="::gui::action::SStarter" >
                 <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">
+            <service uid="actionOpenMesh2" type="::gui::action::SStarter" >
                 <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">
+            <service uid="RegisterAction" type="::gui::action::SStarter" >
                 <start uid="PLRegistration" />
             </service>
 
             <!-- Action to do Quit -->
-            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
-
+            <service uid="actionQuit" type="::gui::action::SQuit"  />
 
             <!-- 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 which compute the registration -->
+            <service uid="PLRegistration" type="::basicRegistration::SPointListRegistration" >
+                <inout key="registeredPL" uid="pointList2" />
+                <inout key="referencePL" uid="pointList1" />
+                <inout key="output" uid="registrationMatrix" />
+            </service>
+
+            <!-- Generic Scene (Negato) for the first tab -->
+            <service uid="negato1" type="::fwRenderVTK::SRender" autoConnect="yes">
+                <in key="image" uid="myImage" />
+                <in key="meshOnNegato" uid="meshOnNegato1" />
+                <in key="pointList" uid="pointList1" />
+                <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="image">
+                        <config renderer="default" picker="negato1default" slices="3" sliceIndex="axial" useColorTF="no" />
+                    </adaptor>
+
+                    <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="negato1default" text="" />
+                    </adaptor>
+
+                    <adaptor id="MeshOnNegato1" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato">
+                        <config renderer="default" picker="negato1default" />
+                    </adaptor>
+
+                    <adaptor id="pl1" class="::visuVTKAdaptor::LabeledPointList" objectId="pointList">
+                        <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" type="::fwRenderVTK::SRender" autoConnect="yes">
+                <in key="meshOnNegato" uid="meshOnNegato2" />
+                <in key="pointList" uid="pointList2" />
+                <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="meshOnNegato">
+                        <config renderer="default" picker="negato2default" />
+                    </adaptor>
+
+                    <adaptor id="pl2" class="::visuVTKAdaptor::LabeledPointList" objectId="pointList">
+                        <config renderer="default" picker="negato2default" />
+                    </adaptor>
+
+                </scene>
+            </service>
+
+            <!-- Generic Scene (Negato) for the Third tab -->
+            <service uid="negato3" type="::fwRenderVTK::SRender" autoConnect="yes">
+                <in key="image" uid="myImage" />
+                <in key="meshOnNegato1" uid="meshOnNegato1" />
+                <in key="meshOnNegato2" uid="meshOnNegato2" />
+                <in key="registrationMatrix" uid="registrationMatrix" />
+                <scene>
+
+                    <picker id="negato3default" vtkclass="fwVtkCellPicker" />
+
+                    <renderer id="default" background="0.0" />
+
+                    <vtkObject id="vtkRegisterMatrix" class="vtkTransform" />
 
-                    <service uid="TransformMesh" type="::fwServices::IController" impl="::basicRegistration::STransformMesh" autoConnect="no"/>
+                    <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                        <config renderer="default" style="InteractorStyle3DForNegato" />
+                    </adaptor>
 
-                    <!-- Generic Scene (Negato) for the first tab -->
-                    <service uid="negato1" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
-                        <scene>
-                            <picker id="negato1default" vtkclass="fwVtkCellPicker" />
+                    <adaptor id="Tool" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato2">
+                        <config renderer="default" transform="vtkRegisterMatrix" />
+                    </adaptor>
 
-                            <renderer id="default" background="0.0" />
+                    <adaptor id="Tool2" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato1">
+                        <config renderer="default" transform="vtkRegisterMatrix" />
+                    </adaptor>
 
-                            <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                                <config renderer="default" />
-                            </adaptor>
+                    <adaptor id="MPRNegato3" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                        <config renderer="default" picker="negato3default" slices="3" sliceIndex="axial" useColorTF="no" />
+                    </adaptor>
 
-                            <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
-                                <config renderer="default" style="InteractorStyle3DForNegato" />
-                            </adaptor>
+                    <adaptor id="MatrixAdaptor" class="::visuVTKAdaptor::Transform" objectId="registrationMatrix">
+                        <config renderer="default" picker="" transform="vtkRegisterMatrix" />
+                    </adaptor>
 
-                            <adaptor id="MPRNegato1" class="::visuVTKAdaptor::NegatoMPR" objectId="myImage">
-                                <config renderer="default" picker="negato1default" slices="3" sliceIndex="axial" useColorTF="no" />
-                            </adaptor>
+                </scene>
+            </service>
+
+            <service uid="medicalImageSrv" type="::ctrlSelection::MedicalImageSrv">
+                <inout key="image" uid="myImage" />
+            </service>
 
-                            <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="myImage">
-                                <config renderer="default" picker="negato1default" text="" />
-                            </adaptor>
+            <service uid="readerPathFile" type="::uiIO::editor::SIOSelector" >
+                <in key="image" uid="myImage" />
+                <type mode="reader" />
+                <selection mode="exclude" />
+                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+            </service>
 
-                            <adaptor id="MeshOnNegato1" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato1">
-                                <config renderer="default" picker="negato1default" />
-                            </adaptor>
+            <!-- Editors for Negato1 -->
+            <service uid="sliderNegato1" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                <inout key="target" uid="myImage" />
+                <sliceIndex>axial</sliceIndex>
+            </service>
 
-                            <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>
+            <service uid="meshReader1" type="::uiIO::editor::SIOSelector"  >
+                <inout key="target" uid="meshOnNegato1" />
+                <type mode="reader" />
+                <selection mode="exclude" />
+                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+            </service>
 
+            <service uid="meshReader2" type="::uiIO::editor::SIOSelector"  >
+                <inout key="target" uid="meshOnNegato2" />
+                <type mode="reader" />
+                <selection mode="exclude" />
+                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+            </service>
+
+            <service uid="ActionNewLandmarkPL1" type="::uiMeasurement::action::SAddLabeledPoint" >
+                <inout key="pointList" uid="pointList1" />
+            </service>
+
+            <service uid="ActionNewLandmarkPL2" type="::uiMeasurement::action::SAddLabeledPoint" >
+                <inout key="pointList" uid="pointList2" />
+            </service>
 
             <!-- START AND STOP SERVICES -->
             <start uid="mainFrame" />
-            <start uid="MedicalImageSrv" />
-            <start uid="slider_negato1" />
+            <start uid="medicalImageSrv" />
+            <start uid="sliderNegato1" />
 
-        </object>
-    </config>
+        </config>
     </extension>
 </plugin>
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp
index 899464d..f3fcaf4 100644
--- a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp
@@ -4,14 +4,17 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include "Tuto02DataServiceBasicCtrl/Plugin.hpp"
+
+#include "fwServices/IService.hpp"
+#include "fwServices/registry/ServiceFactory.hpp"
+
 #include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
 #include <fwServices/op/Add.hpp>
 #include <fwServices/registry/AppConfig.hpp>
 
-#include "Tuto02DataServiceBasicCtrl/Plugin.hpp"
-
 
 namespace Tuto02DataServiceBasicCtrl
 {
@@ -45,13 +48,16 @@ void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
     // Reader service
     m_readerSrv = ::fwServices::add(m_image, "::io::IReader", "::ioVTK::SImageReader");
     ::fwServices::IService::ConfigType readerCfg;
-    readerCfg.put("service.file", "./TutoData/patient1.vtk");
+    readerCfg.put("service.file", "../../data/patient1.vtk");
     m_readerSrv->setConfiguration( readerCfg );
     m_readerSrv->configure();
 
     // Render service
-    m_renderSrv = ::fwServices::add(m_image, "::fwRender::IRender", "::vtkSimpleNegato::SRenderer",
-                                    "myRenderingTuto");
+
+    m_renderSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( "::fwRender::IRender",
+                                                                                "::vtkSimpleNegato::SRenderer" );
+    ::fwServices::OSR::registerService( m_image, "image", ::fwServices::IService::AccessType::INPUT, m_renderSrv );
+    m_renderSrv->setID( "myRenderingTuto" );
     m_renderSrv->configure();
 
     // Frame service
@@ -59,7 +65,7 @@ void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
 
     ::fwServices::IService::ConfigType frameConfig;
 
-    frameConfig.put("service.gui.frame.name", "tutoDataServiceBasic");
+    frameConfig.put("service.gui.frame.name", "tutoDataServiceBasicCtrl");
     frameConfig.put("service.gui.frame.icon", std::string(
                         BUNDLE_PREFIX) + "/Tuto02DataServiceBasicCtrl_0-1/tuto.ico");
     frameConfig.put("service.gui.frame.minSize.<xmlattr>.width", "800");
diff --git a/Samples/Tutorials/Tuto03DataService/Properties.cmake b/Samples/Tutorials/Tuto03DataService/Properties.cmake
index 1cc3f36..3be0d3a 100644
--- a/Samples/Tutorials/Tuto03DataService/Properties.cmake
+++ b/Samples/Tutorials/Tuto03DataService/Properties.cmake
@@ -11,11 +11,10 @@ set( REQUIREMENTS
     io
     ioVTK
     uiIO # contains services to show dialogs for reader/writer selection
-    visuVTK
     visuVTKQt
     vtkSimpleNegato
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoDataServiceConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoDataServiceConfig)
diff --git a/Samples/Tutorials/Tuto03DataService/rc/plugin.xml b/Samples/Tutorials/Tuto03DataService/rc/plugin.xml
index 06e8c66..dd48462 100644
--- a/Samples/Tutorials/Tuto03DataService/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto03DataService/rc/plugin.xml
@@ -5,122 +5,124 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <id>tutoDataServiceConfig</id>
         <config>
 
             <!-- The root data object in tutoDataService is a ::fwData::Image. -->
-            <object type="::fwData::Image">
+            <object uid="image" 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>
+            <!-- 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" type="::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 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" type="::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.
+            <!--
+                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>
+                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" type="::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" />
+            <!--
+                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" type="::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>
+            <!--
+                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" type="::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" />
+            <!--
+                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" type="::uiIO::editor::SIOSelector" >
+                <inout key="target" uid="image" />
+            </service>
 
-                <!--
-                    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" />
+            <!--
+                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" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+                <in key="image" uid="image" />
+            </service>
 
-                <!--
-                    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>
+            <!--
+                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" />
 
         </config>
     </extension>
diff --git a/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake b/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake
index 659c790..c4f226b 100644
--- a/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake
+++ b/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake
@@ -11,11 +11,10 @@ set( REQUIREMENTS
     io
     ioVTK
     uiIO
-    visuVTK
     visuVTKQt
     vtkSimpleMesh # contains a visualization service of mesh.
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoSignalSlotConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoSignalSlotConfig)
diff --git a/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml b/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml
index c86a3b1..ab41e90 100644
--- a/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml
@@ -4,126 +4,131 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <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>
+            <object uid="mesh" type="::fwData::Mesh" />
+
+            <service uid="myFrame" type="::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" type="::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" type="::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" type="::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" type="::gui::action::SStarter">
+                <start uid="myReaderPathFile" />
+            </service>
+
+            <service uid="actionQuit" type="::gui::action::SQuit" />
+
+            <service uid="myReaderPathFile" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="mesh" />
+                <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" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+                <in key="mesh" uid="mesh" />
+            </service>
+            <service uid="myRendering2" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+                <in key="mesh" uid="mesh" />
+            </service>
+            <service uid="myRendering3" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+                <in key="mesh" uid="mesh" />
+            </service>
+
+            <!--
+                Each 3D scene owns a 3D camera that can be moved by clicking in the scene.
+                - When the camera move, a signal 'camUpdated' is emitted with the new camera information (position,
+                focal, view up).
+                - To update the camera without clicking, you could call 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" />
 
         </config>
     </extension>
diff --git a/Samples/Tutorials/Tuto05Mesher/Properties.cmake b/Samples/Tutorials/Tuto05Mesher/Properties.cmake
index 0395e47..1fcfc24 100644
--- a/Samples/Tutorials/Tuto05Mesher/Properties.cmake
+++ b/Samples/Tutorials/Tuto05Mesher/Properties.cmake
@@ -10,14 +10,13 @@ set( REQUIREMENTS
     guiQt
     io
     ioVTK
-    visuVTK
     visuVTKQt
     uiIO
     vtkSimpleNegato
     vtkSimpleMesh
     opVTKMesh # provides services to generate a mesh from an image.
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES MesherConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES MesherConfig)
diff --git a/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml b/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml
index 9f88488..b457085 100644
--- a/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml
@@ -4,176 +4,162 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <id>MesherConfig</id>
         <config>
 
+            <!-- Mesh object associated to the uid 'myMesh' -->
+            <object uid="myMesh" type="::fwData::Mesh" />
+
+            <!-- Image object associated to the key 'myImage' -->
+            <object uid="myImage" type="::fwData::Image" />
+
+            <!-- Frame & View -->
+
+            <service uid="myFrame" type="::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>
 
             <!--
-                The main data object is ::fwData::Composite.
-                A Composite, can contains sub-objects associated to a key.
+                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.
             -->
-            <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>
+            <service uid="myDefaultView" type="::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" type="::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" type="::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" type="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Compute Mesh (VTK)" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="actionCreateVTKMesh" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="actionQuit" type="::gui::action::SQuit" />
+
+            <service uid="actionOpenImageFile" type="::gui::action::SStarter">
+                <start uid="readerPathImageFile" />
+            </service>
+
+            <service uid="actionSaveImageFile" type="::gui::action::SStarter">
+                <start uid="writerImageFile" />
+            </service>
+
+            <service uid="actionOpenMeshFile" type="::gui::action::SStarter">
+                <start uid="readerPathMeshFile" />
+            </service>
+
+            <service uid="actionSaveMeshFile" type="::gui::action::SStarter">
+                <start uid="writerMeshFile" />
+            </service>
+
+            <service uid="actionCreateVTKMesh" type="::opVTKMesh::action::SMeshCreation">
+                <in key="image" uid="myImage" />
+                <inout key="mesh" uid="myMesh" />
+                <percentReduction value="0" />
+            </service>
+
+            <!--
+                Services associated to the Image data :
+                Visualization, reading and writing service creation.
+            -->
+            <service uid="RenderingImage" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+                <in key="image" uid="myImage" />
+            </service>
+
+            <service uid="readerPathImageFile" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="myImage" />
+                <type mode="reader" />
+            </service>
+
+            <service uid="writerImageFile" type="::uiIO::editor::SIOSelector">
+                <in key="target" uid="myImage" />
+                <type mode="writer" />
+            </service>
+
+            <!--
+                Services associated to the Mesh data :
+                Visualization, reading and writing service creation.
+            -->
+            <service uid="RenderingMesh" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+                <in key="mesh" uid="myMesh" />
+            </service>
+
+            <service uid="readerPathMeshFile" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="myMesh" />
+                <type mode="reader" />
+            </service>
+
+            <service uid="writerMeshFile" type="::uiIO::editor::SIOSelector">
+                <in key="target" uid="myMesh" />
+                <type mode="writer" />
+            </service>
+
+            <start uid="myFrame" />
 
         </config>
     </extension>
diff --git a/Samples/Tutorials/Tuto06Filter/Properties.cmake b/Samples/Tutorials/Tuto06Filter/Properties.cmake
index e4142a2..c3b78ab 100644
--- a/Samples/Tutorials/Tuto06Filter/Properties.cmake
+++ b/Samples/Tutorials/Tuto06Filter/Properties.cmake
@@ -11,12 +11,11 @@ set( REQUIREMENTS
     io
     ioVTK
     uiIO
-    visuVTK
     visuVTKQt
     vtkSimpleNegato
     opImageFilter # bundle containing the action to performs a threshold
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES FilterConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES FilterConfig)
diff --git a/Samples/Tutorials/Tuto06Filter/rc/plugin.xml b/Samples/Tutorials/Tuto06Filter/rc/plugin.xml
index 3ac46be..45a2cc8 100644
--- a/Samples/Tutorials/Tuto06Filter/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto06Filter/rc/plugin.xml
@@ -4,126 +4,122 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <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>
+            <object uid="myImage1" type="::fwData::Image" />
+            <object uid="myImage2" type="::fwData::Image" />
+
+            <!-- Windows & Main Menu -->
+            <service uid="myFrame" type="::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" type="::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" type="::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" type="::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" type="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Compute Image Filter" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="actionImageFilter" start="yes" />
+                </registry>
+            </service>
+
+            <!-- Actions -->
+            <service uid="actionQuit" type="::gui::action::SQuit" />
+            <service uid="actionOpenImageFile" type="::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" type="::opImageFilter::action::SThreshold">
+                <in key="source" uid="myImage1" />
+                <inout key="target" uid="myImage2" />
+            </service>
+
+            <!-- Image declaration: -->
+
+            <!--
+                1st Image of the composite:
+                This is the source image for the filtering.
+            -->
+            <service uid="RenderingImage1" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+                <in key="image" uid="myImage1" />
+            </service>
+
+            <service uid="readerPathImageFile" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="myImage1" />
+                <type mode="reader" />
+            </service>
+
+            <!--
+                2nd Image of the composite:
+                This is the output image for the filtering.
+            -->
+            <service uid="RenderingImage2" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+                <in key="image" uid="myImage2" />
+            </service>
+
+            <start uid="myFrame" />
 
         </config>
     </extension>
diff --git a/Samples/Tutorials/Tuto08GenericScene/Properties.cmake b/Samples/Tutorials/Tuto08GenericScene/Properties.cmake
index 559fca5..d108d67 100644
--- a/Samples/Tutorials/Tuto08GenericScene/Properties.cmake
+++ b/Samples/Tutorials/Tuto08GenericScene/Properties.cmake
@@ -15,11 +15,10 @@ set( REQUIREMENTS
     uiIO
     uiVisuQt # contains several editors for visualization
     uiImageQt # contains several editors on image
-    visuVTK
     visuVTKQt
     visuVTKAdaptor # contains adaptors for the generic scene
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES Tuto08GenericScene)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES Tuto08GenericScene)
diff --git a/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml b/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml
index e0386ee..b2c1305 100644
--- a/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml
@@ -8,281 +8,273 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-
-    <extension implements="::fwServices::registry::AppConfig">
+    <extension implements="::fwServices::registry::AppConfig2">
         <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>
+            <object uid="imageUID" type="::fwData::Image" />
+            <object uid="meshUID" type="::fwData::Mesh" />
+            <object uid="textureUID" type="::fwData::Image" />
+
+            <service uid="ihm" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>Tuto08GenericScene</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto08GenericScene_0-1/tuto.ico</icon>
+                    </frame>
+                    <menuBar />
+                </gui>
+                <registry>
+                    <menuBar sid="menuBar" start="yes" />
+                    <view sid="mainView" start="yes" />
+                </registry>
+            </service>
+
+            <!-- Status bar used to display the progress bar for reading -->
+            <service uid="progressBar" type="::gui::editor::SJobBar" />
+
+            <service uid="menuBar" 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 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="actionOpenImage" start="yes" />
+                    <menuItem sid="actionOpenMesh" start="yes" />
+                    <menuItem sid="actionOpenTexture" start="yes" />
+                    <menuItem sid="actionQuit" start="yes" />
+                </registry>
+            </service>
+
+            <!-- Actions to call readers -->
+            <service uid="actionOpenImage" type="::gui::action::SStarter">
+                <start uid="imageReader" />
+            </service>
+            <service uid="actionOpenMesh" type="::gui::action::SStarter">
+                <start uid="meshReader" />
+            </service>
+            <service uid="actionOpenTexture" type="::gui::action::SStarter">
+                <start uid="textureReader" />
+            </service>
+
+            <!-- Quit action -->
+            <service uid="actionQuit" type="::gui::action::SQuit" />
+
+            <!-- main view -->
+            <service uid="mainView" type="::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" 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>
+
+            <!--
+                Editor used for scene snapshot:
+                It allows to select the snapshot filename and emits a "snapped" signal with this path.
+            -->
+            <service uid="snapshotScene1Editor" type="::uiVisu::SnapshotEditor" />
+
+            <!--
+                Generic scene:
+                This scene display a 3D image and a textured mesh.
+            -->
+            <service uid="genericScene" type="::fwRenderVTK::SRender" autoConnect="yes">
+                <inout key="image" uid="imageUID" />
+                <inout key="mesh" uid="meshUID" />
+                <inout key="textureImage" uid="textureUID" />
+                <scene>
+                    <!-- Image picker -->
+                    <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+                    <!-- Renderer -->
+                    <renderer id="default" background="0.0" />
+
+                    <!-- Mesh adaptor -->
+                    <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>
+                        <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>
+                        <signal>sliceListEditor/selected</signal>
+                        <slot>imageAdaptorUID/updateSliceMode</slot>
+                    </connect>
+
+                </scene>
+            </service>
+
+
+            <!-- *************************************************
+                                Displayed objects
+                ************************************************* -->
+
+            <!-- Image displayed in the scene -->
+            <service uid="imageReader" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="imageUID" />
+                <type mode="reader" />
+            </service>
+
+            <!--
+                Generic editor representing a menu button.
+                It send signal with the current selected item.
+            -->
+            <service uid="sliceListEditor" type="::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" 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>
+
+            <!-- Editor representing a slider to navigate into image slices -->
+            <service uid="sliderIndexEditor" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                <inout key="image" uid="imageUID" />
+                <sliceIndex>axial</sliceIndex>
+            </service>
+
+            <!-- texture reader -->
+            <service uid="textureReader" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="textureUID" />
+                <type mode="reader" />
+            </service>
+
+            <!-- Mesh reader -->
+            <service uid="meshReader" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="meshUID" />
+                <type mode="reader" />
+            </service>
+
+            <!-- Connects readers to status bar service -->
+            <connect>
+                <signal>meshReader/jobCreated</signal>
+                <slot>progressBar/showJob</slot>
+            </connect>
+
+            <connect>
+                <signal>imageReader/jobCreated</signal>
+                <slot>progressBar/showJob</slot>
+            </connect>
+
+            <connect>
+                <signal>textureReader/jobCreated</signal>
+                <slot>progressBar/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="ihm" />
+            <start uid="progressBar" />
 
         </config>
     </extension>
diff --git a/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml b/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml
index 1444740..81b84a4 100644
--- a/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml
@@ -288,6 +288,10 @@
             <start uid="updaterReconstUID" />
             <start uid="medicaImageConverter" />
 
+            <!-- Deferred start -->
+            <start uid="representationEditor" />
+            <start uid="organMaterialEditor" />
+
         </config>
     </extension>
 
diff --git a/Samples/Tutorials/Tuto15Multithread/Properties.cmake b/Samples/Tutorials/Tuto15Multithread/Properties.cmake
index e3cea21..84c34fc 100644
--- a/Samples/Tutorials/Tuto15Multithread/Properties.cmake
+++ b/Samples/Tutorials/Tuto15Multithread/Properties.cmake
@@ -12,11 +12,10 @@ set( REQUIREMENTS
     ioData
     ioVTK
     uiIO
-    visuVTK
     visuVTKQt
     vtkSimpleMesh
     fwlauncher
-    appXml
+    appXml2
 )
 
-bundleParam(appXml PARAM_LIST config PARAM_VALUES tuto15MultithreadConfig)
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tuto15MultithreadConfig)
diff --git a/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml b/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml
index fdf9cfe..74696e7 100644
--- a/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml
+++ b/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml
@@ -1,135 +1,136 @@
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <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>
+        <object uid="mesh" type="::fwData::Mesh" />
+
+        <service uid="frame" type="::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="menuBar" start="yes" />
+                <view sid="view" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="menuBar" type="::gui::aspect::SDefaultMenuBar">
+            <gui>
+                <layout>
+                    <menu name="File" />
+                    <menu name="Deformation" />
+                </layout>
+            </gui>
+            <registry>
+                <menu sid="fileMenu" start="yes" />
+                <menu sid="deformationMenu" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="view" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="1" />
+                    <view proportion="1" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="rendering1" start="yes" />
+                <view sid="rendering2" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="fileMenu" type="::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="openFileAction" start="yes" />
+                <menuItem sid="quitAction" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="deformationMenu" type="::gui::aspect::SDefaultMenu">
+            <gui>
+                <layout>
+                    <menuItem name="Start deformation" shortcut="Ctrl+D" />
+                    <menuItem name="Stop deformation" shortcut="Ctrl+F" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="startDeformationAction" start="yes" />
+                <menuItem sid="stopDeformationAction" start="yes" />
+            </registry>
+        </service>
+
+
+        <service uid="openFileAction" type="::gui::action::SStarter">
+            <start uid="reader" />
+        </service>
+
+        <service uid="quitAction" type="::gui::action::SQuit" />
+
+        <service uid="startDeformationAction" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>meshDeformation/startDeformation</slot>
+            </slots>
+        </service>
+
+        <service uid="stopDeformationAction" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>meshDeformation/stopDeformation</slot>
+            </slots>
+        </service>
+
+        <service uid="reader" type="::uiIO::editor::SIOSelector">
+            <inout key="target" uid="mesh" />
+            <type mode="reader" />
+        </service>
+
+        <!-- Visualization service for the first window. -->
+        <service uid="rendering1" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+            <in key="mesh" uid="mesh" />
+        </service>
+
+        <!-- Visualization service for the second window -->
+        <service uid="rendering2" type="::vtkSimpleMesh::SRenderer" autoConnect="yes" >
+            <in key="mesh" uid="mesh" />
+        </service>
+
+        <!--
+            Mesh deformation service:
+            This service runs a deformation method in another worker.
+            This method is called every 200 milliseconds.
+        -->
+        <service uid="meshDeformation" type="::vtkSimpleMesh::SSimpleMeshDeformation" worker="DEFORMATION_WORKER" >
+            <inout key="mesh" uid="mesh" />
+        </service>
+
+        <!-- Connect the signal slot of the service to receive the updating of camera position -->
+        <connect>
+            <signal>rendering1/camUpdated</signal>
+            <slot>rendering2/updateCamPosition</slot>
+        </connect>
+
+        <connect>
+            <signal>rendering2/camUpdated</signal>
+            <slot>rendering1/updateCamPosition</slot>
+        </connect>
+
+        <start uid="frame" />
+        <start uid="meshDeformation" />
 
     </config>
 </extension>
diff --git a/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml b/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml
index 0f53bb2..71ecb73 100644
--- a/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml
+++ b/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml
@@ -4,7 +4,6 @@
     <requirement id="servicesReg" />
     <requirement id="visuVTKQt" />
 
-
     <xi:include href="configurations/config.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     
 </plugin>
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
index a44dba0..2562409 100644
--- a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
@@ -1,10 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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>
@@ -12,7 +13,6 @@
 #include <fwCore/spyLog.hpp>
 
 #include <fwData/Array.hpp>
-#include <fwData/Object.hpp>
 
 #include <fwRuntime/profile/Profile.hpp>
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
@@ -70,6 +70,8 @@ void Plugin::uninitialize() throw()
     SLM_TRACE_FUNC();
 }
 
+//------------------------------------------------------------------------------
+
 int Plugin::run() throw()
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
@@ -129,7 +131,6 @@ int Plugin::run() throw()
 
     OSLM_INFO("Done computing " << count << " square roots : " << d);
 
-
     // Disconnect the signals and slots
     showConnection.disconnect();
     incrementConnection.disconnect();
@@ -156,5 +157,4 @@ int Plugin::run() throw()
     return 0;
 }
 
-
 } // namespace Tuto15MultithreadCtrl
diff --git a/SrcLib/core/fwActivities/Properties.cmake b/SrcLib/core/fwActivities/Properties.cmake
index fde61c3..282a72a 100644
--- a/SrcLib/core/fwActivities/Properties.cmake
+++ b/SrcLib/core/fwActivities/Properties.cmake
@@ -4,3 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore fwData fwDataCamp fwMath fwMedData fwRuntime fwTools )
 set( REQUIREMENTS  )
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp
index 80bd26d..26a84fa 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@
 #ifndef __FWACTIVITIES_BUILDER_FACTORY_NEW_HPP__
 #define __FWACTIVITIES_BUILDER_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
-#include "fwActivities/config.hpp"
 #include "fwActivities/builder/registry/detail.hpp"
+#include "fwActivities/config.hpp"
+
+#include <string>
 
 namespace fwActivities
 {
@@ -25,7 +22,6 @@ namespace builder
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -56,4 +52,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWACTIVITIES_BUILDER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp
index 8b3316e..d318d0f 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWACTIVITIES_VALIDATOR_FACTORY_NEW_HPP__
 #define __FWACTIVITIES_VALIDATOR_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwActivities/config.hpp"
 #include "fwActivities/validator/registry/detail.hpp"
 
+#include <string>
+
 namespace fwActivities
 {
 
@@ -25,7 +22,6 @@ namespace validator
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -57,4 +53,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWACTIVITIES_VALIDATOR_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp b/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp
index 9792f0b..58610f4 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2015-2017.
  * 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 @@
 #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/algorithm/string/replace.hpp>
 #include <boost/regex.hpp>
 
 namespace fwActivities
@@ -23,8 +23,8 @@ namespace registry
 
 //-----------------------------------------------------------------------------
 
-ActivityMsg::ActivityMsg(const ::fwMedData::ActivitySeries::sptr &series,
-                         const ::fwActivities::registry::ActivityInfo & info,
+ActivityMsg::ActivityMsg(const ::fwMedData::ActivitySeries::sptr& series,
+                         const ::fwActivities::registry::ActivityInfo& info,
                          const ParametersType& parameters)
 {
     SLM_ASSERT("ActivitySeries instantiation failed", series);
@@ -94,7 +94,7 @@ ActivityMsg::ActivityMsg(const ::fwMedData::ActivitySeries::sptr &series,
         else
         {
             std::string parameterToReplace = param.by;
-            if (parameterToReplace.substr(0,1) == "!")
+            if (parameterToReplace.substr(0, 1) == "!")
             {
                 parameterToReplace.replace(0, 1, "@");
             }
@@ -106,7 +106,7 @@ ActivityMsg::ActivityMsg(const ::fwMedData::ActivitySeries::sptr &series,
 
             std::string parameterValue = obj->getID();
 
-            if(stringParameter && param.by.substr(0,1) == "!")
+            if(stringParameter && param.by.substr(0, 1) == "!")
             {
                 parameterValue = stringParameter->getValue();
             }
diff --git a/SrcLib/core/fwActivities/test/Properties.cmake b/SrcLib/core/fwActivities/test/Properties.cmake
index 816a469..60a2505 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 fwData fwMedData fwActivities fwRuntime fwTest)
+set( DEPENDENCIES fwCore fwData fwMedData fwActivities fwRuntime fwTest fwDataCamp fwMedDataCamp)
 set( REQUIREMENTS  )
 set(CPPUNITTEST_OPTIONS WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp b/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp
index f00f6a6..730021d 100644
--- a/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp
+++ b/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp
@@ -19,12 +19,13 @@
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/Vector.hpp>
 
+#include <fwDataCamp/Version.hpp>
+
 #include <fwMedData/ActivitySeries.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/ModelSeries.hpp>
 
-#include <fwMedData/ImageSeries.hpp>
-#include <fwMedData/ModelSeries.hpp>
+#include <fwMedDataCamp/Version.hpp>
 
 #include <fwRuntime/Bundle.hpp>
 #include <fwRuntime/Extension.hpp>
@@ -46,7 +47,14 @@ namespace ut
 
 void DefaultActivityTest::setUp()
 {
-    // Set up context before running a test.
+    //Force link with fwDataCamp, it is used by the validator to parse the objects
+    static const int fwDataCampVersion = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(fwDataCampVersion);
+
+    //Force link with fwMedDataCamp, it is used by the validator to parse the objects
+    static const int fwMedDataCampVersion = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(fwMedDataCampVersion);
+
     // 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);
diff --git a/SrcLib/core/fwAtomConversion/CMakeLists.txt b/SrcLib/core/fwAtomConversion/CMakeLists.txt
index 1169074..a16777b 100644
--- a/SrcLib/core/fwAtomConversion/CMakeLists.txt
+++ b/SrcLib/core/fwAtomConversion/CMakeLists.txt
@@ -1,3 +1,3 @@
 fwLoadProperties()
 
-
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwAtomConversion/Properties.cmake b/SrcLib/core/fwAtomConversion/Properties.cmake
index 5abae15..f1d61a9 100644
--- a/SrcLib/core/fwAtomConversion/Properties.cmake
+++ b/SrcLib/core/fwAtomConversion/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME fwAtomConversion )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtoms fwCamp fwCore fwData fwDataCamp fwMemory fwTools )
+set( DEPENDENCIES
+    fwAtoms
+    fwCamp
+    fwCore
+    fwData
+    fwMedData
+    fwDataCamp
+    fwMedDataCamp
+    fwMemory
+    fwTools
+)
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp_ext/ValueMapper.hpp
similarity index 66%
rename from SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp
rename to SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp_ext/ValueMapper.hpp
index 234e3f0..d062146 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp_ext/ValueMapper.hpp
@@ -1,16 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#ifndef __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__
-#define __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__
-#include <camp/valuemapper.hpp>
+#ifndef __FWATOMCONVERSION_CAMP_EXT_VALUEMAPPER_HPP__
+#define __FWATOMCONVERSION_CAMP_EXT_VALUEMAPPER_HPP__
 #include <fwAtoms/Blob.hpp>
+
 #include <fwMemory/BufferObject.hpp>
 
+#include <camp/valuemapper.hpp>
+
 namespace camp_ext
 {
 
@@ -22,36 +23,50 @@ struct ValueMapper< ::fwAtoms::Blob::sptr >
 
     static const int type = camp::userType;
 
+    //------------------------------------------------------------------------------
+
     static const  ::fwMemory::BufferObject::sptr to(const ReturnType& source)
     {
         return source->getBufferObject();
     }
 
+    //------------------------------------------------------------------------------
+
     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)
     {
         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)
     {
         ::fwMemory::BufferObject::sptr tmp = source.get< ::fwMemory::BufferObject::sptr>()->getSptr();
@@ -61,5 +76,4 @@ struct ValueMapper< ::fwAtoms::Blob::sptr >
 
 }
 
-
-#endif /* __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__ */
+#endif /* __FWATOMCONVERSION_CAMP_EXT_VALUEMAPPER_HPP__ */
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/AttachmentSeries.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/AttachmentSeries.hpp
new file mode 100644
index 0000000..684fe55
--- /dev/null
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/AttachmentSeries.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 __FWATOMCONVERSION_MAPPER_ATTACHMENTSERIES_HPP__
+#define __FWATOMCONVERSION_MAPPER_ATTACHMENTSERIES_HPP__
+
+
+#include "fwAtomConversion/AtomVisitor.hpp"
+#include "fwAtomConversion/config.hpp"
+#include "fwAtomConversion/mapper/Base.hpp"
+
+namespace fwAtoms
+{
+class Object;
+}
+
+namespace fwData
+{
+class Object;
+}
+
+namespace fwAtomConversion
+{
+namespace mapper
+{
+
+/**
+ * @brief Specific mapper used to convert a ::fwMedData::AttachmentSeries.
+ */
+class FWATOMCONVERSION_CLASS_API AttachmentSeries : public Base
+{
+public:
+
+    /**
+     * @brief Convert a ::fwData::Object to a ::fwAtoms::Object.
+     * @param object data to convert. It must be a ::fwMedData::AttachmentSeries.
+     * @param cache  cache to register the data already converted, used when a data is referenced multiple times.
+     */
+    FWATOMCONVERSION_API virtual SPTR(::fwAtoms::Object) convert ( SPTR(::fwData::Object) object,
+                                                                   DataVisitor::AtomCacheType & cache );
+
+    /**
+     * @brief Convert a ::fwAtoms::Object to a ::fwData::Object (which represent a ::fwMedData::AttachmentSeries).
+     * @param atom atom to convert
+     * @param cache  cache to register the atoms already converted, used when an atom is referenced multiple times.
+     * @param uuidPolicy AtomVisitor policy
+     */
+    FWATOMCONVERSION_API virtual SPTR(::fwData::Object) convert ( SPTR(::fwAtoms::Object) atom,
+                                                                  AtomVisitor::DataCacheType & cache,
+                                                                  const AtomVisitor::IReadPolicy &uuidPolicy
+                                                                  );
+
+};
+
+} // namespace mapper
+} // namespace fwAtomConversion
+
+#endif /*  __FWATOMCONVERSION_MAPPER_ATTACHMENTSERIES_HPP__*/
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp
index ca4df21..be2b24d 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWATOMCONVERSION_MAPPER_FACTORY_NEW_HPP__
 #define __FWATOMCONVERSION_MAPPER_FACTORY_NEW_HPP__
 
-#include <string>
-
-#include <fwTools/macros.hpp>
-
 #include "fwAtomConversion/config.hpp"
 #include "fwAtomConversion/mapper/registry/detail.hpp"
 
+#include <string>
+
 namespace fwAtomConversion
 {
 namespace mapper
@@ -29,7 +27,6 @@ template<class CLASSNAME > SPTR( CLASSNAME ) New();
 FWATOMCONVERSION_API SPTR(::fwAtomConversion::mapper::Base) New(
     const ::fwAtomConversion::mapper::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME ) New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >();
@@ -42,4 +39,3 @@ template<class CLASSNAME > SPTR( CLASSNAME ) New()
 
 #endif /* __FWATOMCONVERSION_MAPPER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/pch.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/pch.hpp
new file mode 100644
index 0000000..d5dc8af
--- /dev/null
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/pch.hpp
@@ -0,0 +1,14 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWATOMCONVERSION_PCH_HPP__
+#define __FWATOMCONVERSION_PCH_HPP__
+
+#include <fwAtoms/Object.hpp>
+
+#include <boost/graph/named_graph.hpp>
+
+#endif // __FWATOMCONVERSION_PCH_HPP__
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
index e095fc0..ddccb06 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
@@ -1,29 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwCamp/factory/new.hpp>
+#include "fwAtomConversion/AtomToDataMappingVisitor.hpp"
 
-#include <fwData/Object.hpp>
+#include "fwAtomConversion/DataVisitor.hpp"
+#include "fwAtomConversion/camp_ext/ValueMapper.hpp"
+#include "fwAtomConversion/convert.hpp"
+#include "fwAtomConversion/exception/ConversionNotManaged.hpp"
+#include "fwAtomConversion/mapper/Base.hpp"
 
 #include <fwAtoms/Blob.hpp>
-#include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/Map.hpp>
 #include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Map.hpp>
 #include <fwAtoms/Numeric.hpp>
 #include <fwAtoms/Numeric.hxx>
-#include "fwAtomConversion/camp/ValueMapper.hpp"
+#include <fwAtoms/Sequence.hpp>
 
-#include "fwAtomConversion/AtomToDataMappingVisitor.hpp"
-#include "fwAtomConversion/DataVisitor.hpp"
-#include "fwAtomConversion/mapper/Base.hpp"
-#include "fwAtomConversion/camp/ValueMapper.hpp"
-#include "fwAtomConversion/convert.hpp"
-#include "fwAtomConversion/exception/ConversionNotManaged.hpp"
+#include <fwCamp/factory/new.hpp>
+
+#include <fwData/Object.hpp>
+
+#include <fwMemory/BufferObject.hpp>
 
 namespace fwAtomConversion
 {
@@ -38,25 +38,33 @@ public:
     ::camp::UserObject & m_campDataObj;
     const camp::SimpleProperty& m_property;
 
-    NumericSimplePropertyVisitor( const ::fwAtoms::Numeric::sptr & typedAtom,
-                                  ::camp::UserObject & campDataObj,
+    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
+    //------------------------------------------------------------------------------
+
+    void operator()( ::boost::blank& ) const
     {
         m_property.set( m_campDataObj, m_typedAtom->getString() );
     }
 
-    void operator()( const ::boost::blank & ) const
+    //------------------------------------------------------------------------------
+
+    void operator()( const ::boost::blank& ) const
     {
         m_property.set( m_campDataObj, m_typedAtom->getString() );
     }
 
+    //------------------------------------------------------------------------------
+
     template <typename U>
-    void operator()( U & value ) const
+    void operator()( U& value ) const
     {
         m_property.set( m_campDataObj, value );
     }
@@ -73,15 +81,20 @@ public:
     const camp::ArrayProperty& m_property;
     unsigned int m_index;
 
-    NumericArrayPropertyVisitor( const ::fwAtoms::Numeric::sptr & typedAtom,
-                                 ::camp::UserObject & campDataObj,
+    NumericArrayPropertyVisitor( const ::fwAtoms::Numeric::sptr& typedAtom,
+                                 ::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
+    //------------------------------------------------------------------------------
+
+    void operator()( ::boost::blank& ) const
     {
         if( m_property.dynamic() )
         {
@@ -93,7 +106,9 @@ public:
         }
     }
 
-    void operator()( const ::boost::blank & ) const
+    //------------------------------------------------------------------------------
+
+    void operator()( const ::boost::blank& ) const
     {
         if( m_property.dynamic() )
         {
@@ -105,8 +120,10 @@ public:
         }
     }
 
+    //------------------------------------------------------------------------------
+
     template <typename U>
-    void operator()( U & value ) const
+    void operator()( U& value ) const
     {
         if( m_property.dynamic() )
         {
@@ -129,26 +146,35 @@ public:
     const camp::MapProperty& m_property;
     std::string m_key;
 
-    NumericMapPropertyVisitor( const ::fwAtoms::Numeric::sptr & typedAtom,
-                               ::camp::UserObject & campDataObj,
+    NumericMapPropertyVisitor( const ::fwAtoms::Numeric::sptr& typedAtom,
+                               ::camp::UserObject& campDataObj,
                                const camp::MapProperty& property,
-                               const std::string & key ) :
-        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property), m_key(key)
+                               const std::string& key ) :
+        m_typedAtom(typedAtom),
+        m_campDataObj(campDataObj),
+        m_property(property),
+        m_key(key)
     {
     }
 
-    void operator()( ::boost::blank & ) const
+    //------------------------------------------------------------------------------
+
+    void operator()( ::boost::blank& ) const
     {
         m_property.set( m_campDataObj, m_key, m_typedAtom->getString() );
     }
 
-    void operator()( const ::boost::blank & ) const
+    //------------------------------------------------------------------------------
+
+    void operator()( const ::boost::blank& ) const
     {
         m_property.set( m_campDataObj, m_key, m_typedAtom->getString() );
     }
 
+    //------------------------------------------------------------------------------
+
     template <typename U>
-    void operator()( U & value ) const
+    void operator()( U& value ) const
     {
         m_property.set( m_campDataObj, m_key, value );
     }
@@ -159,25 +185,25 @@ 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)
+    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()
 {
 }
 
+//------------------------------------------------------------------------------
 
 void AtomToDataMappingVisitor::visit(const camp::SimpleProperty& property)
 {
-    const std::string& name ( property.name() );
+    const std::string& name( property.name() );
     ::fwAtoms::Base::sptr atom = m_atomObj->getAttribute( name );
 
     std::stringstream msg;
@@ -189,7 +215,7 @@ void AtomToDataMappingVisitor::visit(const camp::SimpleProperty& property)
         case ::fwAtoms::Base::NUMERIC:
         {
             ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( atom );
-            ::boost::apply_visitor( NumericSimplePropertyVisitor(typedAtom,m_campDataObj,property),
+            ::boost::apply_visitor( NumericSimplePropertyVisitor(typedAtom, m_campDataObj, property),
                                     typedAtom->getVariant() );
             break;
         }
@@ -202,10 +228,11 @@ void AtomToDataMappingVisitor::visit(const camp::SimpleProperty& property)
 
 }
 
+//------------------------------------------------------------------------------
 
 void AtomToDataMappingVisitor::visit(const camp::EnumProperty& property)
 {
-    const std::string& name ( property.name() );
+    const std::string& name( property.name() );
     ::fwAtoms::Base::sptr atom = m_atomObj->getAttribute( name );
 
     std::stringstream msg;
@@ -215,10 +242,11 @@ void AtomToDataMappingVisitor::visit(const camp::EnumProperty& property)
     property.set( m_campDataObj, atom->getString() );
 }
 
+//------------------------------------------------------------------------------
 
 void AtomToDataMappingVisitor::visit(const camp::UserProperty& property)
 {
-    const std::string& name ( property.name() );
+    const std::string& name( property.name() );
     ::fwAtoms::Base::sptr atom = m_atomObj->getAttribute( name );
     if ( atom ) // attribute not exist if was a null object sptr
     {
@@ -274,10 +302,11 @@ void AtomToDataMappingVisitor::visit(const camp::UserProperty& property)
     }
 }
 
+//------------------------------------------------------------------------------
 
 void AtomToDataMappingVisitor::visit(const camp::ArrayProperty& property)
 {
-    const std::string& name ( property.name() );
+    const std::string& name( property.name() );
     ::fwAtoms::Base::sptr atom = m_atomObj->getAttribute( name );
 
     std::stringstream msg;
@@ -325,7 +354,7 @@ void AtomToDataMappingVisitor::visit(const camp::ArrayProperty& property)
                 case ::fwAtoms::Base::NUMERIC:
                 {
                     ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom );
-                    ::boost::apply_visitor( NumericArrayPropertyVisitor(typedAtom,m_campDataObj,property,index),
+                    ::boost::apply_visitor( NumericArrayPropertyVisitor(typedAtom, m_campDataObj, property, index),
                                             typedAtom->getVariant() );
                     break;
                 }
@@ -374,10 +403,11 @@ void AtomToDataMappingVisitor::visit(const camp::ArrayProperty& property)
     }
 }
 
+//------------------------------------------------------------------------------
 
 void AtomToDataMappingVisitor::visit(const camp::MapProperty& property)
 {
-    const std::string& name ( property.name() );
+    const std::string& name( property.name() );
     ::fwAtoms::Base::sptr atom = m_atomObj->getAttribute( name );
 
     std::stringstream msg;
@@ -410,7 +440,8 @@ void AtomToDataMappingVisitor::visit(const camp::MapProperty& property)
                 case ::fwAtoms::Base::NUMERIC:
                 {
                     ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom.second );
-                    ::boost::apply_visitor( NumericMapPropertyVisitor(typedAtom,m_campDataObj,property,elemAtom.first),
+                    ::boost::apply_visitor( NumericMapPropertyVisitor(typedAtom, m_campDataObj, property,
+                                                                      elemAtom.first),
                                             typedAtom->getVariant() );
                     break;
                 }
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
index fdd1473..679c8e5 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
@@ -1,45 +1,50 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 "fwAtomConversion/DataVisitor.hpp"
 
-#include <boost/utility/enable_if.hpp>
+#include "fwAtomConversion/convert.hpp"
+#include "fwAtomConversion/exception/ConversionNotManaged.hpp"
+#include "fwAtomConversion/mapper/factory/new.hpp"
 
-#include <camp/class.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/Sequence.hpp>
+#include <fwAtoms/String.hpp>
 
-#include <fwCamp/factory/new.hpp>
 #include <fwCamp/Mapper/ValueMapper.hpp>
+#include <fwCamp/factory/new.hpp>
 
-#include <fwData/camp/mapper.hpp>
 #include <fwData/Array.hpp>
+#include <fwData/camp/mapper.hpp>
 
-#include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/Map.hpp>
-#include <fwAtoms/Blob.hpp>
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/Numeric.hxx>
-#include <fwAtoms/String.hpp>
-#include <fwAtoms/Boolean.hpp>
-#include <fwAtoms/Base.hpp>
+#include <fwDataCamp/Version.hpp>
+
+#include <fwMedDataCamp/Version.hpp>
 
-#include <fwTools/UUID.hpp>
 #include <fwMemory/BufferObject.hpp>
 
-#include <fwDataCamp/Version.hpp>
+#include <fwTools/UUID.hpp>
 
-#include "fwAtomConversion/DataVisitor.hpp"
-#include "fwAtomConversion/mapper/factory/new.hpp"
-#include "fwAtomConversion/convert.hpp"
-#include "fwAtomConversion/exception/ConversionNotManaged.hpp"
+#include <boost/utility/enable_if.hpp>
+
+#include <camp/class.hpp>
+
+#include <string>
 
 
 namespace fwAtomConversion
 {
 
-static int dataCampVersion = ::fwDataCamp::Version::s_CURRENT_VERSION; // Hack to force link with fwDataCamp
+static int dataCampVersion    = ::fwDataCamp::Version::s_CURRENT_VERSION; // Hack to force link with fwDataCamp
+static int medDataCampVersion = ::fwMedDataCamp::Version::s_CURRENT_VERSION; // Hack to force link with fwMedDataCamp
 
 const std::string DataVisitor::CLASSNAME_METAINFO = "CLASSNAME_METAINFO";
 const std::string DataVisitor::ID_METAINFO        = "ID_METAINFO";
@@ -48,9 +53,9 @@ const std::string DataVisitor::ID_METAINFO        = "ID_METAINFO";
 
 struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base::sptr >
 {
-    DataVisitor::AtomCacheType & m_cache;
+    DataVisitor::AtomCacheType& m_cache;
 
-    DataConversionValueVisitor( DataVisitor::AtomCacheType & cache ) : m_cache(cache)
+    DataConversionValueVisitor( DataVisitor::AtomCacheType& cache ) : m_cache(cache)
     {
     }
 
@@ -97,13 +102,13 @@ struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base
 
             if( classname == "::fwMemory::BufferObject" )
             {
-                ::fwMemory::BufferObject * ptr = value.get< ::fwMemory::BufferObject * >();
-                baseObj                        = ::fwAtoms::Blob::New( ptr->getSptr() );
+                ::fwMemory::BufferObject* ptr = value.get< ::fwMemory::BufferObject* >();
+                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 );
@@ -116,7 +121,7 @@ struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base
 
 //-----------------------------------------------------------------------------
 
-DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType & cache )
+DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType& cache )
     : m_campDataObj( dataObj.get() ), m_cache( cache )
 {
 
@@ -133,8 +138,8 @@ DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType & cache
     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);
+        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 >() );
     }
 
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/AttachmentSeries.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/AttachmentSeries.cpp
new file mode 100644
index 0000000..89ba2de
--- /dev/null
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/AttachmentSeries.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 "fwAtomConversion/mapper/AttachmentSeries.hpp"
+
+#include "fwAtomConversion/convert.hpp"
+#include "fwAtomConversion/exception/ConversionNotManaged.hpp"
+#include "fwAtomConversion/mapper/registry/macros.hpp"
+
+#include <fwAtoms/String.hpp>
+
+#include <fwMedData/AttachmentSeries.hpp>
+
+#include <fwTools/UUID.hpp>
+
+namespace fwAtomConversion
+{
+namespace mapper
+{
+
+//-----------------------------------------------------------------------------
+
+fwAtomConversionRegisterMacro( ::fwAtomConversion::mapper::AttachmentSeries, ::fwMedData::AttachmentSeries);
+
+//-----------------------------------------------------------------------------
+
+::fwAtoms::Object::sptr AttachmentSeries::convert( ::fwData::Object::sptr object,
+                                                   DataVisitor::AtomCacheType& cache )
+{
+    const camp::Class& metaclass = ::camp::classByName( object->getClassname() );
+    ::fwAtomConversion::DataVisitor visitor ( object, cache );
+    metaclass.visit(visitor);
+    ::fwAtoms::Object::sptr atom = visitor.getAtomObject();
+
+    ::fwMedData::AttachmentSeries::sptr attachment = ::fwMedData::AttachmentSeries::dynamicCast(object);
+
+    atom->setAttribute("attachment_availability", ::fwAtoms::String::New(std::string("EMBEDDED")));
+    ::boost::filesystem::path attachFile = attachment->getAttachmentPath();
+    atom->setAttribute("attachment_path", ::fwAtoms::String::New(attachFile.filename().string()) );
+
+    return atom;
+}
+
+//-----------------------------------------------------------------------------
+
+::fwData::Object::sptr AttachmentSeries::convert(  ::fwAtoms::Object::sptr atom,
+                                                   AtomVisitor::DataCacheType& cache,
+                                                   const AtomVisitor::IReadPolicy& uuidPolicy
+                                                   )
+{
+    ::fwAtomConversion::AtomVisitor visitor ( atom, cache, uuidPolicy );
+    visitor.visit();
+    ::fwData::Object::sptr data                    = visitor.getDataObject();
+    ::fwMedData::AttachmentSeries::sptr attachment = ::fwMedData::AttachmentSeries::dynamicCast(data);
+
+    return attachment;
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace mapper
+} //namespace fwAtomConversion
diff --git a/SrcLib/core/fwAtomConversion/test/CMakeLists.txt b/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
index 35626b0..f0d7caf 100644
--- a/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
+++ b/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
@@ -1,9 +1,7 @@
-
 fwLoadProperties()
 
 find_package(CppUnit)
 fwInclude(${CPPUNIT_INCLUDE_DIR})
 fwLink(${CPPUNIT_LIBRARY})
 
-
-
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp
index cfb84f8..8929ad2 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWATOMS_FACTORY_NEW_HPP__
 #define __FWATOMS_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwAtoms/config.hpp"
 #include "fwAtoms/registry/detail.hpp"
 
+#include <string>
+
 namespace fwAtoms
 {
 
@@ -23,7 +20,6 @@ class Base;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -40,7 +36,6 @@ Key()
 }
 };
 
-
 FWATOMS_API SPTR( ::fwAtoms::Base ) New( const ::fwAtoms::registry::KeyType & classname );
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
@@ -55,4 +50,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWATOMS_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwAtomsFilter/CMakeLists.txt b/SrcLib/core/fwAtomsFilter/CMakeLists.txt
index 1169074..a16777b 100644
--- a/SrcLib/core/fwAtomsFilter/CMakeLists.txt
+++ b/SrcLib/core/fwAtomsFilter/CMakeLists.txt
@@ -1,3 +1,3 @@
 fwLoadProperties()
 
-
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwAtomsFilter/Properties.cmake b/SrcLib/core/fwAtomsFilter/Properties.cmake
index 1197200..ba65372 100644
--- a/SrcLib/core/fwAtomsFilter/Properties.cmake
+++ b/SrcLib/core/fwAtomsFilter/Properties.cmake
@@ -10,6 +10,5 @@ set( DEPENDENCIES
     fwTools
     fwActivities
 )
-
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET fwAtomConversion )
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp
index badd464..d46f94d 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #ifndef __FWATOMSFILTER_FACTORY_NEW_HPP__
 #define __FWATOMSFILTER_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwAtomsFilter/config.hpp"
 #include "fwAtomsFilter/registry/detail.hpp"
 
+#include <string>
 
 namespace fwAtomsFilter
 {
@@ -24,7 +20,6 @@ class IFilter;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -41,11 +36,9 @@ Key()
 }
 };
 
-
 FWATOMSFILTER_API SPTR(::fwAtomsFilter::IFilter) New(
     const ::fwAtomsFilter::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
diff --git a/SrcLib/core/fwAtomsPatch/CMakeLists.txt b/SrcLib/core/fwAtomsPatch/CMakeLists.txt
index 85878cf..1937ce2 100644
--- a/SrcLib/core/fwAtomsPatch/CMakeLists.txt
+++ b/SrcLib/core/fwAtomsPatch/CMakeLists.txt
@@ -24,3 +24,4 @@ else()
     )
 endif()
 
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwAtomsPatch/Properties.cmake b/SrcLib/core/fwAtomsPatch/Properties.cmake
index c48a5a6..cbee659 100644
--- a/SrcLib/core/fwAtomsPatch/Properties.cmake
+++ b/SrcLib/core/fwAtomsPatch/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwAtomConversion fwAtoms fwCore fwTools fwRuntime )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET fwAtomConversion )
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp
index dbe5719..4da447d 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,15 @@
 #ifndef __FWATOMSPATCH_VERSIONSGRAPH_HPP__
 #define __FWATOMSPATCH_VERSIONSGRAPH_HPP__
 
-
-#include <boost/graph/graph_traits.hpp>
-#include <boost/graph/adjacency_list.hpp>
+#include "fwAtomsPatch/LinkDescriptor.hpp"
+#include "fwAtomsPatch/VersionDescriptor.hpp"
+#include "fwAtomsPatch/config.hpp"
 
 #include <fwCore/BaseObject.hpp>
 #include <fwCore/mt/types.hpp>
 
-#include "fwAtomsPatch/VersionDescriptor.hpp"
-#include "fwAtomsPatch/LinkDescriptor.hpp"
-
-#include "fwAtomsPatch/config.hpp"
-
+#include <boost/graph/adjacency_list.hpp>
+#include <boost/graph/graph_traits.hpp>
 
 namespace fwAtomsPatch
 {
@@ -101,7 +98,7 @@ public:
     /**
      * @brief Get connected versions
      */
-    FWATOMSPATCH_API std::vector< std::string > getConnectedVersions(const std::string &currentVersion);
+    FWATOMSPATCH_API std::vector< std::string > getConnectedVersions(const std::string& currentVersion);
 
 private:
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp
deleted file mode 100644
index b8753d3..0000000
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** 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 __FWATOMSPATCH_PATCHER_FACTORY_NAMESPACE_HPP__
-#define __FWATOMSPATCH_PATCHER_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwAtomsPatch
-{
-
-namespace patcher
-{
-
-/**
- * @brief       Contains fwAtomsPatch::factory utilities
- * @namespace   factory
- *
- * @date        2009-2013
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace patcher
-
-} // namespace fwAtomsPatch
-
-#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 b2b6b62..b9ede18 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #ifndef __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__
 #define __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwAtomsPatch/config.hpp"
 #include "fwAtomsPatch/patcher/registry/detail.hpp"
 
+#include <string>
 
 namespace fwAtomsPatch
 {
@@ -27,7 +23,6 @@ class IPatcher;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -44,11 +39,9 @@ Key()
 }
 };
 
-
 FWATOMSPATCH_API SPTR(::fwAtomsPatch::patcher::IPatcher) New(
     const ::fwAtomsPatch::patcher::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
@@ -64,4 +57,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp
deleted file mode 100644
index 6121bf0..0000000
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** 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 __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__
-#define __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwAtomsPatch
-{
-
-namespace patcher
-{
-
-/**
- * @brief       fwAtomsPatch fwAtomsPatch::registry details
- * @namespace   registry
- *
- * @date        2009-2013
- *
- */
-namespace registry
-{
-} // namespace registry
-
-} // namespace patcher
-
-} // namespace fwAtomsPatch
-
-#endif /* __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp
index dda6df3..d28fe4d 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWCAMP_CAMP_MAPVALUEMAPPER_HPP__
 #define __FWCAMP_CAMP_MAPVALUEMAPPER_HPP__
 
-#include <camp/valuemapper.hpp>
+#include "fwCamp/camp/customtype.hpp"
 #include "fwCamp/camp/traits.hpp"
 
+#include <camp/valuemapper.hpp>
+
 namespace camp_ext
 {
 
@@ -21,7 +23,4 @@ struct ValueMapper<T, typename boost::enable_if_c<camp::isMapping<T>::value>::ty
 
 }  // namespace camp_ext
 
-
-
-
 #endif /* __FWCAMP_CAMP_MAPVALUEMAPPER_HPP__ */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
index 5617f7e..3311a81 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,13 @@
 #ifndef __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HXX__
 #define __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HXX__
 
-#include <camp/userobject.hpp>
-
+#include "fwCamp/camp/customtype.hpp"
 #include <fwCamp/Mapper/ValueMapper.hpp>
 
+#include <camp/class.hpp>
+#include <camp/classbuilder.hpp>
+#include <camp/userobject.hpp>
+
 namespace camp
 {
 
@@ -20,30 +23,36 @@ 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)
 {
 }
 
+//------------------------------------------------------------------------------
+
 template <typename A>
 std::size_t MapPropertyImpl<A>::getSize(const UserObject& object) const
 {
     return Mapper::size(map(object));
 }
+//------------------------------------------------------------------------------
+
 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::MappedType& typedValue = value.to< typename Mapper::MappedType >();
 
-    Mapper::set(map(object), typedKey,typedValue );
+    Mapper::set(map(object), typedKey, typedValue );
 }
 
+//------------------------------------------------------------------------------
 
 template <typename A>
 MapProperty::ValuePair MapPropertyImpl<A>::getElement(const UserObject& object, std::size_t index ) const
 {
 
-    ValueType p (Mapper::get(map(object),index));
+    ValueType p(Mapper::get(map(object), index));
     return ValuePair(p.first, p.second);
 }
 
@@ -63,7 +72,6 @@ struct PropertyMapper<A, camp::mappingType>
     typedef MapPropertyImpl<A> Type;
 };
 
-
 } // namespace detail
 } // namespace camp
 
diff --git a/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp
deleted file mode 100644
index d47da95..0000000
--- a/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** 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 __FWCAMP_FACTORY_NAMESPACE_HPP__
-#define __FWCAMP_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwCamp
-{
-
-/**
- * @brief       Contains fwCamp::factory utilities
- * @namespace   fwCamp::factory
- *
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace fwCamp
-
-#endif /* __FWCAMP_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/macros.hpp b/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
index 338dcca..8862710 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,22 @@
 #ifndef __FWCAMP_MACROS_HPP__
 #define __FWCAMP_MACROS_HPP__
 
+#ifndef CAMP_COMPILATION
+
+#define fwCampAutoDeclareMacro( desc, export)
+#define fwCampAutoDeclareDataMacro( desc, export)
+#define fwCampMakeFriendDataMacro(desc)
+
+#else
+
+#include <fwCore/macros.hpp>
+
 #include <boost/preprocessor/seq/fold_left.hpp>
 
-#include <camp/class.hpp>
 #include <camp/camptype.hpp>
+#include <camp/class.hpp>
 #include <camp/enum.hpp>
 
-#include <fwCore/macros.hpp>
-
 #define __FWCAMP_CAT(_s_, _state_, _elem_) BOOST_PP_CAT(_state_, _elem_)
 #define __FWCAMP_NAMESPACE_CAT(_s_, _state_, _elem_) _state_::_elem_
 
@@ -28,7 +36,7 @@
 #define __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc)  BOOST_PP_CAT(localDeclare, __FWCAMP_FUNC_SUFFIX(desc))
 
 #define __FWCAMP_CLASS_BUILDER_TYPE(desc) \
-    camp::ClassBuilder< __FWCAMP_NAMESPACE_NAME(desc) >
+    camp::ClassBuilder < __FWCAMP_NAMESPACE_NAME(desc) >
 
 #define __FWCAMP_AUTO_TYPE_NONCOPYABLE(type, registerFunc) \
     CAMP_TYPE_NONCOPYABLE( type)
@@ -48,14 +56,14 @@
     BOOST_PP_CAT(__FWCAMP_FUNC_SUFFIX(desc), Reg)
 
 #define __FWCAMP__USEROBJREG(desc) \
-    ::fwCamp::UserObjectRegistrar< __FWCAMP_NAMESPACE_NAME(desc)>
+    ::fwCamp::UserObjectRegistrar < __FWCAMP_NAMESPACE_NAME(desc) >
 //----------------------------------------------------------------------------
 
-
 /**
  *
  * desc is a BOOST_PP_SEQ
- * fwCampMakeFriendMacro((a)(b)(c)) expands to : Friend void ::fwCampDeclareabc(camp::ClassBuilder< ::a::b::c > &builder)
+ * 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); \
@@ -89,7 +97,6 @@
 
 //----------------------------------------------------------------------------
 
-
 #define fwCampAutoDeclareEnumMacro(desc) \
     void __FWCAMP_DECLARE_FUNC_NAME(desc)(camp::EnumBuilder &); \
     inline void __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc)() \
@@ -102,28 +109,23 @@
 
 //----------------------------------------------------------------------------
 
-
 #define fwCampImplementMacro(desc) \
     void __FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder)
 
 //----------------------------------------------------------------------------
 
-
 #define fwCampImplementDataMacro(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)
 
 //----------------------------------------------------------------------------
 
-
 /**
  * @brief Implementation of enumeration into camp introspection
  * @see fwCampAutoDeclareEnumMacro
  */
 #define fwCampImplementEnumMacro(desc) \
-    void __FWCAMP_DECLARE_FUNC_NAME(desc)(camp::EnumBuilder &builder)
-
-
+    void __FWCAMP_DECLARE_FUNC_NAME(desc)(camp::EnumBuilder& builder)
 
 /**
  * @brief This macro is used when you want to set a smart pointer into an object
@@ -170,20 +172,13 @@
 \
     private: \
 \
-        boost::function< ReturnType (ClassType&)> m_getter; \
+        boost::function< ReturnType(ClassType&)> m_getter; \
     }; \
 \
     } \
     }
 
-
-
+#endif
 
 #endif // __FWCAMP_MACROS_HPP__
 
-
-
-
-
-
-
diff --git a/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
index 7b662da..58f067d 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,12 +9,23 @@
 
 /**
  * @brief       All necessary for camp binding with simple types.
- * @namespace   fwCamp
- *
- * @date        2009-2012
  */
 namespace fwCamp
 {
+/**
+ * @brief       Contains fwCamp::registry details
+ */
+namespace registry
+{
+} // namespace registry
+
+/**
+ * @brief       Contains fwCamp::factory utilities
+ */
+namespace factory
+{
+} // namespace factory
+
 }  // namespace fwCamp
 
 #endif //__FWCAMP_NAMESPACE_HPP__
diff --git a/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp
deleted file mode 100644
index 36d5e7b..0000000
--- a/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** 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 __FWCAMP_REGISTRY_NAMESPACE_HPP__
-#define __FWCAMP_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwCamp
-{
-
-/**
- * @brief       Contains fwCamp::registry details
- * @namespace   fwCamp::registry
- *
- * @date        2009-2012
- */
-namespace registry
-{
-} // namespace registry
-
-} // namespace fwCamp
-
-#endif /* __FWCAMP_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp b/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp
index 1f583c4..89a1c82 100644
--- a/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -50,10 +50,10 @@ void SigSlotConnection::connect(const ::fwCom::HasSignals::csptr& hasSignals, ::
     }
     catch (::fwCom::exception::AlreadyConnected& e)
     {
-        const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicConstCast(hasSignals);
+        const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicCast(hasSignals);
         auto sourceID                         = source ? source->getID() : "";
 
-        const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicConstCast(hasSlots);
+        const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicCast(hasSlots);
         auto targetID                         = target ? target->getID() : "";
 
         OSLM_ERROR("Can't connect signal '" + sourceID + "/" + signalKey + "' with slot '"
@@ -89,10 +89,10 @@ void SigSlotConnection::connect(const ::fwCom::HasSignals::csptr& hasSignals,
         }
         catch (::fwCom::exception::AlreadyConnected& e)
         {
-            const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicConstCast(hasSignals);
+            const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicCast(hasSignals);
             auto sourceID                         = source ? source->getID() : "";
 
-            const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicConstCast(hasSlots);
+            const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicCast(hasSlots);
             auto targetID                         = target ? target->getID() : "";
 
             OSLM_ERROR("Can't connect signal '" + sourceID + "/" + keys.first + "' with slot '"
diff --git a/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp b/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
old mode 100755
new mode 100644
index 77786df..85cdfa8
--- a/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWCOMMAND_EMPTY_HPP__
 #define __FWCOMMAND_EMPTY_HPP__
 
-
-#include <fwTools/macros.hpp>
-
 #include "fwCommand/ICommand.hpp"
 
 namespace fwCommand
@@ -39,8 +36,6 @@ public:
 
 };
 
-
 } // namespace fwCommand
 
-
 #endif // __FWCOMMAND_EMPTY_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp b/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
old mode 100755
new mode 100644
index f561713..0c02f92
--- a/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,20 @@
 #ifndef __FWCOMMAND_ICOMMAND_HPP__
 #define __FWCOMMAND_ICOMMAND_HPP__
 
-#include <exception>
-#include <string>
-#include <boost/cstdint.hpp>
+#include "fwCommand/config.hpp"
+
+#include <fwServices/IService.hpp>
 
 #include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
 
-#include <fwServices/IService.hpp>
+#include <boost/cstdint.hpp>
 
-#include "fwCommand/config.hpp"
+#include <exception>
+#include <string>
 
 namespace fwCommand
 {
 
-
 /**
  * @brief The base class for all command.
  *
@@ -38,7 +37,7 @@ protected:
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ICommand)(::fwTools::Object) );
+    fwCoreServiceClassDefinitionsMacro( (ICommand)(::fwTools::Object) );
 
     /**
      * @brief Virtual destructor.
@@ -69,19 +68,21 @@ public:
      */
     FWCOMMAND_API virtual const std::string getDescription( void ) const = 0;
 
+    //------------------------------------------------------------------------------
+
     void setNotifier( ::fwServices::IService::sptr serviceNotifier )
     {
         m_serviceNotifier = serviceNotifier;
     }
 
+    //------------------------------------------------------------------------------
+
     ::fwServices::IService::sptr getNotifier()
     {
         return m_serviceNotifier.lock();
     }
 };
 
-
 } // namespace fwCommand
 
-
 #endif // __FWCOMMAND_ICOMMAND_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp b/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
old mode 100755
new mode 100644
index e40f16d..cd69cd3
--- a/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWCOMMAND_MANAGER_HPP__
 #define __FWCOMMAND_MANAGER_HPP__
 
-#include <deque>
-#include <boost/cstdint.hpp>
+#include "fwCommand/ICommand.hpp"
+#include "fwCommand/config.hpp"
 
 #include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
 
-#include "fwCommand/config.hpp"
-#include "fwCommand/ICommand.hpp"
+#include <boost/cstdint.hpp>
+
+#include <deque>
 
 namespace fwCommand
 {
@@ -29,7 +29,7 @@ class FWCOMMAND_CLASS_API Manager : public ::fwTools::Object
 public:
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (Manager)(::fwTools::Object),
-                                               ((std::make_shared< Manager >,() ))
+                                               ((std::make_shared< Manager >, () ))
                                                    ((ManagerFactory,
                                                      ((::boost::uint32_t))((::boost::uint32_t)) (
                                                          (::boost::uint32_t))  ))
@@ -39,12 +39,14 @@ public:
      * @brief Default constructor.
      *
      * @param maxUndoLevel maximum number of command that could be stored in the history
-     * @param maxUndoMemory maximum number of byte that could be stored in the history (but the latest queued command is ignored by the memory usage counter. See below for more explanation)
+     * @param maxUndoMemory maximum number of byte that could be stored in the history (but the latest queued command is
+     * ignored by the memory usage counter. See below for more explanation)
      * @param maxCommandMemory maximum number of byte that could be used by a single command
      *
      * If the size of a single command is greater than maxCommandMemory, then it would not be stored in the history.
      *
-     * @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 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,
@@ -59,7 +61,6 @@ public:
      */
     FWCOMMAND_API virtual ~Manager() throw();
 
-
     /**
      * @name History management methods.
      */
@@ -91,7 +92,6 @@ public:
     FWCOMMAND_API void clear();
     //@}
 
-
     /**
      * @brief Retrieves the first undoable command.
      *
@@ -181,7 +181,6 @@ protected:
      */
     CmdList::iterator m_lastCmd;
 
-
     /**
      * @brief Remove first command in m_listCmd and desalocate this command.
      *
@@ -192,8 +191,6 @@ protected:
     ::fwServices::IService::wptr m_serviceNotifier;
 };
 
-
 } // namespace fwCommand
 
-
 #endif // __FWCOMMAND_MANAGER_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp b/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
old mode 100755
new mode 100644
index f8c89d3..f5c9170
--- a/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 
 #include <fwDataTools/helper/Image.hpp>
 
-#include <fwTools/macros.hpp>
-
 #include <boost/cstdint.hpp>
 
 namespace fwCommand
@@ -46,7 +44,6 @@ public:
     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 index );
@@ -89,8 +86,6 @@ private:
 
 };
 
-
 } // namespace fwCommand
 
-
 #endif //__FWCOMMAND_PAINTCOMMAND_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp b/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
old mode 100755
new mode 100644
index 2a4f471..e6c9f0c
--- a/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWCOMMAND_UNDOREDOMANAGER_HPP__
 #define __FWCOMMAND_UNDOREDOMANAGER_HPP__
 
-#include <deque>
-
-#include <boost/signals2/signal.hpp>
-#include <boost/signals2/connection.hpp>
-#include <boost/cstdint.hpp>
+#include "fwCommand/ICommand.hpp"
+#include "fwCommand/Manager.hpp"
+#include "fwCommand/config.hpp"
 
 #include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
 
+#include <boost/cstdint.hpp>
+#include <boost/signals2/connection.hpp>
+#include <boost/signals2/signal.hpp>
 
-#include "fwCommand/config.hpp"
-#include "fwCommand/ICommand.hpp"
-#include "fwCommand/Manager.hpp"
+#include <deque>
 
 namespace fwCommand
 {
@@ -41,7 +39,6 @@ public:
     /// Return the unique Instance, create it if required at first access
     FWCOMMAND_API static UndoRedoManager::sptr getDefault();
 
-
     /**
      * @brief Default constructor.
      */
@@ -52,7 +49,6 @@ public:
      */
     FWCOMMAND_API virtual ~UndoRedoManager() throw();
 
-
     /**
      * @name History management methods.
      */
@@ -84,7 +80,6 @@ public:
     FWCOMMAND_API void clear();
     //@}
 
-
     /**
      * @brief Retrieves the first undoable command.
      *
@@ -134,7 +129,6 @@ public:
      */
     FWCOMMAND_API void removeManager();
 
-
     FWCOMMAND_API ConnectionType connect(SignalType::slot_function_type subscriber);
 
     FWCOMMAND_API void disconnect(ConnectionType subscriber);
@@ -143,13 +137,10 @@ protected:
 
     Manager::sptr m_currentManager;
 
-
 private:
     SignalType m_sig;
 };
 
-
 } // namespace fwCommand
 
-
 #endif // __FWCOMMAND_UNDOREDOMANAGER_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/base.hpp b/SrcLib/core/fwCore/include/fwCore/base.hpp
index 40fb1bf..d61f3ac 100644
--- a/SrcLib/core/fwCore/include/fwCore/base.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/base.hpp
@@ -1,21 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/exceptionmacros.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/macros.hpp b/SrcLib/core/fwCore/include/fwCore/macros.hpp
index 9734968..37395db 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-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,7 @@
  * @brief This file defines fwCore base macros.
  */
 
-#include <string>
-#include <memory>
+#include "fwCore/Demangler.hpp"
 
 #include <boost/preprocessor/cat.hpp>
 #include <boost/preprocessor/comparison/equal.hpp>
@@ -33,7 +32,9 @@
 #include <boost/preprocessor/seq/transform.hpp>
 #include <boost/preprocessor/tuple/elem.hpp>
 
-#include "fwCore/Demangler.hpp"
+#include <memory>
+#include <string>
+#include <type_traits>
 
 #ifdef _WIN32
 #pragma warning(disable: 4003)
@@ -231,17 +232,27 @@
     /** 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 )             \
-    {                                                                                                                                    \
-        return std::dynamic_pointer_cast< _classname_ >(p);                                                                          \
-    };                                                                                                                                   \
-    /** @brief Const shared pointer cast to dynamic pointer */                                                                           \
+#define __FWCORE_GENERATE_CAST(_classname_, _baseclassname_)                                                    \
+    /** @brief Cast to dynamic shared pointer   */                                                              \
+    template< class BASETYPE, typename = typename std::enable_if < std::is_const<BASETYPE>::value >::type >     \
+    static std::shared_ptr< const _classname_> __FWCORE_DYNAMIC_CAST_FUNC_NAME (                                \
+        const std::shared_ptr<BASETYPE> &p )                                                                    \
+    {                                                                                                           \
+        return std::dynamic_pointer_cast< const _classname_ >(p);                                               \
+    };                                                                                                          \
+    template< class BASETYPE, typename = typename std::enable_if < !std::is_const<BASETYPE>::value >::type >    \
+    static std::shared_ptr<_classname_> __FWCORE_DYNAMIC_CAST_FUNC_NAME (                                       \
+        const std::shared_ptr<BASETYPE> &p )                                                                    \
+    {                                                                                                           \
+        return std::dynamic_pointer_cast< _classname_ >(p);                                                     \
+    };                                                                                                          \
+    /** @brief Const shared pointer cast to dynamic pointer \
+     *  @deprecated simply use dynamicCast instead, now it handles const or not const arguments. \
+     */                                                                                                         \
     template< class BASETYPE > static __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME __FWCORE_DYNAMIC_CONST_CAST_FUNC_NAME ( \
         BASETYPE const &p ) \
     {                                                                                                                                    \
diff --git a/SrcLib/core/fwCore/include/fwCore/pch.hpp b/SrcLib/core/fwCore/include/fwCore/pch.hpp
new file mode 100644
index 0000000..43280d9
--- /dev/null
+++ b/SrcLib/core/fwCore/include/fwCore/pch.hpp
@@ -0,0 +1,41 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCORE_PCH_HPP__
+#define __FWCORE_PCH_HPP__
+
+#include <boost/config.hpp>
+#include <boost/exception/exception.hpp>
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/comparison/equal.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
+#include <boost/preprocessor/control/if.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/expand.hpp>
+#include <boost/preprocessor/logical/and.hpp>
+#include <boost/preprocessor/logical/not.hpp>
+#include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/seq/elem.hpp>
+#include <boost/preprocessor/seq/fold_right.hpp>
+#include <boost/preprocessor/seq/for_each.hpp>
+#include <boost/preprocessor/seq/for_each_i.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/seq/size.hpp>
+#include <boost/preprocessor/seq/to_tuple.hpp>
+#include <boost/preprocessor/seq/transform.hpp>
+#include <boost/preprocessor/tuple/elem.hpp>
+#include <boost/throw_exception.hpp>
+
+#include <iostream>
+#include <iterator>
+#include <map>
+#include <memory>
+#include <string>
+#include <typeinfo>
+#include <utility>
+#include <vector>
+
+#endif // __FWCORE_PCH_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/spyLog.hpp b/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
index 4b15a80..ae424e0 100644
--- a/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
@@ -61,6 +61,9 @@
 # include <cassert>
 # include <sstream>
 
+#include <boost/preprocessor/comparison/greater_equal.hpp>
+#include <boost/preprocessor/control/expr_iif.hpp>
+
 # include "fwCore/log/SpyLogger.hpp"
 # include "fwCore/log/ScopedMessage.hpp"
 
@@ -69,9 +72,6 @@
 /**
  * @cond
  */
-# ifndef SPYLOG_LEVEL
-#  define SPYLOG_LEVEL 3
-# endif
 
 // -----------------------------------------------------------------------------
 
@@ -87,132 +87,102 @@
         SL_ ## loglevel(log, oslStr.str());                       \
         )
 
-// -----------------------------------------------------------------------------
-
-#if (SPYLOG_LEVEL < 6)
-# define __FWCORE_TRACE_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_TRACE_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
-#endif
-
-#if (SPYLOG_LEVEL < 5)
-# define __FWCORE_DEBUG_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_DEBUG_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
-#endif
-
-#if (SPYLOG_LEVEL < 4)
-# define __FWCORE_INFO_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_INFO_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
-#endif
+#ifdef SPYLOG_LEVEL
 
-#if (SPYLOG_LEVEL < 3)
-# define __FWCORE_WARN_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_WARN_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
-#endif
+#define __FWCORE_IF_ENABLED( level, expr ) \
+    BOOST_PP_EXPR_IIF( BOOST_PP_GREATER_EQUAL(SPYLOG_LEVEL, level), expr)
 
-#if (SPYLOG_LEVEL < 2)
-# define __FWCORE_ERROR_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_ERROR_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
-#endif
-
-#if (SPYLOG_LEVEL < 1)
-# define __FWCORE_FATAL_IF_ENABLED(expr) if (0) __FWCORE_EXPR_BLOCK(expr)
-#else
-# define __FWCORE_FATAL_IF_ENABLED(expr) __FWCORE_EXPR_BLOCK(expr)
 #endif
 
 // -----------------------------------------------------------------------------
 
 
-#  define SL_TRACE(log, message) __FWCORE_TRACE_IF_ENABLED(     \
-        log.trace(message, __FILE__, __LINE__);                 \
+#  define SL_TRACE(log, message) __FWCORE_IF_ENABLED( 6, \
+        log.trace(message, __FILE__, __LINE__);          \
         )
-#  define OSL_TRACE(log, message) __FWCORE_TRACE_IF_ENABLED(    \
-        OSL_LOG(log, TRACE, message);                           \
+#  define OSL_TRACE(log, message) __FWCORE_IF_ENABLED( 6, \
+        OSL_LOG(log, TRACE, message);                     \
         )
-#  define SL_TRACE_IF(log, message, cond) __FWCORE_TRACE_IF_ENABLED(    \
-        __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__); )      \
+#  define SL_TRACE_IF(log, message, cond) __FWCORE_IF_ENABLED( 6,   \
+        __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); )                \
+#  define OSL_TRACE_IF(log, message, cond) __FWCORE_IF_ENABLED( 6, \
+        __FWCORE_IF(cond, OSL_LOG(log, TRACE, message); )          \
         )
 
 
-#  define SL_DEBUG(log, message) __FWCORE_DEBUG_IF_ENABLED(     \
-        log.debug(message, __FILE__, __LINE__);                 \
+#  define SL_DEBUG(log, message) __FWCORE_IF_ENABLED( 5, \
+        log.debug(message, __FILE__, __LINE__);          \
         )
-#  define OSL_DEBUG(log, message) __FWCORE_DEBUG_IF_ENABLED(    \
-        OSL_LOG(log, DEBUG, message);                           \
+#  define OSL_DEBUG(log, message) __FWCORE_IF_ENABLED( 5, \
+        OSL_LOG(log, DEBUG, message);                     \
         )
-#  define SL_DEBUG_IF(log, message, cond) __FWCORE_DEBUG_IF_ENABLED(  \
-        __FWCORE_IF(cond, log.debug(message, __FILE__, __LINE__); )      \
+#  define SL_DEBUG_IF(log, message, cond) __FWCORE_IF_ENABLED( 5,   \
+        __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); )                \
+#define OSL_DEBUG_IF(log, message, cond) __FWCORE_IF_ENABLED( 5, \
+        __FWCORE_IF(cond, OSL_LOG(log, DEBUG, message); )        \
         )
 
 
-#define SL_INFO(log, message) __FWCORE_INFO_IF_ENABLED(       \
-        log.info(message, __FILE__, __LINE__);                  \
+#define SL_INFO(log, message) __FWCORE_IF_ENABLED( 4, \
+        log.info(message, __FILE__, __LINE__);        \
         )
-#define OSL_INFO(log, message) __FWCORE_INFO_IF_ENABLED(      \
-        OSL_LOG(log, INFO, message);                            \
+#define OSL_INFO(log, message) __FWCORE_IF_ENABLED( 4, \
+        OSL_LOG(log, INFO, message);                   \
         )
-#define SL_INFO_IF(log, message, cond) __FWCORE_INFO_IF_ENABLED(      \
-        __FWCORE_IF(cond, log.info(message, __FILE__, __LINE__); )      \
+#define SL_INFO_IF(log, message, cond) __FWCORE_IF_ENABLED( 4,      \
+        __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); )                 \
+#define OSL_INFO_IF(log, message, cond) __FWCORE_IF_ENABLED( 4, \
+        __FWCORE_IF(cond, OSL_LOG(log, INFO, message); )        \
         )
 
 
-#define SL_WARN(log, message) __FWCORE_WARN_IF_ENABLED(       \
-        log.warn(message, __FILE__, __LINE__);                  \
+#define SL_WARN(log, message) __FWCORE_IF_ENABLED( 3, \
+        log.warn(message, __FILE__, __LINE__);        \
         )
-#define OSL_WARN(log, message) __FWCORE_WARN_IF_ENABLED(      \
-        OSL_LOG(log, WARN, message);                            \
+#define OSL_WARN(log, message) __FWCORE_IF_ENABLED( 3, \
+        OSL_LOG(log, WARN, message);                   \
         )
-#define SL_WARN_IF(log, message, cond) __FWCORE_WARN_IF_ENABLED(      \
-        __FWCORE_IF(cond, log.warn(message, __FILE__, __LINE__); )      \
+#define SL_WARN_IF(log, message, cond) __FWCORE_IF_ENABLED( 3,      \
+        __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); )                 \
+#define OSL_WARN_IF(log, message, cond) __FWCORE_IF_ENABLED( 3, \
+        __FWCORE_IF(cond, OSL_LOG(log, WARN, message); )        \
         )
 
 
-#define SL_ERROR(log, message) __FWCORE_ERROR_IF_ENABLED(     \
-        log.error(message, __FILE__, __LINE__);                 \
+#define SL_ERROR(log, message) __FWCORE_IF_ENABLED( 2,  \
+        log.error(message, __FILE__, __LINE__);         \
         )
-#define OSL_ERROR(log, message) __FWCORE_ERROR_IF_ENABLED(    \
-        OSL_LOG(log, ERROR, message);                           \
+#define OSL_ERROR(log, message) __FWCORE_IF_ENABLED( 2, \
+        OSL_LOG(log, ERROR, message);                   \
         )
-#define SL_ERROR_IF(log, message, cond) __FWCORE_ERROR_IF_ENABLED(    \
-        __FWCORE_IF(cond, log.error(message, __FILE__, __LINE__); )      \
+#define SL_ERROR_IF(log, message, cond) __FWCORE_IF_ENABLED( 2,     \
+        __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); )              \
+#define OSL_ERROR_IF(log, message, cond) __FWCORE_IF_ENABLED( 2,    \
+        __FWCORE_IF(cond, OSL_LOG(log, ERROR, message); )           \
         )
 
 
-#define SL_FATAL(log, message) __FWCORE_FATAL_IF_ENABLED(     \
-        log.fatal(message, __FILE__, __LINE__);                 \
-        SPYLOG_ABORT();                                         \
+#define SL_FATAL(log, message) __FWCORE_IF_ENABLED( 1, \
+        log.fatal(message, __FILE__, __LINE__);        \
+        SPYLOG_ABORT();                                \
         )
-#define OSL_FATAL(log, message) __FWCORE_FATAL_IF_ENABLED(    \
+#define OSL_FATAL(log, message) __FWCORE_IF_ENABLED( 1,         \
         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); )                      \
+#define SL_FATAL_IF(log, message, cond) __FWCORE_IF_ENABLED( 1, \
+        __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); )                   \
+#define OSL_FATAL_IF(log, message, cond) __FWCORE_IF_ENABLED( 1, \
+        __FWCORE_IF(cond, OSL_FATAL(log, message); )             \
         )
 
+
 // -----------------------------------------------------------------------------
 
 # ifdef _DEBUG
diff --git a/SrcLib/core/fwCore/src/fwCore/Exception.cpp b/SrcLib/core/fwCore/src/fwCore/Exception.cpp
index db410fe..536de2f 100644
--- a/SrcLib/core/fwCore/src/fwCore/Exception.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/Exception.cpp
@@ -1,22 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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"
 
-
-
 namespace fwCore
 {
 
-Exception::Exception ( const std::string &err ) : std::runtime_error ( err )
+Exception::Exception ( const std::string& err ) :
+    std::runtime_error( err )
 {
 }
 
-
-
 } //namespace fwCore
 
diff --git a/SrcLib/core/fwData/include/fwData/Object.hpp b/SrcLib/core/fwData/include/fwData/Object.hpp
index 8e8bba1..993254c 100644
--- a/SrcLib/core/fwData/include/fwData/Object.hpp
+++ b/SrcLib/core/fwData/include/fwData/Object.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,37 @@
 #ifndef __FWDATA_OBJECT_HPP__
 #define __FWDATA_OBJECT_HPP__
 
+#include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/registry/detail.hpp"
-#include "fwData/config.hpp"
-
-#include <fwCore/base.hpp>
-#include <fwCore/mt/types.hpp>
 
 #include <fwCamp/macros.hpp>
-#include <fwCamp/camp/customtype.hpp>
-#include <fwCamp/camp/MapProperty.hpp>
+#ifdef CAMP_COMPILATION
+#include <fwCamp/Mapper/ArrayMapper.hpp>
+#include <fwCamp/camp/ExtendedClassVisitor.hpp>
 #include <fwCamp/camp/MapMapper.hpp>
+#include <fwCamp/camp/MapProperty.hpp>
 #include <fwCamp/camp/MapValueMapper.hpp>
-#include <fwCamp/Mapper/ArrayMapper.hpp>
+#include <fwCamp/camp/customtype.hpp>
 #include <fwCamp/camp/detail/MapPropertyImpl.hpp>
-#include <fwCamp/camp/ExtendedClassVisitor.hpp>
-
-#include <fwTools/Object.hpp>
-#include <fwTools/DynamicAttributes.hxx>
+#endif
 
 #include <fwCom/HasSignals.hpp>
 #include <fwCom/Signal.hpp>
 
-#include <boost/unordered_map.hpp>
+#include <fwCore/base.hpp>
+#include <fwCore/mt/types.hpp>
+
+#include <fwTools/Object.hpp>
+
 #include <string>
+#include <unordered_map>
 
 fwCampAutoDeclareDataMacro((fwData)(Object), FWDATA_API);
 
 namespace fwData
 {
 
-
 /**
  * @brief   Base class for each data object.
  *
@@ -46,7 +46,6 @@ namespace fwData
  * containing a specific Object. When accessing to this object with getField("dummy") we get the specific Object
  */
 class FWDATA_CLASS_API Object  : public ::fwTools::Object,
-                                 public ::fwTools::DynamicAttributes< ::fwData::Object >,
                                  public ::fwCom::HasSignals
 {
 public:
@@ -99,12 +98,11 @@ public:
      * @}
      */
 
-
     typedef std::string FieldNameType;
     typedef std::vector<FieldNameType> FieldNameVectorType;
-    typedef ::boost::unordered_map< FieldNameType, ::fwData::Object::sptr > FieldMapType;
+    typedef ::std::unordered_map< FieldNameType, ::fwData::Object::sptr > FieldMapType;
 
-    typedef ::boost::unordered_map< ::fwData::Object::csptr, ::fwData::Object::sptr > DeepCopyCacheType;
+    typedef ::std::unordered_map< ::fwData::Object::csptr, ::fwData::Object::sptr > DeepCopyCacheType;
 
     /**
      * @brief Returns a pointer of corresponding field (null if non exist).
@@ -112,7 +110,7 @@ public:
      * @param[in] defaultValue Default value
      * @return defaultValue if field is not found
      */
-    FWDATA_API ::fwData::Object::sptr getField( const FieldNameType & name,
+    FWDATA_API ::fwData::Object::sptr getField( const FieldNameType& name,
                                                 ::fwData::Object::sptr defaultValue = ::fwData::Object::sptr() ) const;
 
     /**
@@ -133,7 +131,8 @@ public:
     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.
+     * @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.
@@ -146,7 +145,7 @@ public:
      * @param[in] name Field name
      * @return null sptr if field is not found
      */
-    FWDATA_API ::fwData::Object::csptr getConstField( const FieldNameType & name ) const;
+    FWDATA_API ::fwData::Object::csptr getConstField( const FieldNameType& name ) const;
 
     /**
      * @brief Returns fields map.
@@ -163,42 +162,42 @@ public:
      * @param[in] name Field name
      * @param[in] obj  Field
      */
-    FWDATA_API void setField( const FieldNameType & name, ::fwData::Object::sptr obj );
+    FWDATA_API void setField( const FieldNameType& name, ::fwData::Object::sptr obj );
 
     /**
      * @brief Replace the field map content.
      */
-    FWDATA_API void setFields( const FieldMapType & fieldMap );
+    FWDATA_API void setFields( const FieldMapType& fieldMap );
 
     /**
      * @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.
      */
-    FWDATA_API void updateFields( const FieldMapType & fieldMap );
+    FWDATA_API void updateFields( const FieldMapType& fieldMap );
 
     /**
      * @brief A shallow copy of fields (objects in m_children)
      * @param[in] source source of the copy.
      */
-    FWDATA_API virtual void shallowCopy( const ::fwData::Object::csptr &source );
+    FWDATA_API virtual void shallowCopy( const ::fwData::Object::csptr& source );
 
     /**
      * @brief Make a deep copy from the source
      * Calling this method may invalidate any DumpLock, RescursiveLock or helper
      * on the object. Prefer using fwData::Object::copy instead.
      */
-    FWDATA_API void deepCopy( const ::fwData::Object::csptr &source );
+    FWDATA_API void deepCopy( const ::fwData::Object::csptr& source );
 
     /**
      * @brief return a copy of the source. if source is a null pointer, return a null pointer.
      * @{
      */
-    FWDATA_API static ::fwData::Object::sptr copy(const ::fwData::Object::csptr &source);
+    FWDATA_API static ::fwData::Object::sptr copy(const ::fwData::Object::csptr& source);
     template <typename DATA_TYPE>
     static SPTR(DATA_TYPE) copy(const CSPTR(DATA_TYPE) &source);
     template <typename DATA_TYPE>
@@ -209,13 +208,13 @@ public:
      * @brief A shallow copy of fields (objects in m_children)
      * @param[in] source source of the copy.
      */
-    FWDATA_API void fieldShallowCopy( const ::fwData::Object::csptr &source );
+    FWDATA_API void fieldShallowCopy( const ::fwData::Object::csptr& source );
 
     /**
      * @brief A deep copy of fields (objects in m_children)
      * @param[in] source source of the copy.
      */
-    FWDATA_API void fieldDeepCopy( const ::fwData::Object::csptr &source );
+    FWDATA_API void fieldDeepCopy( const ::fwData::Object::csptr& source );
 
     //-----------------------------------------------------------------------------
 
@@ -235,9 +234,9 @@ protected:
      * @brief Internal-use methods to implement Object's deepCopy
      * @{
      */
-    FWDATA_API static ::fwData::Object::sptr copy(const ::fwData::Object::csptr &source, DeepCopyCacheType &cache);
-    FWDATA_API void fieldDeepCopy( const ::fwData::Object::csptr &source, DeepCopyCacheType &cache );
-    FWDATA_API virtual void cachedDeepCopy(const ::fwData::Object::csptr &source, DeepCopyCacheType &cache) = 0;
+    FWDATA_API static ::fwData::Object::sptr copy(const ::fwData::Object::csptr& source, DeepCopyCacheType& cache);
+    FWDATA_API void fieldDeepCopy( const ::fwData::Object::csptr& source, DeepCopyCacheType& cache );
+    FWDATA_API virtual void cachedDeepCopy(const ::fwData::Object::csptr& source, DeepCopyCacheType& cache) = 0;
     template <typename DATA_TYPE>
     static SPTR(DATA_TYPE) copy(const CSPTR(DATA_TYPE) &source, DeepCopyCacheType &cache);
     template <typename DATA_TYPE>
@@ -251,14 +250,12 @@ protected:
     mutable ::fwCore::mt::ReadWriteMutex m_mutex;
 };
 
-
 template <typename DATA_TYPE>
 SPTR(DATA_TYPE) Object::copy(const CSPTR(DATA_TYPE) &source, DeepCopyCacheType &cache)
 {
     return DATA_TYPE::dynamicCast( ::fwData::Object::copy(::fwData::Object::csptr(source), cache) );
 }
 
-
 template <typename DATA_TYPE>
 SPTR(DATA_TYPE) Object::copy(const SPTR(DATA_TYPE) &source, DeepCopyCacheType &cache)
 {
diff --git a/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp b/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
index fdf6e0c..29ec6e5 100644
--- a/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
+++ b/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWDATA_TRANSFORMATIONMATRIX3D_HPP__
 #define __FWDATA_TRANSFORMATIONMATRIX3D_HPP__
 
-#include "fwData/factory/new.hpp"
 #include "fwData/Object.hpp"
+#include "fwData/factory/new.hpp"
 
 #include <array>
 #include <iostream>
-#include <assert.h>
 
 fwCampAutoDeclareDataMacro((fwData)(TransformationMatrix3D), FWDATA_API);
 
@@ -47,11 +46,11 @@ public:
     FWDATA_API void shallowCopy( const Object::csptr& _source );
 
     /// Defines deep copy
-    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
+    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache);
 
     /// Getters/setters
-    TMCoefArray & getRefCoefficients ();
-    const TMCoefArray & getCoefficients () const;
+    TMCoefArray& getRefCoefficients ();
+    const TMCoefArray& getCoefficients () const;
     void setCoefficients (const TMCoefArray& _vCoefficients);
 
     /**
@@ -87,14 +86,14 @@ protected:
 
 //-----------------------------------------------------------------------------
 
-inline TransformationMatrix3D::TMCoefArray &TransformationMatrix3D::getRefCoefficients()
+inline TransformationMatrix3D::TMCoefArray& TransformationMatrix3D::getRefCoefficients()
 {
     return this->m_vCoefficients;
 }
 
 //-----------------------------------------------------------------------------
 
-inline const TransformationMatrix3D::TMCoefArray &TransformationMatrix3D::getCoefficients() const
+inline const TransformationMatrix3D::TMCoefArray& TransformationMatrix3D::getCoefficients() const
 {
     return this->m_vCoefficients;
 }
diff --git a/SrcLib/core/fwData/include/fwData/factory/new.hpp b/SrcLib/core/fwData/include/fwData/factory/new.hpp
index dffe59e..ad194ba 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,9 @@
 #ifndef __FWDATA_FACTORY_NEW_HPP__
 #define __FWDATA_FACTORY_NEW_HPP__
 
-
 #include "fwData/config.hpp"
 #include "fwData/registry/detail.hpp"
 
-#include <fwTools/macros.hpp>
-#include <fwTools/DynamicAttributes.hxx>
-
 #include <string>
 
 namespace fwData
@@ -24,7 +20,6 @@ class Object;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -42,19 +37,11 @@ private:
     }
 };
 
-
 FWDATA_API SPTR( ::fwData::Object ) New( const ::fwData::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;
 }
 
@@ -64,4 +51,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWDATA_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwData/include/fwData/location/ILocation.hpp b/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
index e714818..22e5f28 100644
--- a/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
+++ b/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWDATA_LOCATION_ILOCATION_HPP__
 #define __FWDATA_LOCATION_ILOCATION_HPP__
 
-#include "fwData/config.hpp"
 #include "fwData/Object.hpp"
+#include "fwData/config.hpp"
 
+#include <boost/filesystem/path.hpp>
 
 namespace fwData
 {
 /**
- * @namespace ::fwData::location
  * @brief This namespace contains the classes which define a %location ( fileSystem, directory(IES) etc.... ).
  */
 namespace location
@@ -42,13 +42,12 @@ protected:
     FWDATA_API virtual ~ILocation();
 };
 
-
 /**
  * @brief Get reader or writer %location
  * @param[in] rw reader or writer
  */
 template<class LOCATION, class RW >
-inline typename LOCATION::sptr getLocation(RW *rw)
+inline typename LOCATION::sptr getLocation(RW* rw)
 {
     SLM_ASSERT("rw not instanced", rw);
     typename LOCATION::sptr location;
@@ -63,7 +62,7 @@ inline typename LOCATION::sptr getLocation(RW *rw)
 
 /// test if a Reader/writer (ie a class implementing get/setLocation) have an specialized LOCATION
 template<class LOCATION, class RW >
-inline bool have(RW *rw)
+inline bool have(RW* rw)
 {
     return (LOCATION::dynamicCast( rw->getLocation() )) ? true : false;
 }
diff --git a/SrcLib/core/fwData/include/fwData/pch.hpp b/SrcLib/core/fwData/include/fwData/pch.hpp
new file mode 100644
index 0000000..3dd01d0
--- /dev/null
+++ b/SrcLib/core/fwData/include/fwData/pch.hpp
@@ -0,0 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATA_PCH_HPP__
+#define __FWDATA_PCH_HPP__
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+
+#include <fwCore/base.hpp>
+#include <fwCore/macros.hpp>
+#include <fwCore/mt/types.hpp>
+#include <fwCore/util/FactoryRegistry.hpp>
+
+#include <fwTools/Object.hpp>
+
+#include <string>
+#include <unordered_map>
+
+#endif // __FWDATA_PCH_HPP__
diff --git a/SrcLib/core/fwData/src/fwData/Boolean.cpp b/SrcLib/core/fwData/src/fwData/Boolean.cpp
index 6ab5332..67f3bf6 100644
--- a/SrcLib/core/fwData/src/fwData/Boolean.cpp
+++ b/SrcLib/core/fwData/src/fwData/Boolean.cpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Boolean.hpp"
 
-#include "fwData/Object.hpp"
+#include "fwData/Exception.hpp"
 #include "fwData/GenericField.hpp"
-#include "fwData/Boolean.hpp"
+#include "fwData/registry/macros.hpp"
 
 fwDataRegisterMacro( ::fwData::Boolean );
 
@@ -18,7 +17,8 @@ namespace fwData
 
 //------------------------------------------------------------------------------
 
-Boolean::Boolean( ::fwData::Object::Key key  ) throw() : GenericField< bool >( false )
+Boolean::Boolean( ::fwData::Object::Key key  ) throw() :
+    GenericField< bool >( false )
 {
 }
 
@@ -29,7 +29,7 @@ Boolean::~Boolean() throw()
 }
 
 //------------------------------------------------------------------------------
-void Boolean::shallowCopy(const Object::csptr &_source )
+void Boolean::shallowCopy(const Object::csptr& _source )
 {
     Boolean::csptr other = Boolean::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -41,7 +41,7 @@ void Boolean::shallowCopy(const Object::csptr &_source )
 
 //------------------------------------------------------------------------------
 
-void Boolean::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
+void Boolean::cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache)
 {
     Boolean::csptr other = Boolean::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
diff --git a/SrcLib/core/fwData/src/fwData/Float.cpp b/SrcLib/core/fwData/src/fwData/Float.cpp
index af7dd9b..7111668 100644
--- a/SrcLib/core/fwData/src/fwData/Float.cpp
+++ b/SrcLib/core/fwData/src/fwData/Float.cpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Float.hpp"
 
-#include "fwData/Object.hpp"
+#include "fwData/Exception.hpp"
 #include "fwData/GenericField.hpp"
-#include "fwData/Float.hpp"
+#include "fwData/registry/macros.hpp"
 
 fwDataRegisterMacro( ::fwData::Float );
 
@@ -35,7 +34,7 @@ Float::~Float() throw()
 }
 
 //------------------------------------------------------------------------------
-void Float::shallowCopy(const Object::csptr &_source )
+void Float::shallowCopy(const Object::csptr& _source )
 {
     Float::csptr other = Float::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -47,7 +46,7 @@ void Float::shallowCopy(const Object::csptr &_source )
 
 //------------------------------------------------------------------------------
 
-void Float::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
+void Float::cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache)
 {
     Float::csptr other = Float::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -57,5 +56,4 @@ void Float::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
     m_value = other->m_value;
 }
 
-
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Image.cpp b/SrcLib/core/fwData/src/fwData/Image.cpp
index e9deac5..88777b4 100644
--- a/SrcLib/core/fwData/src/fwData/Image.cpp
+++ b/SrcLib/core/fwData/src/fwData/Image.cpp
@@ -1,28 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/registry/macros.hpp"
-#include "fwData/registry/macros.hpp"
+
 #include "fwData/Exception.hpp"
+#include "fwData/registry/macros.hpp"
 
-#include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
 
-#include <fwCore/base.hpp>
-
 #include <fwTools/DynamicType.hpp>
 #include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 
-#include <climits>
+#include <boost/assign.hpp>
+
 #include <numeric>
-#include <functional>
-#include <algorithm>
-#include <sstream>
 
 //------------------------------------------------------------------------------
 
@@ -76,7 +70,7 @@ Image::~Image() throw()
 
 //-----------------------------------------------------------------------------
 
-void Image::shallowCopy(const Object::csptr &_source )
+void Image::shallowCopy(const Object::csptr& _source )
 {
     Image::csptr other = Image::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -92,7 +86,7 @@ void Image::shallowCopy(const Object::csptr &_source )
 
 //-----------------------------------------------------------------------------
 
-void Image::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
+void Image::cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache)
 {
     Image::csptr other = Image::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -134,7 +128,6 @@ void Image::setDataArray(::fwData::Array::sptr array, bool copyArrayInfo)
 
 //------------------------------------------------------------------------------
 
-
 size_t Image::allocate() throw(::fwData::Exception)
 {
     if (!m_dataArray)
@@ -149,7 +142,7 @@ 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)
+                       const ::fwTools::Type& type, size_t numberOfComponents) throw(::fwData::Exception)
 {
     m_size               = { x, y, z};
     m_type               = type;
@@ -159,7 +152,7 @@ size_t Image::allocate(SizeType::value_type x, SizeType::value_type y,  SizeType
 
 //------------------------------------------------------------------------------
 
-size_t Image::allocate(const SizeType &size, const ::fwTools::Type &type, size_t numberOfComponents)
+size_t Image::allocate(const SizeType& size, const ::fwTools::Type& type, size_t numberOfComponents)
 throw(::fwData::Exception)
 {
     m_size               = size;
@@ -225,7 +218,7 @@ void Image::setType(::fwTools::Type type)
 
 //------------------------------------------------------------------------------
 
-void Image::setType(const std::string &type)
+void Image::setType(const std::string& type)
 {
     m_type = ::fwTools::Type(type);
 }
@@ -252,42 +245,42 @@ size_t Image::getNumberOfDimensions() const
 
 //------------------------------------------------------------------------------
 
-const Image::SpacingType & Image::getSpacing() const
+const Image::SpacingType& Image::getSpacing() const
 {
     return m_spacing;
 }
 
 //------------------------------------------------------------------------------
 
-void Image::setSpacing(const SpacingType &spacing)
+void Image::setSpacing(const SpacingType& spacing)
 {
     m_spacing = spacing;
 }
 
 //------------------------------------------------------------------------------
 
-const Image::OriginType & Image::getOrigin() const
+const Image::OriginType& Image::getOrigin() const
 {
     return m_origin;
 }
 
 //------------------------------------------------------------------------------
 
-void Image::setOrigin(const OriginType &origin)
+void Image::setOrigin(const OriginType& origin)
 {
     m_origin = origin;
 }
 
 //------------------------------------------------------------------------------
 
-const Image::SizeType & Image::getSize() const
+const Image::SizeType& Image::getSize() const
 {
     return m_size;
 }
 
 //------------------------------------------------------------------------------
 
-void Image::setSize(const SizeType &size)
+void Image::setSize(const SizeType& size)
 {
     m_size = size;
 }
diff --git a/SrcLib/core/fwData/src/fwData/Integer.cpp b/SrcLib/core/fwData/src/fwData/Integer.cpp
index e8b277b..0890e03 100644
--- a/SrcLib/core/fwData/src/fwData/Integer.cpp
+++ b/SrcLib/core/fwData/src/fwData/Integer.cpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Object.hpp"
-#include "fwData/GenericField.hpp"
 #include "fwData/Integer.hpp"
 
+#include "fwData/Exception.hpp"
+#include "fwData/GenericField.hpp"
+#include "fwData/registry/macros.hpp"
 
 fwDataRegisterMacro( ::fwData::Integer );
 
@@ -30,7 +28,7 @@ Integer::~Integer() throw()
 
 //------------------------------------------------------------------------------
 
-void Integer::shallowCopy(const Object::csptr &_source )
+void Integer::shallowCopy(const Object::csptr& _source )
 {
     Integer::csptr other = Integer::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -42,7 +40,7 @@ void Integer::shallowCopy(const Object::csptr &_source )
 
 //------------------------------------------------------------------------------
 
-void Integer::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
+void Integer::cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache)
 {
     Integer::csptr other = Integer::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
diff --git a/SrcLib/core/fwData/test/tu/src/CopyTest.cpp b/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
index ced5835..88bce00 100644
--- a/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
@@ -1,9 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "CopyTest.hpp"
+
 #include <fwData/Array.hpp>
 #include <fwData/Boolean.hpp>
 #include <fwData/Color.hpp>
@@ -19,18 +21,17 @@
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Node.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/Plane.hpp>
 #include <fwData/PlaneList.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/Port.hpp>
 #include <fwData/ProcessObject.hpp>
+#include <fwData/ROITraits.hpp>
 #include <fwData/Reconstruction.hpp>
 #include <fwData/ReconstructionTraits.hpp>
 #include <fwData/Resection.hpp>
 #include <fwData/ResectionDB.hpp>
-#include <fwData/ROITraits.hpp>
 #include <fwData/Spline.hpp>
 #include <fwData/String.hpp>
 #include <fwData/StructureTraits.hpp>
@@ -43,9 +44,6 @@
 #include <fwData/location/MultiFiles.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include "CopyTest.hpp"
-
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::CopyTest);
 
@@ -136,7 +134,6 @@ void CopyTest::severalReferencesCopyTest()
     CPPUNIT_ASSERT_EQUAL((*compositeCopy)["A"], compositeCopy->getField("F2"));
     CPPUNIT_ASSERT_EQUAL((*compositeCopy)["A"], (*compositeCopy)["B"]);
 
-
     ::fwData::Vector::sptr vector = ::fwData::Vector::New();
 
     vector->getContainer().push_back(composite);
@@ -150,8 +147,6 @@ void CopyTest::severalReferencesCopyTest()
     CPPUNIT_ASSERT_EQUAL((*vectorCopy)[0], vectorCopy->getField("F2"));
     CPPUNIT_ASSERT_EQUAL((*vectorCopy)[0], (*vectorCopy)[1]);
 
-
-
     ::fwData::List::sptr list = ::fwData::List::New();
 
     list->getContainer().push_back(vector);
@@ -179,7 +174,6 @@ void CopyTest::recursiveCopyTest()
     ::fwData::Vector::sptr vectorCopy;
     ::fwData::List::sptr listCopy;
 
-
     (*composite)["A"] = composite;
     (*composite)["B"] = composite;
 
@@ -192,8 +186,6 @@ void CopyTest::recursiveCopyTest()
     CPPUNIT_ASSERT_EQUAL((*compositeCopy)["A"], compositeCopy->getField("F2"));
     CPPUNIT_ASSERT_EQUAL((*compositeCopy)["A"], (*compositeCopy)["B"]);
 
-
-
     vector->getContainer().push_back(vector);
     vector->getContainer().push_back(vector);
     vector->setField("F1", vector);
@@ -205,9 +197,6 @@ void CopyTest::recursiveCopyTest()
     CPPUNIT_ASSERT_EQUAL((*vectorCopy)[0], vectorCopy->getField("F2"));
     CPPUNIT_ASSERT_EQUAL((*vectorCopy)[0], (*vectorCopy)[1]);
 
-
-
-
     list->getContainer().push_back(list);
     list->getContainer().push_back(list);
     list->setField("F1", list);
@@ -219,7 +208,6 @@ void CopyTest::recursiveCopyTest()
     CPPUNIT_ASSERT_EQUAL((*listCopy).front(), listCopy->getField("F2"));
     CPPUNIT_ASSERT_EQUAL((*listCopy).front(), (*listCopy).back());
 
-
     ::fwData::Object::FieldMapType zeroFields;
     composite->getContainer().clear();
     vector->getContainer().clear();
@@ -237,13 +225,10 @@ void CopyTest::recursiveCopyTest()
     list->getContainer().push_back(vector);
     list->setField("F1", vector);
 
-
     compositeCopy = ::fwData::Object::copy(composite);
     vectorCopy    = ::fwData::Object::copy(vector);
     listCopy      = ::fwData::Object::copy(list);
 
-
-
     CPPUNIT_ASSERT( list != compositeCopy->getField("F1") );
     CPPUNIT_ASSERT( list != (*compositeCopy)["A"] );
     CPPUNIT_ASSERT( vector != listCopy->getField("F1") );
@@ -255,7 +240,6 @@ void CopyTest::recursiveCopyTest()
     CPPUNIT_ASSERT_EQUAL((*vectorCopy)[0], vectorCopy->getField("F1"));
     CPPUNIT_ASSERT_EQUAL((*compositeCopy)["A"], compositeCopy->getField("F1"));
 
-
     //ensures copy cache is not persistant
     CPPUNIT_ASSERT( listCopy != compositeCopy->getField("F1") );
     CPPUNIT_ASSERT( listCopy != (*composite)["A"] );
@@ -282,7 +266,6 @@ void CopyTest::recursiveCopyTest()
         CPPUNIT_ASSERT_EQUAL(insideComposite, C(insideComposite->getField("F1")->getField("F1")->getField("F1")));
     }
 
-
     //list->vector->composite->list
     {
         ::fwData::Vector::sptr insideVector       = V(listCopy->front());
@@ -311,9 +294,6 @@ void CopyTest::recursiveCopyTest()
         CPPUNIT_ASSERT_EQUAL(insideComposite, C(insideComposite->getField("F1")->getField("F1")->getField("F1")));
     }
 
-
-
-
     composite->getContainer().clear();
     vector->getContainer().clear();
     list->getContainer().clear();
@@ -330,7 +310,6 @@ void CopyTest::recursiveCopyTest()
     list->getContainer().push_back(vector);
     list->setField("F1", composite);
 
-
     compositeCopy = ::fwData::Object::copy(composite);
 
     {
@@ -343,7 +322,6 @@ void CopyTest::recursiveCopyTest()
         ::fwData::Vector::sptr insideVector      = V(fieldList->front());
         ::fwData::Composite::sptr fieldComposite = C(fieldList->getField("F1"));
 
-
         CPPUNIT_ASSERT_EQUAL(compositeCopy, insideComposite );
         CPPUNIT_ASSERT_EQUAL(insideComposite, fieldComposite );
         CPPUNIT_ASSERT_EQUAL(fieldVector, insideVector );
diff --git a/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp b/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
index ab57348..f87bf34 100644
--- a/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
@@ -1,19 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "ObjectTest.hpp"
 
+#include <fwData/Float.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::ObjectTest );
 
-
 namespace fwData
 {
 namespace ut
@@ -56,7 +53,7 @@ void ObjectTest::fieldTest()
 
     ::fwData::Object::FieldMapType localFields       = obj->getFields();
     ::fwData::Object::FieldMapType localFieldsBackup = obj->getFields();
-    localFields.insert( ::fwData::Object::FieldMapType::value_type(FIELD_ID2,fieldObj2));
+    localFields.insert( ::fwData::Object::FieldMapType::value_type(FIELD_ID2, fieldObj2));
 
     CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
     CPPUNIT_ASSERT_EQUAL(obj->getField(FIELD_ID1), fieldObj1);
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/core/fwDataCamp/CMakeLists.txt
index 1c29206..a16777b 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/core/fwDataCamp/CMakeLists.txt
@@ -1,2 +1,3 @@
 fwLoadProperties()
 
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwDataCamp/Properties.cmake b/SrcLib/core/fwDataCamp/Properties.cmake
index 3f7c35d..8164ca1 100644
--- a/SrcLib/core/fwDataCamp/Properties.cmake
+++ b/SrcLib/core/fwDataCamp/Properties.cmake
@@ -2,6 +2,5 @@
 set( NAME fwDataCamp )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwData fwMedData )
+set( DEPENDENCIES fwData )
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/pch.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/pch.hpp
new file mode 100644
index 0000000..d69b494
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/pch.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATACAMP_PCH_HPP__
+#define __FWDATACAMP_PCH_HPP__
+
+// This pch would look identical to pchData, but the big difference is that it is compiled with -DCAMP_COMPILATION
+
+#include <fwCamp/UserObject.hpp>
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+
+#include <fwData/Object.hpp>
+#include <fwData/camp/mapper.hpp>
+
+#endif // __FWDATACAMP_PCH_HPP__
diff --git a/SrcLib/core/fwDataCamp/src/autoload.cpp b/SrcLib/core/fwDataCamp/src/autoload.cpp
index bef8e37..22cf56f 100644
--- a/SrcLib/core/fwDataCamp/src/autoload.cpp
+++ b/SrcLib/core/fwDataCamp/src/autoload.cpp
@@ -1,19 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwDataCamp/autoload.hpp"
-#include "fwMedDataCamp/autoload.hpp"
-
 
 namespace fwDataCamp
 {
 runner runner::r;
 }
-
-namespace fwMedDataCamp
-{
-runner runner::r;
-}
diff --git a/SrcLib/core/fwDataCamp/test/CMakeLists.txt b/SrcLib/core/fwDataCamp/test/CMakeLists.txt
index dddc271..366e06c 100644
--- a/SrcLib/core/fwDataCamp/test/CMakeLists.txt
+++ b/SrcLib/core/fwDataCamp/test/CMakeLists.txt
@@ -1,4 +1,5 @@
 fwLoadProperties()
+
 find_package(CppUnit)
 find_package(CAMP REQUIRED)
 
@@ -11,3 +12,4 @@ fwLink(
     ${CPPUNIT_LIBRARY}
 )
 
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/core/fwDataCamp/test/Properties.cmake b/SrcLib/core/fwDataCamp/test/Properties.cmake
index b0a7fa8..ffcb4c5 100644
--- a/SrcLib/core/fwDataCamp/test/Properties.cmake
+++ b/SrcLib/core/fwDataCamp/test/Properties.cmake
@@ -2,6 +2,5 @@
 set( NAME fwDataCampTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwAtoms fwAtomConversion fwDataCamp fwMedData fwData)
+set( DEPENDENCIES fwCore fwTest fwTools fwAtoms fwAtomConversion fwDataCamp fwData)
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp
index 5676657..a80421b 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,7 +17,6 @@ namespace ut
 class CompareObjectsTest :  public CPPUNIT_NS::TestFixture
 {
 CPPUNIT_TEST_SUITE( CompareObjectsTest );
-CPPUNIT_TEST( compareSeriesDBTest );
 CPPUNIT_TEST( compareImageTest );
 CPPUNIT_TEST( compareReconstructionTest );
 CPPUNIT_TEST( compareBufferTest );
@@ -31,7 +30,6 @@ public:
     void setUp();
     void tearDown();
 
-    void compareSeriesDBTest();
     void compareImageTest();
     void compareReconstructionTest();
     void compareBufferTest();
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
index 515687d..a79271c 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
@@ -1,32 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
+#include "CompareObjectsTest.hpp"
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
 #include <fwCore/Exception.hpp>
 
 #include <fwData/Composite.hpp>
 #include <fwData/Float.hpp>
-#include <fwData/Integer.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/Reconstruction.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
-#include <fwMedData/Series.hpp>
-#include <fwMedData/Patient.hpp>
-#include <fwMedData/Study.hpp>
-
 #include <fwTest/generator/Image.hpp>
 #include <fwTest/generator/SeriesDB.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
-
 #include <fwTools/Type.hpp>
 
-#include "CompareObjectsTest.hpp"
-
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataCamp::ut::CompareObjectsTest );
 
@@ -51,50 +46,6 @@ void CompareObjectsTest::tearDown()
 
 //-----------------------------------------------------------------------------
 
-void CompareObjectsTest::compareSeriesDBTest()
-{
-    ::fwMedData::SeriesDB::sptr seriesDBRef  = ::fwTest::generator::SeriesDB::createSeriesDB(1, 1, 1);
-    ::fwMedData::SeriesDB::sptr seriesDBComp = ::fwData::Object::copy< ::fwMedData::SeriesDB >(seriesDBRef);
-
-    {
-        visitor::CompareObjects visitor;
-        visitor.compare(seriesDBRef, seriesDBComp);
-
-        SPTR(visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-        CPPUNIT_ASSERT_EQUAL(size_t(0), props->size());
-    }
-
-    {
-        CPPUNIT_ASSERT_EQUAL(size_t(3), seriesDBComp->getContainer().size());
-        ::fwMedData::Series::sptr series = seriesDBComp->getContainer()[0];
-        CPPUNIT_ASSERT(series);
-
-        ::fwMedData::Patient::sptr patient = series->getPatient();
-        const std::string name = patient->getName() + "X";
-
-        patient->setName(name);
-        patient->setSex("M");
-        patient->setPatientId("42");
-
-        visitor::CompareObjects visitor;
-        visitor.compare(seriesDBRef, seriesDBComp);
-
-        SPTR(visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-        CPPUNIT_ASSERT_EQUAL(props->size(), (size_t)3);
-
-        CPPUNIT_ASSERT(props->find("values.0.patient.name") != props->end());
-        CPPUNIT_ASSERT_EQUAL(name, (*props)["values.0.patient.name"]);
-
-        CPPUNIT_ASSERT(props->find("values.0.patient.patient_id") != props->end());
-        CPPUNIT_ASSERT_EQUAL(std::string("42"), (*props)["values.0.patient.patient_id"]);
-
-        CPPUNIT_ASSERT(props->find("values.0.patient.sex") != props->end());
-        CPPUNIT_ASSERT_EQUAL(std::string("M"), (*props)["values.0.patient.sex"]);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
 void CompareObjectsTest::compareImageTest()
 {
     ::fwTools::Type type      = ::fwTools::Type::create< float >();
@@ -207,10 +158,10 @@ void CompareObjectsTest::compareEmpty()
 void CompareObjectsTest::exceptionTest()
 {
     ::fwData::Image::sptr img      = ::fwData::Image::New();
-    ::fwMedData::Study::sptr study = ::fwMedData::Study::New();
+    ::fwData::Composite::sptr comp = ::fwData::Composite::New();
 
     visitor::CompareObjects visitor;
-    CPPUNIT_ASSERT_THROW(visitor.compare(img, study), ::fwCore::Exception);
+    CPPUNIT_ASSERT_THROW(visitor.compare(img, comp), ::fwCore::Exception);
 
     CPPUNIT_ASSERT_EQUAL(visitor.getReferenceProps().size(), (size_t)0);
     CPPUNIT_ASSERT_EQUAL(visitor.getComparedProps().size(), (size_t)0);
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
index e5e9e71..f628e5a 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
@@ -4,6 +4,12 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "GetObjectTest.hpp"
+
+#include <fwDataCamp/exception/NullPointer.hpp>
+#include <fwDataCamp/exception/ObjectNotFound.hpp>
+#include <fwDataCamp/getObject.hpp>
+
 #include <fwData/Composite.hpp>
 #include <fwData/Float.hpp>
 #include <fwData/Image.hpp>
@@ -12,17 +18,8 @@
 #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 "GetObjectTest.hpp"
-
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataCamp::ut::GetObjectTest );
 
@@ -67,12 +64,6 @@ void GetObjectTest::getTest()
                            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() );
-
-    // Visit 4
     composite->setField("toto", img1);
     img1->setField("titi", img2);
     ::fwData::Object::sptr subObj2 = ::fwDataCamp::getObject( composite, "@fields.toto.fields.titi" );
@@ -117,16 +108,6 @@ void GetObjectTest::invalidPathTest()
         );
     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
diff --git a/SrcLib/core/fwDataIO/CMakeLists.txt b/SrcLib/core/fwDataIO/CMakeLists.txt
index 1b362df..24531d1 100644
--- a/SrcLib/core/fwDataIO/CMakeLists.txt
+++ b/SrcLib/core/fwDataIO/CMakeLists.txt
@@ -1,8 +1,7 @@
 fwLoadProperties()
 
-
 #racy compatibility
-add_definitions(-DPRJ_NAME=\"${NAME}\")
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE PRJ_NAME="${NAME}")
 
 find_package(ZLIB REQUIRED )
 
diff --git a/SrcLib/core/fwDataIO/Properties.cmake b/SrcLib/core/fwDataIO/Properties.cmake
index d9aeec0..daf91ba 100644
--- a/SrcLib/core/fwDataIO/Properties.cmake
+++ b/SrcLib/core/fwDataIO/Properties.cmake
@@ -10,4 +10,4 @@ set( DEPENDENCIES
     fwJobs
 )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
index c2a7c46..09d06a4 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,39 @@
 #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.
- *
- */
+/// This namespace fwDataIO contains reader and writer for several framework's data.
 namespace fwDataIO
 {
-}
+
+/// This namespace fwDataIO::reader contains reader for several framework's data.
+namespace reader
+{
+/// Contains fwDataIO::reader::factory utilities
+namespace factory
+{
+} // namespace factory
+
+/// Contains fwDataIO::reader::registry details
+namespace registry
+{
+} // namespace registry
+
+} // namespace reader
+
+/// This namespace fwDataIO::writer contains writer for several framework's data.
+namespace writer
+{
+
+/// Contains fwDataIO::writer::factory utilities
+namespace factory
+{
+} // namespace factory
+
+/// Contains fwDataIO::writer::registry details
+namespace registry
+{
+} // namespace registry
+} // namespace writer
+} // namespace fwDataIO
+
 #endif /* __FWDATAIO_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp
deleted file mode 100644
index 39525b1..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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 __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.
- *
- */
-namespace reader
-{
-
-}
-}
-#endif /* __FWDATAIO_READER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp
deleted file mode 100644
index e7ce2a4..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** 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 __FWDATAIO_READER_FACTORY_NAMESPACE_HPP__
-#define __FWDATAIO_READER_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwDataIO
-{
-namespace reader
-{
-
-/**
- * @brief       Contains fwDataIO::reader::factory utilities
- * @namespace   fwDataIO::reader::factory
- *
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace reader
-} // namespace fwDataIO
-
-#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 2d63a61..45ef1ae 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWDATAIO_READER_FACTORY_NEW_HPP__
 #define __FWDATAIO_READER_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-#include <fwTools/DynamicAttributes.hxx>
-
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/registry/detail.hpp"
 
+#include <string>
+
 namespace fwDataIO
 {
 namespace reader
@@ -26,7 +22,6 @@ class IObjectReader;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -43,10 +38,8 @@ Key()
 }
 };
 
-
 FWDATAIO_API SPTR( ::fwDataIO::reader::IObjectReader ) New( const ::fwDataIO::reader::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
@@ -62,4 +55,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWDATAIO_READER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp
deleted file mode 100644
index 7a29ccd..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** 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 __FWDATAIO_READER_REGISTRY_NAMESPACE_HPP__
-#define __FWDATAIO_READER_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwDataIO
-{
-namespace reader
-{
-
-/**
- * @brief       Contains fwDataIO::reader::registry details
- * @namespace   fwDataIO::reader::registry
- *
- * @date        2009-2012
- *
- */
-namespace registry
-{
-} // namespace registry
-} // namespace reader
-
-} // namespace fwDataIO
-
-#endif /* __FWDATAIO_READER_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp
deleted file mode 100644
index 8dbd60c..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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 __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.
- *
- */
-namespace writer
-{
-
-}
-}
-#endif /* __FWDATAIO_WRITER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp
deleted file mode 100644
index 4c76afa..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** 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 __FWDATAIO_WRITER_FACTORY_NAMESPACE_HPP__
-#define __FWDATAIO_WRITER_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwDataIO
-{
-namespace writer
-{
-
-/**
- * @brief       Contains fwDataIO::writer::factory utilities
- * @namespace   fwDataIO::reader::factory
- *
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace writer
-} // namespace fwDataIO
-
-#endif /* __FWDATAIO_WRITER_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp
index 798f800..9c5f45a 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWDATAIO_WRITER_FACTORY_NEW_HPP__
 #define __FWDATAIO_WRITER_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-#include <fwTools/DynamicAttributes.hxx>
-
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/writer/registry/detail.hpp"
 
+#include <string>
+
 namespace fwDataIO
 {
 namespace writer
@@ -26,7 +22,6 @@ class IObjectWriter;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -43,10 +38,8 @@ Key()
 }
 };
 
-
 FWDATAIO_API SPTR( ::fwDataIO::writer::IObjectWriter ) New( const ::fwDataIO::writer::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
@@ -62,4 +55,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWDATAIO_WRITER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp
deleted file mode 100644
index d5f5ef5..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** 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 __FWDATAIO_WRITER_REGISTRY_NAMESPACE_HPP__
-#define __FWDATAIO_WRITER_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwDataIO
-{
-namespace writer
-{
-
-/**
- * @brief       Contains fwDataIO::writer::registry details
- * @namespace   fwDataIO::reader::registry
- *
- * @date        2009-2012
- *
- */
-namespace registry
-{
-} // namespace registry
-} // namespace writer
-
-} // namespace fwDataIO
-
-#endif /* __FWDATAIO_WRITER_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp
index e806d45..994b86c 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@ static std::stringstream spiritDebugStream;
 
 #include <fwCore/exceptionmacros.hpp>
 
-#include <fwData/Object.hpp>
 #include <fwData/Color.hpp>
 #include <fwData/StructureTraitsDictionary.hpp>
 #include <fwData/StructureTraits.hpp>
@@ -53,7 +52,6 @@ static std::stringstream spiritDebugStream;
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::DictionaryReader );
 
-
 namespace fwDataIO
 {
 
@@ -94,7 +92,7 @@ BOOST_FUSION_ADAPT_STRUCT(
 
 //------------------------------------------------------------------------------
 
-inline std::string trim ( std::string &s )
+inline std::string trim ( std::string& s )
 {
     return ::boost::algorithm::trim_copy(s);
 }
@@ -105,7 +103,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);
 }
@@ -114,7 +112,7 @@ std::string  reformatString(std::string& expr)
 /// Return the list of availabe value for the key of the map m.
 
 template< typename MapType >
-std::string getValues(const MapType & m)
+std::string getValues(const MapType& m)
 {
     std::stringstream str;
     typedef typename MapType::const_iterator const_iterator;
@@ -135,11 +133,11 @@ namespace fwDataIO
 namespace qi    = boost::spirit::qi;
 namespace ascii = boost::spirit::ascii;
 
-
 template <typename Iterator>
 struct line_parser : qi::grammar<Iterator, std::vector <line>() >
 {
-    line_parser() : line_parser::base_type(lines)
+    line_parser() :
+        line_parser::base_type(lines)
     {
         using qi::int_;
         using qi::lit;
@@ -186,7 +184,6 @@ struct line_parser : qi::grammar<Iterator, std::vector <line>() >
         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
@@ -204,7 +201,7 @@ struct line_parser : qi::grammar<Iterator, std::vector <line>() >
         qi::on_error< qi::fail>
         (
             line
-            , phx::ref( (std::ostream &)error )
+            , phx::ref( (std::ostream&)error )
             << phx::val("Error! Expecting ")
             << qi::_4                              // what failed?
             << phx::val(" here: \"")
@@ -232,8 +229,10 @@ struct line_parser : qi::grammar<Iterator, std::vector <line>() >
 
 namespace reader
 {
+//------------------------------------------------------------------------------
+
 template <typename Iterator>
-std::pair<bool,std::string> parse(Iterator first,  Iterator last, std::string& buf, std::vector<fwDataIO::line>& lines)
+std::pair<bool, std::string> parse(Iterator first,  Iterator last, std::string& buf, std::vector<fwDataIO::line>& lines)
 {
     using boost::spirit::ascii::space;
     using boost::spirit::ascii::blank;
@@ -257,8 +256,8 @@ std::pair<bool,std::string> parse(Iterator first,  Iterator last, std::string& b
 
 //------------------------------------------------------------------------------
 
-DictionaryReader::DictionaryReader(::fwDataIO::reader::IObjectReader::Key key)
-    : ::fwData::location::enableSingleFile< IObjectReader >(this)
+DictionaryReader::DictionaryReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< IObjectReader >(this)
 {
 }
 
@@ -288,20 +287,18 @@ void DictionaryReader::read()
     std::string errorOpen = "Unable to open " + path.string();
     FW_RAISE_IF(errorOpen, !file.is_open());
 
-    file.seekg (0, std::ios::end);
+    file.seekg(0, std::ios::end);
     length = file.tellg();
-    file.seekg (0, std::ios::beg);
-
+    file.seekg(0, std::ios::beg);
 
     buf.resize(length);
-    char *buffer = &buf[0];
+    char* buffer = &buf[0];
 
-    file.read (buffer, length);
+    file.read(buffer, length);
     file.close();
 
-
     std::vector < ::fwDataIO::line > dicolines;
-    std::pair<bool,std::string> result = parse(buffer, buffer+length, buf, dicolines);
+    std::pair<bool, std::string> result = parse(buffer, buffer+length, buf, dicolines);
 
     std::string error = "Unable to parse " + path.string() + " : Bad file format.Error : " + result.second;
     FW_RAISE_IF(error, !result.first);
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
index dfd4998..f0d5bcc 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "fwDataIO/reader/registry/macros.hpp"
 
 #include <fwData/Image.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/location/SingleFile.hpp>
 
 #include <fwDataTools/helper/Image.hpp>
@@ -20,10 +19,8 @@
 
 #include <iostream>
 
-
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::GzBufferImageReader );
 
-
 namespace fwDataIO
 {
 
@@ -32,9 +29,10 @@ 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)
 {
 }
 
@@ -51,7 +49,7 @@ void GzBufferImageReader::read()
     assert( ::fwData::location::SingleFile::dynamicCast(m_location) );
     ::boost::filesystem::path file = ::fwData::location::SingleFile::dynamicCast(m_location)->getPath();
 
-    assert( file.empty() ==  false );
+    assert( file.empty() == false );
 
     ::fwData::Image::sptr image = getConcreteObject();
     size_t imageSizeInBytes = image->getSizeInBytes();
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
index 71170f0..f72d29d 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "fwDataIO/reader/registry/macros.hpp"
 
 #include <fwData/Mesh.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/location/SingleFile.hpp>
 
 #include <fwDataTools/helper/Array.hpp>
@@ -28,7 +27,6 @@
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::MeshReader );
 
-
 namespace fwDataIO
 {
 
@@ -43,6 +41,8 @@ struct cell_data_offset_generator {
     {
         current = 0;
     }
+    //------------------------------------------------------------------------------
+
     int operator()()
     {
         ::fwData::Mesh::CellDataOffsetType res = current;
@@ -53,7 +53,6 @@ struct cell_data_offset_generator {
 
 //------------------------------------------------------------------------------
 
-
 template <typename Iterator>
 bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
 {
@@ -76,7 +75,6 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
     unsigned long long int nbPoints;
     unsigned long long int nbCells;
 
-
     mesh->allocateCellNormals();
 
     ::fwData::Array::sptr pointArray           = mesh->getPointsArray();
@@ -91,7 +89,6 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
     ::fwDataTools::helper::Array cellDataOffsetsHelper(cellDataOffsetsArray);
     ::fwDataTools::helper::Array cellTypesHelper(cellTypesArray);
 
-
     ::fwData::Array::SizeType pointArraySize;
     ::fwData::Array::SizeType cellArraySize;
 
@@ -107,10 +104,10 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
                               [
                                   ref(nbPoints) = _1,
                                   phx::bind(&::fwData::Mesh::setNumberOfPoints, mesh, _1),
-                                  phx::push_back(phx::ref(pointArraySize),phx::ref(nbPoints)),
+                                  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 >,
+                                      phx::bind(&::fwDataTools::helper::Array::begin < ::fwData::Mesh::PointValueType >,
                                                 &pointHelper )
                               ]
 
@@ -131,10 +128,11 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
                                   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 >,
+                                      phx::bind(&::fwDataTools::helper::Array::begin < ::fwData::Mesh::CellValueType >,
                                                 &cellDataHelper ),
                                   ref(cellNormalsArrayBuffer) =
-                                      phx::bind(&::fwDataTools::helper::Array::begin< ::fwData::Mesh::NormalValueType >,
+                                      phx::bind(&::fwDataTools::helper::Array::begin < ::fwData::Mesh::NormalValueType >
+                                                ,
                                                 &cellNormalsHelper )
                               ]
 
@@ -162,7 +160,6 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
         static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE)
         );
 
-
     cell_data_offset_generator cellDataOffsetGenerator;
 
     std::generate(
@@ -171,8 +168,6 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
         cellDataOffsetGenerator
         );
 
-
-
     // Check if normals array is filled of -1. values
     const float normalBadValue = -1.f;
     float normal               = normalBadValue;
@@ -198,12 +193,10 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
 
 }
 
-
-
 //------------------------------------------------------------------------------
 
-MeshReader::MeshReader(::fwDataIO::reader::IObjectReader::Key key)
-    : ::fwData::location::enableSingleFile< IObjectReader >(this)
+MeshReader::MeshReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< IObjectReader >(this)
 {
 }
 
@@ -223,7 +216,6 @@ void MeshReader::read()
     SLM_TRACE( "Trian file: " + path.string());
     SLM_ASSERT("Empty path for Trian file", !path.empty() );
 
-
     size_t length;
     //char *buffer;
     std::string buf;
@@ -236,19 +228,17 @@ void MeshReader::read()
         throw std::ios_base::failure("Unable to open " + path.string());
     }
 
-
-    file.seekg (0, std::ios::end);
+    file.seekg(0, std::ios::end);
     length = file.tellg();
-    file.seekg (0, std::ios::beg);
+    file.seekg(0, std::ios::beg);
 
     //buffer = new char [length];
     buf.resize(length);
     char* buffer = &buf[0];
 
-    file.read (buffer, length);
+    file.read(buffer, length);
     file.close();
 
-
     ::fwData::Mesh::sptr mesh = getConcreteObject();
 
     mesh->clear();
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
index e61be53..cc0fec7 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
@@ -1,29 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/reader/TagReader.hpp"
 
-#include <fwMath/IntrasecTypes.hpp>
+#include "fwDataIO/reader/registry/macros.hpp"
 
-#include <fwData/Tag.hpp>
-#include <fwData/PointList.hpp>
 #include <fwData/Point.hpp>
-#include <fwData/Object.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/Tag.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include "fwDataIO/reader/TagReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
+#include <fwMath/IntrasecTypes.hpp>
+
+#include <boost/cstdint.hpp>
 
+#include <fstream>
+#include <iostream>
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::TagReader );
 
-
 namespace fwDataIO
 {
 
@@ -32,8 +30,8 @@ namespace reader
 
 //------------------------------------------------------------------------------
 
-TagReader::TagReader(::fwDataIO::reader::IObjectReader::Key key)
-    : ::fwData::location::enableSingleFile< IObjectReader >(this)
+TagReader::TagReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< IObjectReader >(this)
 {
 }
 
@@ -51,9 +49,8 @@ void TagReader::read()
     ::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 );
+    assert( path.empty() == false );
 
     ::std::shared_ptr< ::fwData::Tag > tag = getConcreteObject();
 
@@ -72,14 +69,14 @@ void TagReader::read()
     int n;
     file>>name;
     file>>n;
-    if(n>=1)
+    if(n >= 1)
     {
         file>>type;
 
-        if(type=="ARTAG" || type=="CHESSBOARD" || type=="ARToolKitPlus_MARKER_ID_BCH")
+        if(type == "ARTAG" || type == "CHESSBOARD" || type == "ARToolKitPlus_MARKER_ID_BCH")
         {
             int nbPts;
-            double x,y,z;
+            double x, y, z;
             double radius = 0.0;
             file>>x>>y>>z;
             file>>nbPts;
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
index cca54c0..2e8c590 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "fwDataIO/writer/registry/macros.hpp"
 
 #include <fwData/Image.hpp>
-#include <fwData/Object.hpp>
 
 #include <fwDataTools/helper/Image.hpp>
 
@@ -19,10 +18,8 @@
 
 #include <iostream>
 
-
 fwDataIOWriterRegisterMacro( ::fwDataIO::writer::GzBufferImageWriter);
 
-
 namespace fwDataIO
 {
 
@@ -31,8 +28,8 @@ namespace writer
 
 //------------------------------------------------------------------------------
 
-GzBufferImageWriter::GzBufferImageWriter(::fwDataIO::writer::IObjectWriter::Key key)
-    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+GzBufferImageWriter::GzBufferImageWriter(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
 {
 }
 
@@ -46,7 +43,7 @@ GzBufferImageWriter::~GzBufferImageWriter()
 
 void GzBufferImageWriter::write()
 {
-    assert( getFile().empty() ==  false );
+    assert( getFile().empty() == false );
 
     ::fwData::Image::sptr image = getConcreteObject();
     OSLM_TRACE( "GzBufferImageWriter::write()" << image.get() << " " << image->className());
@@ -80,9 +77,9 @@ void GzBufferImageWriter::write()
 
     gzclose(rawFile);
 
-    assert( uncompressedbyteswrited != 0 && writtenBytes==imageSizeInBytes);
+    assert( uncompressedbyteswrited != 0 && writtenBytes == imageSizeInBytes);
 
-    if ( uncompressedbyteswrited != 0 && writtenBytes==imageSizeInBytes)
+    if ( uncompressedbyteswrited != 0 && writtenBytes == imageSizeInBytes)
     {
         std::string str = "GzBufferImageWriter::write unable to write ";
         str += getFile().string();
diff --git a/SrcLib/core/fwDataTools/Properties.cmake b/SrcLib/core/fwDataTools/Properties.cmake
index 3c61362..194e210 100644
--- a/SrcLib/core/fwDataTools/Properties.cmake
+++ b/SrcLib/core/fwDataTools/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwData fwMath fwRuntime)
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp
index 2187ac2..87d3780 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,16 +27,16 @@ namespace fwDataTools
 namespace fieldHelper
 {
 
-
-template <class T> struct bitwise_or : std::binary_function <T,T,T>
+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.
  */
@@ -115,7 +115,6 @@ public:
 
     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
@@ -134,7 +133,6 @@ public:
     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
@@ -143,7 +141,6 @@ public:
     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
@@ -157,8 +154,7 @@ public:
 
 };
 
-
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 template < typename VALUE >
 class PixelCastAndSetFunctor
@@ -170,7 +166,8 @@ public:
         typedef VALUE ValueType;
         typedef SPTR ( ::fwData::Image::BufferType ) BufferTypeSptr;
 
-        Param(ValueType& v) : value (v)
+        Param(ValueType& v) :
+            value(v)
         {
         }
 
@@ -178,6 +175,8 @@ public:
         BufferTypeSptr res;
     };
 
+    // ------------------------------------------------------------------------------
+
     template < typename IMAGE >
     void operator()( Param& param )
     {
@@ -187,15 +186,14 @@ public:
 
         ::fwData::Image::BufferType* buf = reinterpret_cast< ::fwData::Image::BufferType* > (&val);
 
-        SPTR( ::fwData::Image::BufferType ) res ( new ::fwData::Image::BufferType[imageTypeSize] );
+        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
@@ -208,7 +206,8 @@ public:
         typedef INT_INDEX PointType;
 
         Param(PointType& p, ValueType& v) :
-            value (v), point(p)
+            value(v),
+            point(p)
         {
         }
 
@@ -217,6 +216,8 @@ public:
         const PointType& point;
     };
 
+    // ------------------------------------------------------------------------------
+
     template < typename IMAGE >
     void operator()( Param& param )
     {
@@ -232,9 +233,7 @@ public:
 
 };
 
-
-
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 template < typename T >
 void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, ::fwData::Point::sptr point, T& value)
@@ -242,22 +241,19 @@ void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, ::fwData::Point:
     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);
+    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,
@@ -270,9 +266,7 @@ SPTR( ::fwData::Image::BufferType ) MedicalImageHelpers::getPixelBufferInImageSp
     return param.res;
 }
 
-
-
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 template < typename INT_INDEX >
 class CastAndCheckFunctor
@@ -284,7 +278,8 @@ public:
         typedef INT_INDEX PointType;
 
         Param(PointType& p, bool& b) :
-            point(p), isNull(b)
+            point(p),
+            isNull(b)
         {
         }
 
@@ -293,6 +288,8 @@ public:
         bool& isNull;
     };
 
+    // ------------------------------------------------------------------------------
+
     template < typename IMAGE >
     void operator()( Param& param )
     {
@@ -308,12 +305,12 @@ public:
 
 };
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 template < typename INT_INDEX>
 bool MedicalImageHelpers::isPixelNull(::fwData::Image::sptr image, INT_INDEX& point)
 {
-    ::fwDataTools::helper::Image imageLock ( image );
+    ::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]));
@@ -321,7 +318,7 @@ bool MedicalImageHelpers::isPixelNull(::fwData::Image::sptr image, INT_INDEX& po
     return isBufNull(buf, imageTypeSize);
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 template < typename T >
 class MinMaxFunctor
@@ -332,7 +329,9 @@ public:
     public:
 
         Param(::fwData::Image::sptr _img, T& _min, T& _max) :
-            image(_img), min(_min), max(_max)
+            image(_img),
+            min(_min),
+            max(_max)
         {
         }
 
@@ -341,14 +340,16 @@ public:
         T& max;
     };
 
+    // ------------------------------------------------------------------------------
+
     template < typename IMAGE >
     void operator()( Param& param )
     {
-        ::fwDataTools::helper::Image imageLock ( param.image );
+        ::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];
-
+        ::fwData::Image::SizeType::value_type len = static_cast< ::fwData::Image::SizeType::value_type >(
+            std::accumulate(size.begin(), size.end(), 1, std::multiplies< ::fwData::Image::SizeType::value_type >()));
         T& min = param.min;
         T& max = param.max;
 
@@ -384,6 +385,7 @@ public:
 
 };
 
+// ------------------------------------------------------------------------------
 
 template < typename MINMAXTYPE >
 void MedicalImageHelpers::getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE& _min, MINMAXTYPE& _max)
@@ -394,11 +396,8 @@ void MedicalImageHelpers::getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE
     ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, MinMaxFunctor<MINMAXTYPE> >::invoke( type, param );
 }
 
-
-
 } // fieldHelper
 } // fwDataTools
 
-
 #endif // __FWDATATOOLS_FIELDHELPER_MEDICALIMAGEHELPERS_HPP__
 
diff --git a/SrcLib/core/fwDataTools/test/tu/include/MedicalImageHelpersTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/MedicalImageHelpersTest.hpp
new file mode 100644
index 0000000..bd87c21
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/include/MedicalImageHelpersTest.hpp
@@ -0,0 +1,35 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * 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_MEDICALIMAGEHELPERSTEST_HPP__
+#define __FWDATATOOLS_UT_MEDICALIMAGEHELPERSTEST_HPP__
+
+#include <fwCore/base.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+class MedicalImageHelpersTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( MedicalImageHelpersTest );
+CPPUNIT_TEST( getMinMaxTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void getMinMaxTest();
+};
+
+} // namespace ut
+} // namespace fwDataTools
+
+#endif // __FWDATATOOLS_UT_MEDICALIMAGEHELPERSTEST_HPP__
diff --git a/SrcLib/core/fwDataTools/test/tu/src/MedicalImageHelpersTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/MedicalImageHelpersTest.cpp
new file mode 100644
index 0000000..b71631d
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/src/MedicalImageHelpersTest.cpp
@@ -0,0 +1,170 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "MedicalImageHelpersTest.hpp"
+
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwData/Array.hpp>
+#include <fwData/Image.hpp>
+
+#include <fwTest/generator/Image.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::MedicalImageHelpersTest );
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+// ------------------------------------------------------------------------------
+
+void MedicalImageHelpersTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+// ------------------------------------------------------------------------------
+
+void MedicalImageHelpersTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+// ------------------------------------------------------------------------------
+
+void MedicalImageHelpersTest::getMinMaxTest()
+{
+
+    {
+        // Test on 3D image of type 'int16'
+        typedef std::int16_t Type;
+
+        const Type MIN   = 45;
+        const Type MAX   = 345;
+        const Type RANGE = MAX - MIN;
+
+        ::fwData::Image::sptr image = ::fwData::Image::New();
+
+        ::fwData::Image::SizeType size(3);
+        size[0] = 125;
+        size[1] = 110;
+        size[2] = 45;
+        ::fwData::Image::SpacingType spacing(3, 1);
+        ::fwData::Image::OriginType origin(3, 0);
+        ::fwTest::generator::Image::generateImage(image, size, spacing, origin, ::fwTools::Type::create<Type>());
+
+        ::fwData::Array::sptr array = image->getDataArray();
+        ::fwDataTools::helper::Array helper(array);
+
+        Type* buffer    = helper.begin<Type>();
+        Type* bufferEnd = helper.end<Type>();
+
+        for (; buffer != bufferEnd; ++buffer)
+        {
+            *buffer = MIN + rand()%RANGE;
+        }
+
+        Type resMin, resMax;
+
+        buffer = helper.begin<Type>();
+
+        buffer[156] = MIN;
+        buffer[245] = MAX;
+
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, resMin, resMax);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("min values are not equal", MIN, resMin);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("max values are not equal", MAX, resMax);
+    }
+
+    {
+        // Test on 3D image of type 'float'
+        typedef float Type;
+        const Type MIN  = -12.3;
+        const Type MAX  = 18.2;
+        const int RANGE = static_cast<int>(MAX - MIN);
+
+        ::fwData::Image::sptr image = ::fwData::Image::New();
+
+        ::fwData::Image::SizeType size(3);
+        size[0] = 42;
+        size[1] = 34;
+        size[2] = 75;
+        ::fwData::Image::SpacingType spacing(3, 1);
+        ::fwData::Image::OriginType origin(3, 0);
+        ::fwTest::generator::Image::generateImage(image, size, spacing, origin, ::fwTools::Type::create<Type>());
+
+        ::fwData::Array::sptr array = image->getDataArray();
+        ::fwDataTools::helper::Array helper(array);
+
+        Type* buffer    = helper.begin<Type>();
+        Type* bufferEnd = helper.end<Type>();
+
+        for (; buffer != bufferEnd; ++buffer)
+        {
+            *buffer = MIN + rand()%RANGE;
+        }
+
+        Type resMin, resMax;
+
+        buffer = helper.begin<Type>();
+
+        buffer[16]  = MIN;
+        buffer[286] = MAX;
+
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, resMin, resMax);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("min values are not equal", MIN, resMin, 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("max values are not equal", MAX, resMax, 0.00001);
+    }
+
+    {
+        // test of 2D image of type 'uint8'
+
+        typedef std::uint8_t Type;
+
+        const Type MIN   = 3;
+        const Type MAX   = 245;
+        const Type RANGE = MAX - MIN;
+
+        ::fwData::Image::sptr image = ::fwData::Image::New();
+
+        ::fwData::Image::SizeType size(2);
+        size[0] = 156;
+        size[1] = 208;
+        ::fwData::Image::SpacingType spacing(2, 1);
+        ::fwData::Image::OriginType origin(2, 0);
+        ::fwTest::generator::Image::generateImage(image, size, spacing, origin, ::fwTools::Type::create<Type>());
+
+        ::fwData::Array::sptr array = image->getDataArray();
+        ::fwDataTools::helper::Array helper(array);
+
+        Type* buffer    = helper.begin<Type>();
+        Type* bufferEnd = helper.end<Type>();
+
+        for (; buffer != bufferEnd; ++buffer)
+        {
+            *buffer = MIN + rand()%RANGE;
+        }
+
+        Type resMin, resMax;
+
+        buffer = helper.begin<Type>();
+
+        buffer[5]    = MIN;
+        buffer[2155] = MAX;
+
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, resMin, resMax);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("min values are not equal", MIN, resMin);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("max values are not equal", MAX, resMax);
+    }
+}
+
+// ------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwGui/Properties.cmake b/SrcLib/core/fwGui/Properties.cmake
index 7cbe7b2..baef464 100644
--- a/SrcLib/core/fwGui/Properties.cmake
+++ b/SrcLib/core/fwGui/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore fwData fwRuntime fwServices fwTools fwCom fwThread fwLog)
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchServices)
diff --git a/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp b/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
index ea129d0..aec5fbf 100644
--- a/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,20 +11,16 @@
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
 #include "fwGui/container/fwContainer.hpp"
-#include "fwGui/container/fwMenuBar.hpp"
-#include "fwGui/container/fwToolBar.hpp"
 #include "fwGui/container/fwMenu.hpp"
+#include "fwGui/container/fwMenuBar.hpp"
 #include "fwGui/container/fwMenuItem.hpp"
+#include "fwGui/container/fwToolBar.hpp"
 
 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
 {
@@ -68,10 +64,15 @@ public:
     FWGUI_API static void unregisterSIDContainer(std::string sid);
 
     /**
-     * @brief Returns fwContainer associate with service ID.
+     * @brief Returns fwContainer associate with service ID, null if  not found.
      */
     FWGUI_API static ::fwGui::container::fwContainer::sptr getSIDContainer(std::string sid);
 
+    /**
+     * @brief Verifies if a SID exists in the global SID container.
+     */
+    FWGUI_API static bool hasSIDContainer(std::string sid);
+
     ///@}
 
     //-----------------------------------------------------------------------------
@@ -92,10 +93,15 @@ public:
     FWGUI_API static void unregisterWIDContainer(std::string wid);
 
     /**
-     * @brief Returns fwContainer associate with window ID.
+     * @brief Returns fwContainer associate with window ID, null if  not found.
      */
     FWGUI_API static ::fwGui::container::fwContainer::sptr getWIDContainer(std::string wid);
 
+    /**
+     * @brief Verifies if a WID exists in the global WID container.
+     */
+    FWGUI_API static bool hasWIDContainer(std::string wid);
+
     ///@}
 
     //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
index 3fa97ec..23e3262 100644
--- a/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,21 +8,33 @@
 #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
 {
+// Forward declarations
+namespace container
+{
+class fwContainer;
+}
+namespace layoutManager
+{
+class IViewLayoutManager;
+}
+namespace registrar
+{
+class ViewRegistrar;
+}
+namespace builder
+{
+class IToolBarBuilder;
+class IContainerBuilder;
+class ISlideViewBuilder;
+}
 
 /**
  * @brief   Defines the service interface managing the layout.
@@ -70,7 +82,8 @@ namespace fwGui
  *     - \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.
+ *     - \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
@@ -95,9 +108,9 @@ class FWGUI_CLASS_API IGuiContainerSrv : public ::fwServices::IService
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IGuiContainerSrv)(::fwServices::IService) );
+    fwCoreServiceClassDefinitionsMacro( (IGuiContainerSrv)(::fwServices::IService) );
 
-    FWGUI_API ::fwGui::container::fwContainer::sptr getContainer();
+    FWGUI_API SPTR(::fwGui::container::fwContainer) getContainer();
 
     FWGUI_API void setParent(std::string wid);
 
@@ -112,7 +125,8 @@ protected:
     /**
      * @brief Initialize managers.
      *
-       @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();
 
@@ -153,7 +167,7 @@ protected:
 
 private:
 
-    typedef std::vector< ::fwGui::builder::ISlideViewBuilder::sptr > SlideViewContainerType;
+    typedef std::vector< SPTR(::fwGui::builder::ISlideViewBuilder) > SlideViewContainerType;
 
     /// SLOT: enable/disable the container
     void setEnabled(bool isEnabled);
@@ -173,11 +187,11 @@ private:
     void initializeSlideViewBuilder( ::fwRuntime::ConfigurationElement::sptr slideViewConfig );
 
     bool m_viewLayoutManagerIsCreated;
-    ::fwGui::layoutManager::IViewLayoutManager::sptr m_viewLayoutManager;
+    SPTR( ::fwGui::layoutManager::IViewLayoutManager) m_viewLayoutManager;
 
-    ::fwGui::registrar::ViewRegistrar::sptr m_viewRegistrar;
-    ::fwGui::builder::IToolBarBuilder::sptr m_toolBarBuilder;
-    ::fwGui::builder::IContainerBuilder::sptr m_containerBuilder;
+    SPTR( ::fwGui::registrar::ViewRegistrar) m_viewRegistrar;
+    SPTR( ::fwGui::builder::IToolBarBuilder) m_toolBarBuilder;
+    SPTR( ::fwGui::builder::IContainerBuilder) m_containerBuilder;
     SlideViewContainerType m_slideViewBuilders;
 
     ConfigurationType m_viewRegistrarConfig;
@@ -192,4 +206,3 @@ private:
 
 #endif /*__FWGUI_IGUICONTAINERSRV_HPP__*/
 
-
diff --git a/SrcLib/core/fwGui/include/fwGui/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
index 5eb7eed..710ebc0 100644
--- a/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,45 @@
 #ifndef __FWGUI_NAMESPACE_HPP__
 #define __FWGUI_NAMESPACE_HPP__
 
-/**
- * @brief      The namespace fwGui contains the base interface for IHM services.
- * @namespace  fwGui
- *
- * @date       2009-2010.
- *
- */
+/// The namespace fwGui contains the base interface for IHM services.
 namespace fwGui
 {
-}
+
+/// The namespace fwGui::builder contains the base interface for GUI elements builder.
+namespace builder
+{
+} // namespace builder
+
+/// The namespace fwGui::container contains the base interface for GUI containers (toolbar, menu, menuBar...).
+namespace container
+{
+} // namespace container
+
+/// The namespace fwGui::dialog contains the base interface for GUI dialog elements.
+namespace dialog
+{
+} // namespace dialog
+
+/// Contains fwGui::factory utilities
+namespace factory
+{
+} // namespace factory
+
+/// The namespace fwGui::layoutManager contains the base interface of managers used to handle the GUI layouts available
+/// in FW4SPL.
+namespace layoutManager
+{
+} // namespace layoutManager
+
+/// The namespace fwGui::registrar contains the classes of service management of GUI elements (Menu, View, ToolBar).
+namespace registrar
+{
+} // namespace registrar
+
+///Contains fwGui::registry details
+namespace registry
+{
+} // namespace registry
+
+} // namespace fwGui
 #endif /* __FWGUI_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp
deleted file mode 100644
index d98bbb6..0000000
--- a/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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_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.
- *
- */
-namespace builder
-{
-
-}
-}
-#endif /* __FWGUI_BUILDER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp
deleted file mode 100644
index ef6d006..0000000
--- a/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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_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.
- *
- */
-namespace container
-{
-
-}
-}
-#endif /* __FWGUI_CONTAINER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp
deleted file mode 100644
index 21165e7..0000000
--- a/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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_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.
- *
- */
-namespace dialog
-{
-
-}
-}
-#endif /* __FWGUI_DIALOG_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp b/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp
deleted file mode 100644
index 261fcb4..0000000
--- a/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** 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_FACTORY_NAMESPACE_HPP__
-#define __FWGUI_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwGui
-{
-
-/**
- * @brief       Contains fwGui::factory utilities
- * @namespace   fwGui::factory
- *
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace fwGui
-
-#endif /* __FWGUI_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/factory/new.hpp b/SrcLib/core/fwGui/include/fwGui/factory/new.hpp
index 56b0199..c2aa6cc 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWGUI_FACTORY_NEW_HPP__
 #define __FWGUI_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwGui/config.hpp"
 #include "fwGui/registry/detail.hpp"
 
+#include <string>
+
 namespace fwGui
 {
 
@@ -23,7 +20,6 @@ class GuiBaseObject;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -54,4 +50,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWGUI_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp
deleted file mode 100644
index 9edc5d6..0000000
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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_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.
- *
- */
-namespace layoutManager
-{
-
-}
-}
-#endif /* __FWGUI_LAYOUTMANAGER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
index 6cdb938..d5a5159 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,7 @@
 #ifndef __FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__
 #define __FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__
 
-#include <fwRuntime/ConfigurationElement.hpp>
-
 #include "fwGui/GuiBaseObject.hpp"
-#include "fwGui/container/fwMenu.hpp"
-#include "fwGui/container/fwMenuItem.hpp"
 #include "fwGui/config.hpp"
 
 namespace fwGui
@@ -21,9 +17,6 @@ namespace registrar
 
 /**
  * @brief   Defines the action registrar for IHM.
- * @class   ActionRegistrar
- *
- * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API ActionRegistrar : public ::fwGui::GuiBaseObject
@@ -35,7 +28,7 @@ public:
                                             new ActionRegistrar );
 
     /// Constructor.
-    FWGUI_API ActionRegistrar( const std::string &sid);
+    FWGUI_API ActionRegistrar( const std::string& sid);
 
     /// Destructor. Do nothing
     FWGUI_API virtual ~ActionRegistrar();
@@ -66,4 +59,3 @@ protected:
 
 #endif /*__FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__*/
 
-
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp
deleted file mode 100644
index cedc1ee..0000000
--- a/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** 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_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.
- *
- */
-namespace registrar
-{
-
-}
-}
-#endif /* __FWGUI_REGISTRAR_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
index 5f66d81..72f7155 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,28 @@
 #ifndef __FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__
 #define __FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__
 
-#include <fwRuntime/ConfigurationElement.hpp>
-
 #include "fwGui/GuiBaseObject.hpp"
-#include "fwGui/container/fwToolBar.hpp"
-#include "fwGui/container/fwMenuBar.hpp"
-#include "fwGui/container/fwContainer.hpp"
 #include "fwGui/config.hpp"
+#include "fwGui/container/fwContainer.hpp"
+#include "fwGui/container/fwMenuBar.hpp"
+#include "fwGui/container/fwToolBar.hpp"
 
+#include <fwRuntime/ConfigurationElement.hpp>
 
 namespace fwGui
 {
+namespace container
+{
+class fwContainer;
+class fwMenuBar;
+class fwToolBar;
+}
+
 namespace registrar
 {
 
 /**
  * @brief   Defines the generic view manager for IHM.
- * @class   ViewRegistrar
- *
- * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API ViewRegistrar : public ::fwGui::GuiBaseObject
@@ -37,12 +40,12 @@ public:
                                             new ViewRegistrar );
 
     /// Constructor.
-    FWGUI_API ViewRegistrar( const std::string &sid);
+    FWGUI_API ViewRegistrar( const std::string& sid);
 
     /// Destructor. Do nothing
     FWGUI_API virtual ~ViewRegistrar();
 
-    FWGUI_API virtual ::fwGui::container::fwContainer::sptr getParent();
+    FWGUI_API virtual SPTR(::fwGui::container::fwContainer) getParent();
 
     FWGUI_API virtual void setParent(std::string wid);
 
@@ -72,7 +75,8 @@ public:
             </registry>
         </service>
        @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.
+     * - \<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.
      *   - \b sid  (mandatory): the tool bar identifier.
@@ -83,14 +87,16 @@ public:
      * - \<view sid="subView3" start="yes" /\> : define the service of the view to add in the container.
      *   - \b sid  (mandatory): the service identifier.
      *   - \b start = {yes| no} (default value no): indicate if the view service must be started by the service.
-     * - \<view wid="subView4" /\> : reserve a sub container for the view in the parent container with the name "subView4". The service which want to use this sub container
+     * - \<view wid="subView4" /\> : reserve a sub container for the view in the parent container with the name
+     *"subView4". The service which want to use this sub container
      *   will have define a parent with \<parent wid="subView4" /\>.
      *   - \b wid  (mandatory): the window identifier.
      *
      * @warning
      * - The number of view item in the gui section must be equal or greater than in the registry section.
      * - 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" (It could also be a wid).
+     *   For example: the view caption "view3" will be connected with the service which have the sid = "subView3" (It
+     * could also be a wid).
      *
      */
     FWGUI_API virtual void initialize( ::fwRuntime::ConfigurationElement::sptr configuration);
@@ -102,19 +108,19 @@ public:
      * @pre ViewRegistrar must be initialized before.
      * @pre sub containers must be instanced before.
      */
-    FWGUI_API virtual void manage(std::vector< ::fwGui::container::fwContainer::sptr > subViews );
+    FWGUI_API virtual void manage(std::vector< SPTR(::fwGui::container::fwContainer) > subViews );
 
     /**
      * @brief Register menu bar.
      * If start="yes" in configuration the menu bar services will be started.
      */
-    FWGUI_API virtual void manageMenuBar(::fwGui::container::fwMenuBar::sptr menuBar );
+    FWGUI_API virtual void manageMenuBar(SPTR(::fwGui::container::fwMenuBar) menuBar );
 
     /**
      * @brief Register tool bar.
      * If start="yes" in configuration the tool bar services will be started.
      */
-    FWGUI_API virtual void manageToolBar(::fwGui::container::fwToolBar::sptr toolBar );
+    FWGUI_API virtual void manageToolBar(SPTR(::fwGui::container::fwToolBar) toolBar );
 
     /**
      * @brief Stopping view manager.
@@ -134,8 +140,6 @@ public:
      */
     FWGUI_API virtual void unmanageMenuBar();
 
-
-
 protected:
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
@@ -160,7 +164,7 @@ protected:
     SIDToolBarPairType m_toolBarSid;
 
     std::string m_parentWid;
-    ::fwGui::container::fwContainer::sptr m_parentContainer;
+    SPTR(::fwGui::container::fwContainer) m_parentContainer;
 
     /// Main service ID associate with this ViewRegistrar
     std::string m_sid;
@@ -171,4 +175,3 @@ protected:
 
 #endif /*__FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__*/
 
-
diff --git a/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp b/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp
deleted file mode 100644
index ab6334f..0000000
--- a/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** 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_NAMESPACE_HPP__
-#define __FWGUI_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwGui
-{
-
-/**
- * @brief       Contains fwGui::registry details
- * @namespace   fwGui::registry
- *
- * @date        2009-2012
- *
- */
-namespace registry
-{
-} // namespace registry
-
-} // namespace fwGui
-
-#endif /* __FWGUI_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp b/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
index 95759dc..5d214fe 100644
--- a/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
@@ -4,15 +4,16 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwTools/fwID.hpp>
-#include <fwServices/macros.hpp>
+#include "fwGui/GuiRegistry.hpp"
 
 #include "fwGui/IMenuSrv.hpp"
 #include "fwGui/IToolBarSrv.hpp"
-#include "fwGui/GuiRegistry.hpp"
 
+#include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
 
+#include <fwTools/fwID.hpp>
+
 namespace fwGui
 {
 
@@ -65,14 +66,24 @@ void GuiRegistry::unregisterSIDContainer(std::string sid)
 
 ::fwGui::container::fwContainer::sptr GuiRegistry::getSIDContainer(std::string sid)
 {
-    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
+    // Returns container in SID container map, null if  not found.
+    if (!hasSIDContainer(sid))
+    {
+        return nullptr;
+    }
     return m_globalSIDToFwContainer[sid];
 }
 
 //-----------------------------------------------------------------------------
 
+bool GuiRegistry::hasSIDContainer(std::string sid)
+{
+    // Returns 'true' if the specified 'sid' is found in the SID container map, else 'false'.
+    return m_globalSIDToFwContainer.find(sid) != m_globalSIDToFwContainer.end();
+}
+
+//-----------------------------------------------------------------------------
+
 void GuiRegistry::registerWIDContainer(std::string wid, ::fwGui::container::fwContainer::sptr container)
 {
     OSLM_ASSERT("A fwContainer with the wid "<<wid<<" already exists in the WID container map.",
@@ -95,14 +106,24 @@ void GuiRegistry::unregisterWIDContainer(std::string wid)
 
 ::fwGui::container::fwContainer::sptr GuiRegistry::getWIDContainer(std::string wid)
 {
-    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
+    // Returns container in WID container map, null if  not found.
+    if (!hasWIDContainer(wid))
+    {
+        return nullptr;
+    }
     return m_globalWIDToFwContainer[wid];
 }
 
 //-----------------------------------------------------------------------------
 
+bool GuiRegistry::hasWIDContainer(std::string wid)
+{
+    // Returns 'true' if the specified 'wid' is found in the WID container map, else 'false'.
+    return m_globalWIDToFwContainer.find(wid) != m_globalWIDToFwContainer.end();
+}
+
+//-----------------------------------------------------------------------------
+
 void GuiRegistry::registerSIDMenuBar(std::string sid, ::fwGui::container::fwMenuBar::sptr menuBar)
 {
     OSLM_ASSERT("A fwMenuBar with the sid "<<sid<<" already exists in the SID menuBar map.",
diff --git a/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
index c78d293..4063f08 100644
--- a/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
@@ -1,22 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#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
@@ -47,7 +44,7 @@ IActionSrv::IActionSrv() :
     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);
+    newSlot(s_HIDE_SLOT, &IActionSrv::hide, this);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
index fdfdd42..843c2a0 100644
--- a/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
@@ -1,34 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/Signal.hpp>
+#include <fwCom/Signal.hxx>
 #include <fwCom/Slot.hxx>
-#include <fwCom/Slots.hpp>
 #include <fwCom/Slots.hxx>
 
+#include <fwServices/macros.hpp>
+
 #include <fwThread/Worker.hpp>
 #include <fwThread/Worker.hxx>
 
-#include <boost/foreach.hpp>
+#include <fwTools/fwID.hpp>
+
 #include <boost/bind.hpp>
+#include <boost/foreach.hpp>
 #include <boost/lambda/lambda.hpp>
 
-#include <fwCom/Signal.hpp>
-#include <fwCom/Signal.hxx>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include <fwTools/fwID.hpp>
-
 namespace fwGui
 {
 
@@ -54,7 +50,7 @@ IFrameSrv::IFrameSrv() :
 
     newSlot(s_SET_VISIBLE_SLOT, &IFrameSrv::setVisible, this);
     newSlot(s_SHOW_SLOT, &IFrameSrv::show, this);
-    newSlot(s_HIDE_SLOT,&IFrameSrv::hide, this);
+    newSlot(s_HIDE_SLOT, &IFrameSrv::hide, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -127,7 +123,7 @@ void IFrameSrv::initialize()
 
 void IFrameSrv::create()
 {
-    SLM_ASSERT("FrameLayoutManager must be initialized.",m_frameLayoutManager);
+    SLM_ASSERT("FrameLayoutManager must be initialized.", m_frameLayoutManager);
 
     ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
         {
@@ -189,12 +185,12 @@ void IFrameSrv::create()
 
 void IFrameSrv::destroy()
 {
-    SLM_ASSERT("ViewRegistrar must be initialized.",m_viewRegistrar);
+    SLM_ASSERT("ViewRegistrar must be initialized.", m_viewRegistrar);
 
     if (m_hasToolBar)
     {
         m_viewRegistrar->unmanageToolBar();
-        SLM_ASSERT("ToolBarBuilder must be initialized.",m_toolBarBuilder);
+        SLM_ASSERT("ToolBarBuilder must be initialized.", m_toolBarBuilder);
 
         ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
             {
@@ -205,7 +201,7 @@ void IFrameSrv::destroy()
     if (m_hasMenuBar)
     {
         m_viewRegistrar->unmanageMenuBar();
-        SLM_ASSERT("MenuBarBuilder must be initialized.",m_menuBarBuilder);
+        SLM_ASSERT("MenuBarBuilder must be initialized.", m_menuBarBuilder);
 
         ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
             {
@@ -214,7 +210,7 @@ void IFrameSrv::destroy()
     }
 
     m_viewRegistrar->unmanage();
-    SLM_ASSERT("FrameLayoutManager must be initialized.",m_frameLayoutManager);
+    SLM_ASSERT("FrameLayoutManager must be initialized.", m_frameLayoutManager);
 
     ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
         {
diff --git a/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
index e3ab55f..4a4eda8 100644
--- a/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
@@ -1,10 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwGui/IGuiContainerSrv.hpp"
+
+#include "fwGui/builder/IContainerBuilder.hpp"
+#include "fwGui/builder/ISlideViewBuilder.hpp"
+#include "fwGui/builder/IToolBarBuilder.hpp"
+#include "fwGui/container/fwContainer.hpp"
+#include "fwGui/layoutManager/IViewLayoutManager.hpp"
+#include "fwGui/registrar/ViewRegistrar.hpp"
 #include "fwGui/registry/worker.hpp"
 
 #include <fwCom/Slot.hpp>
@@ -13,7 +20,9 @@
 #include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
+
 #include <fwServices/macros.hpp>
+
 #include <fwTools/fwID.hpp>
 
 namespace fwGui
@@ -28,16 +37,16 @@ const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_HIDE_SLOT        = "hide";
 
 //-----------------------------------------------------------------------------
 
-IGuiContainerSrv::IGuiContainerSrv()
-    : m_viewLayoutManagerIsCreated (false),
-      m_hasToolBar(false)
+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);
+    newSlot(s_HIDE_SLOT, &IGuiContainerSrv::hide, this);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
index 1d377ec..9fe3f01 100644
--- a/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
@@ -1,28 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwGui/IMenuSrv.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 <fwThread/Worker.hpp>
 #include <fwThread/Worker.hxx>
 
+#include <fwTools/fwID.hpp>
+
 namespace fwGui
 {
 
-IMenuSrv::IMenuSrv() : m_hideActions (false)
+IMenuSrv::IMenuSrv() :
+    m_hideActions(false)
 {
 }
 
diff --git a/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
index 5b78b1c..b79d120 100644
--- a/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
@@ -1,26 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwGui/IToolBarSrv.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 <fwThread/Worker.hpp>
 #include <fwThread/Worker.hxx>
 
+#include <fwTools/fwID.hpp>
+
 namespace fwGui
 {
 
-IToolBarSrv::IToolBarSrv() : m_hideActions (false)
+IToolBarSrv::IToolBarSrv() :
+    m_hideActions(false)
 {
 }
 
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
index e255337..f9e8416 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
@@ -4,14 +4,14 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/location/SingleFile.hpp>
+#include "fwGui/dialog/ILocationDialog.hpp"
+
 #include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
 
 #include <fwServices/IService.hpp>
 #include <fwServices/registry/ObjectService.hpp>
 
-#include "fwGui/dialog/ILocationDialog.hpp"
-
 namespace fwGui
 {
 namespace dialog
@@ -111,7 +111,7 @@ void ILocationDialog::saveDefaultLocation(::fwData::location::ILocation::sptr lo
     ::fwData::Composite::sptr prefUI;
 
     // Get preferences
-    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
     if(!preferencesServicesList.empty())
     {
         ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
index 8c42532..0a2187e 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <boost/lexical_cast.hpp>
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
+#include "fwGui/layoutManager/IFrameLayoutManager.hpp"
 
 #include <fwCore/base.hpp>
+
 #include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
 
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ObjectService.hpp>
 
-#include "fwGui/layoutManager/IFrameLayoutManager.hpp"
+#include <boost/filesystem/operations.hpp>
+#include <boost/lexical_cast.hpp>
 
 namespace fwGui
 {
@@ -205,7 +204,7 @@ void IFrameLayoutManager::writeConfig()
     ::fwData::Composite::sptr prefUI;
 
     // Get preferences
-    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
     if(!preferencesServicesList.empty())
     {
         ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
@@ -241,5 +240,3 @@ void IFrameLayoutManager::writeConfig()
 } // namespace layoutManager
 } // namespace fwGui
 
-
-
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
index 4bedd2e..0a97677 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
@@ -1,17 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "fwGui/GuiRegistry.hpp"
 #include "fwGui/registrar/ViewRegistrar.hpp"
 
+#include "fwGui/GuiRegistry.hpp"
+#include "fwGui/container/fwContainer.hpp"
+#include "fwGui/container/fwMenuBar.hpp"
+#include "fwGui/container/fwToolBar.hpp"
+
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
 
-#include <fwTools/fwID.hpp>
-
 #include <utility>
 
 namespace fwGui
@@ -21,9 +23,9 @@ namespace registrar
 
 //-----------------------------------------------------------------------------
 
-ViewRegistrar::ViewRegistrar(const std::string& sid)
-    : m_parentWid(""),
-      m_sid(sid)
+ViewRegistrar::ViewRegistrar(const std::string& sid) :
+    m_parentWid(""),
+    m_sid(sid)
 {
 }
 
@@ -81,7 +83,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
     // initialize m_sids and m_wids map with configuration
     std::vector < ConfigurationType > vectViews      = configuration->find("view");
     std::vector < ConfigurationType > vectSlideViews = configuration->find("slideView");
-    std::copy (vectSlideViews.begin(), vectSlideViews.end(), std::back_inserter(vectViews));
+    std::copy(vectSlideViews.begin(), vectSlideViews.end(), std::back_inserter(vectViews));
 
     for( ConfigurationType view :  vectViews)
     {
@@ -95,7 +97,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");
-                start = (startValue=="yes");
+                start = (startValue == "yes");
             }
             std::string sid = view->getAttributeValue("sid");
             m_sids[sid] = SIDContainerMapType::mapped_type(index, start);
@@ -121,7 +123,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
                 std::string startValue = menuBarCfg->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
                            startValue == "yes" || startValue == "no");
-                start = (startValue=="yes");
+                start = (startValue == "yes");
             }
             std::string sid = menuBarCfg->getAttributeValue("sid");
             m_menuBarSid = std::make_pair( sid, start);
@@ -141,7 +143,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
                 std::string startValue = toolBarCfg->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
                            startValue == "yes" || startValue == "no");
-                start = (startValue=="yes");
+                start = (startValue == "yes");
             }
             std::string sid = toolBarCfg->getAttributeValue("sid");
             m_toolBarSid = std::make_pair( sid, start);
diff --git a/SrcLib/core/fwGuiQt/CMakeLists.txt b/SrcLib/core/fwGuiQt/CMakeLists.txt
index 09b2eea..489118d 100644
--- a/SrcLib/core/fwGuiQt/CMakeLists.txt
+++ b/SrcLib/core/fwGuiQt/CMakeLists.txt
@@ -2,7 +2,7 @@ fwLoadProperties()
 
 configure_file("${CMAKE_CURRENT_LIST_DIR}/bin/qt.conf" "${CMAKE_BINARY_DIR}/bin/qt.conf")
 
-add_definitions("-DQT_NO_KEYWORDS")
+target_compile_definitions(${FWPROJECT_NAME} PUBLIC "-DQT_NO_KEYWORDS")
 
 find_package(Qt5 COMPONENTS Core Gui Widgets Concurrent REQUIRED)
 
diff --git a/SrcLib/core/fwGuiQt/Properties.cmake b/SrcLib/core/fwGuiQt/Properties.cmake
index f0ed5e9..be88925 100644
--- a/SrcLib/core/fwGuiQt/Properties.cmake
+++ b/SrcLib/core/fwGuiQt/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore fwData fwGui fwRuntime fwServices fwThread fwTools )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchServices)
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
index a184924..21bf17f 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
@@ -1,36 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwGuiQt/App.hpp"
 
-#include <fwTools/Os.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
 #include <fwRuntime/profile/Profile.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwTools/Os.hpp>
+
+#include <locale.h>
 
 #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, bool guiEnabled) : QApplication(argc, argv, guiEnabled)
+App::App(int& argc, char** argv, bool guiEnabled) :
+    QApplication(argc, argv, guiEnabled)
 {
     SLM_TRACE_FUNC();
 
-    setlocale(LC_ALL,"C"); // needed for mfo save process
+    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";
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
index e8443a7..304d5d3 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
@@ -1,22 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/QfwToolbox.hpp"
+
+#include <QApplication>
 #include <QFrame>
-#include <QPixmap>
 #include <QIcon>
+#include <QPixmap>
+#include <QStyleOption>
 #include <QVBoxLayout>
 
-#include "fwGuiQt/widget/QfwToolbox.hpp"
-
 namespace fwGuiQt
 {
 namespace widget
 {
 
-static const char *branch_closed[] = {
+static const char* branch_closed[] = {
     "8 17 2 1",
 /* colors */
     "- c #000000",
@@ -41,7 +43,7 @@ static const char *branch_closed[] = {
     "aaaaaaaa"
 };
 
-static const char *branch_open[] = {
+static const char* branch_open[] = {
     "11 6 2 1",
 /* colors */
     "- c #000000",
@@ -61,7 +63,7 @@ QfwToolBox::~QfwToolBox()
 
 //-----------------------------------------------------------------------------
 
-QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
+QfwToolBox::QfwToolBox(QWidget* parent, Qt::WindowFlags f) :  QFrame(parent, f)
 {
     this->layout = new QFormLayout(this);
     this->layout->setMargin(0);
@@ -73,7 +75,7 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 
 //-----------------------------------------------------------------------------
 
-::fwGuiQt::widget::Page *QfwToolBox::page(QWidget *widget) const
+::fwGuiQt::widget::Page* QfwToolBox::page(QWidget *widget) const
 {
     if (!widget)
     {
@@ -92,7 +94,7 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 
 //-----------------------------------------------------------------------------
 
-::fwGuiQt::widget::Page *QfwToolBox::page(int index)
+::fwGuiQt::widget::Page* QfwToolBox::page(int index)
 {
     if (index >= 0 && index < pageList.size())
     {
@@ -103,7 +105,7 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 
 //-----------------------------------------------------------------------------
 
-const ::fwGuiQt::widget::Page *QfwToolBox::page(int index) const
+const ::fwGuiQt::widget::Page* QfwToolBox::page(int index) const
 {
     if (index >= 0 && index < pageList.size())
     {
@@ -116,7 +118,7 @@ const ::fwGuiQt::widget::Page *QfwToolBox::page(int index) const
 
 void QfwToolBox::collapseItem(int index)
 {
-    Page *page = this->page(index);
+    Page* page = this->page(index);
     if(page)
     {
         page->sv->setVisible(false);
@@ -128,7 +130,7 @@ void QfwToolBox::collapseItem(int index)
 
 void QfwToolBox::expandItem(int index)
 {
-    Page *page = this->page(index);
+    Page* page = this->page(index);
     if(page)
     {
         page->sv->setVisible(true);
@@ -138,14 +140,14 @@ void QfwToolBox::expandItem(int index)
 
 //-----------------------------------------------------------------------------
 
-int QfwToolBox::addItem(QWidget *item, const QString &text)
+int QfwToolBox::addItem(QWidget* item, const QString& text)
 {
     return insertItem(-1, item, text);
 }
 
 //-----------------------------------------------------------------------------
 
-int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
+int QfwToolBox::insertItem(int index, QWidget* widget, const QString& text)
 {
     if (!widget)
     {
@@ -157,25 +159,29 @@ int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
     Page c;
     c.widget = widget;
     c.button = new QPushButton(this);
+    c.button->setObjectName("QfwToolBoxButton");
     c.button->setBackgroundRole(QPalette::Window);
     c.button->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
     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;"
-        );
     QPixmap pixOpen(branch_open);
     QPixmap pixClose(branch_closed);
     QIcon bIcon;
     bIcon.addPixmap( pixClose, QIcon::Normal, QIcon::Off );
     bIcon.addPixmap( pixOpen, QIcon::Active, QIcon::On );
     c.setIcon(bIcon);
-    c.button->setStyleSheet(style);
+    if(qApp->styleSheet().isEmpty())
+    {
+        QString style(
+            "text-align: left;"
+            "background-color: lightgray;"
+            "border-style: solid;"
+            "border-width: 1px;"
+            "border-color: darkgray;"
+            "height: 20px;"
+            );
+        c.button->setStyleSheet(style);
+    }
     connect(c.button, SIGNAL(toggled(bool)), this, SLOT(buttonToggled(bool)));
 
     c.sv = new QFrame(this);
@@ -207,7 +213,7 @@ int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
 
 void QfwToolBox::buttonToggled(bool checked)
 {
-    QPushButton *tb = qobject_cast<QPushButton*>(this->sender());
+    QPushButton* tb = qobject_cast<QPushButton*>(this->sender());
     QWidget* item   = 0;
     for (PageList::ConstIterator i = pageList.constBegin(); i != pageList.constEnd(); ++i)
     {
@@ -218,7 +224,7 @@ void QfwToolBox::buttonToggled(bool checked)
         }
     }
     int index  = this->indexOf(item);
-    Page *page = this->page(index);
+    Page* page = this->page(index);
     page->sv->setVisible(checked);
 }
 
@@ -248,10 +254,10 @@ void QfwToolBox::relayout()
 
 //-----------------------------------------------------------------------------
 
-void QfwToolBox::widgetDestroyed(QObject *object)
+void QfwToolBox::widgetDestroyed(QObject* object)
 {
-    QWidget *p = (QWidget*)object;
-    Page *c    = page(p);
+    QWidget* p = (QWidget*)object;
+    Page* c    = page(p);
     if (!p || !c)
     {
         return;
@@ -268,7 +274,7 @@ void QfwToolBox::widgetDestroyed(QObject *object)
 
 void QfwToolBox::removeItem(int index)
 {
-    if (QWidget *w = widget(index))
+    if (QWidget* w = widget(index))
     {
         disconnect(w, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)));
         w->setParent(this);
@@ -278,7 +284,7 @@ void QfwToolBox::removeItem(int index)
 
 //-----------------------------------------------------------------------------
 
-QWidget *QfwToolBox::widget(int index) const
+QWidget* QfwToolBox::widget(int index) const
 {
     if (index < 0 || index >= (int) this->pageList.size())
     {
@@ -289,9 +295,9 @@ QWidget *QfwToolBox::widget(int index) const
 
 //-----------------------------------------------------------------------------
 
-int QfwToolBox::indexOf(QWidget *widget) const
+int QfwToolBox::indexOf(QWidget* widget) const
 {
-    Page *c = (widget ? this->page(widget) : 0);
+    Page* c = (widget ? this->page(widget) : 0);
     return c ? this->pageList.indexOf(*c) : -1;
 }
 
@@ -299,7 +305,7 @@ int QfwToolBox::indexOf(QWidget *widget) const
 
 void QfwToolBox::setItemEnabled(int index, bool enabled)
 {
-    Page *c = this->page(index);
+    Page* c = this->page(index);
     if (!c)
     {
         return;
@@ -310,9 +316,9 @@ void QfwToolBox::setItemEnabled(int index, bool enabled)
 
 //-----------------------------------------------------------------------------
 
-void QfwToolBox::setItemText(int index, const QString &text)
+void QfwToolBox::setItemText(int index, const QString& text)
 {
-    Page *c = this->page(index);
+    Page* c = this->page(index);
     if (c)
     {
         c->setText(text);
@@ -321,9 +327,9 @@ void QfwToolBox::setItemText(int index, const QString &text)
 
 //-----------------------------------------------------------------------------
 
-void QfwToolBox::setItemToolTip(int index, const QString &toolTip)
+void QfwToolBox::setItemToolTip(int index, const QString& toolTip)
 {
-    Page *c = this->page(index);
+    Page* c = this->page(index);
     if (c)
     {
         c->setToolTip(toolTip);
@@ -334,7 +340,7 @@ void QfwToolBox::setItemToolTip(int index, const QString &toolTip)
 
 bool QfwToolBox::isItemEnabled(int index) const
 {
-    const Page *c = this->page(index);
+    const Page* c = this->page(index);
     return c && c->button->isEnabled();
 }
 
@@ -342,7 +348,7 @@ bool QfwToolBox::isItemEnabled(int index) const
 
 QString QfwToolBox::itemText(int index) const
 {
-    const Page *c = this->page(index);
+    const Page* c = this->page(index);
     return (c ? c->text() : QString());
 }
 
@@ -350,7 +356,7 @@ QString QfwToolBox::itemText(int index) const
 
 QString QfwToolBox::itemToolTip(int index) const
 {
-    const Page *c = this->page(index);
+    const Page* c = this->page(index);
     return (c ? c->toolTip() : QString());
 }
 
diff --git a/SrcLib/core/fwMedData/Properties.cmake b/SrcLib/core/fwMedData/Properties.cmake
index e1128ac..408abe5 100644
--- a/SrcLib/core/fwMedData/Properties.cmake
+++ b/SrcLib/core/fwMedData/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwData )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwMedData/include/fwMedData/AttachmentSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/AttachmentSeries.hpp
new file mode 100644
index 0000000..1428bb1
--- /dev/null
+++ b/SrcLib/core/fwMedData/include/fwMedData/AttachmentSeries.hpp
@@ -0,0 +1,97 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATA_ATTACHMENTSERIES_HPP__
+#define __FWMEDDATA_ATTACHMENTSERIES_HPP__
+
+#include "fwMedData/Series.hpp"
+#include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwData/factory/new.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+fwCampAutoDeclareDataMacro((fwMedData)(AttachmentSeries), FWMEDDATA_API);
+
+namespace fwMedData
+{
+
+/**
+ * @brief Holds attachment file
+ */
+class FWMEDDATA_CLASS_API AttachmentSeries : public ::fwMedData::Series
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (AttachmentSeries)(::fwData::Object), (()),
+                                            ::fwData::factory::New< AttachmentSeries >);
+
+    fwCampMakeFriendDataMacro((fwMedData)(AttachmentSeries));
+
+    /**
+     * @brief Constructor
+     * @param key Private construction key
+     */
+    FWMEDDATA_API AttachmentSeries(::fwData::Object::Key key);
+
+    /// Destructor
+    FWMEDDATA_API virtual ~AttachmentSeries();
+
+    /// Defines deep copy
+    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
+
+    /**
+     * @brief Availability
+     */
+    typedef enum
+    {
+        NONE     = 1,   /*! The attachment file is not available. */
+        LOCAL    = 2,   /*! The attachment file are on the local machine. */
+        EMBEDDED = 3    /*! The attachment are saved in this AttachmentSeries. */
+    } AttachmentAvailability;
+
+    /**
+     * @brief Local path of attachment file
+     * @{ */
+    FWMEDDATA_API const ::boost::filesystem::path& getAttachmentPath() const;
+
+    FWMEDDATA_API void setAttachmentPath(const ::boost::filesystem::path& path);
+    /**  @} */
+
+    /// Returns BufferObject of the current attachment file
+    FWMEDDATA_API ::fwMemory::BufferObject::sptr getBufferObject() const;
+
+    /// Returns the state of the attached file
+    FWMEDDATA_API AttachmentAvailability getAttachmentAvailability() const;
+
+    /// Returns the media type of the attached file
+    FWMEDDATA_API std::string getMediaType() const;
+
+    /// Specifies the media type of the attached file (see IANA list of official media types)
+    FWMEDDATA_API void setMediaType(const std::string& mediaType);
+
+protected:
+
+    /// BufferObject of the current attachment file
+    ::fwMemory::BufferObject::sptr m_buffer;
+
+    /// Local path of attachment file
+    ::boost::filesystem::path m_attachmentPath;
+
+    /// Attachment availability
+    AttachmentAvailability m_attachmentAvailability;
+
+    /// Media type of the attached file
+    std::string m_mediaType;
+};
+
+}   //end namespace fwMedData
+
+#endif // __FWMEDDATA_ATTACHMENTSERIES_HPP__
+
diff --git a/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp
index d63d7f2..6b7af42 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWMEDDATA_DICOMSERIES_HPP__
 #define __FWMEDDATA_DICOMSERIES_HPP__
 
-#include "fwMedData/types.hpp"
 #include "fwMedData/Series.hpp"
 #include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
 
-#include <fwData/Object.hpp>
 #include <fwData/factory/new.hpp>
 
 #include <boost/filesystem/path.hpp>
@@ -26,7 +25,6 @@ class Array;
 namespace fwMedData
 {
 
-
 /**
  * @brief Holds DICOM data
  */
@@ -116,6 +114,8 @@ public:
         return m_dicomAvailability;
     }
 
+    //------------------------------------------------------------------------------
+
     void setDicomAvailability(DICOM_AVAILABILITY val)
     {
         m_dicomAvailability = val;
@@ -129,6 +129,8 @@ public:
     {
         return m_localDicomPaths;
     }
+    //------------------------------------------------------------------------------
+
     void setLocalDicomPaths(const DicomPathContainerType& val)
     {
         m_localDicomPaths = val;
@@ -142,6 +144,8 @@ public:
     {
         return m_numberOfInstances;
     }
+    //------------------------------------------------------------------------------
+
     void setNumberOfInstances (std::size_t val)
     {
         m_numberOfInstances = val;
@@ -155,6 +159,8 @@ public:
     {
         return m_dicomBinaries;
     }
+    //------------------------------------------------------------------------------
+
     void setDicomBinaries (const DicomBinaryContainerType& val)
     {
         m_dicomBinaries = val;
@@ -168,6 +174,8 @@ public:
     {
         return m_SOPClassUIDs;
     }
+    //------------------------------------------------------------------------------
+
     void setSOPClassUIDs (const SOPClassUIDContainerType& val)
     {
         m_SOPClassUIDs = val;
@@ -181,6 +189,8 @@ public:
     {
         return m_computedTagValues;
     }
+    //------------------------------------------------------------------------------
+
     void setComputedTagValues (const ComputedTagValueContainerType& val)
     {
         m_computedTagValues = val;
@@ -195,16 +205,16 @@ public:
         return m_firstInstanceNumber;
     }
 
+    //------------------------------------------------------------------------------
+
     void setFirstInstanceNumber(std::size_t firstInstanceNumber)
     {
         m_firstInstanceNumber = firstInstanceNumber;
     }
     /**  @} */
 
-
     /**  @} */
 
-
 protected:
 
     /// Dicom Availability
@@ -233,4 +243,3 @@ protected:
 
 #endif // __FWMEDDATA_DICOMSERIES_HPP__
 
-
diff --git a/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp
index 6799f42..2ce6cb8 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWMEDDATA_IMAGESERIES_HPP__
 #define __FWMEDDATA_IMAGESERIES_HPP__
 
-#include "fwMedData/config.hpp"
 #include "fwMedData/Series.hpp"
+#include "fwMedData/config.hpp"
 #include "fwMedData/types.hpp"
 
 #include <fwData/factory/new.hpp>
-#include <fwData/Object.hpp>
-
 
 fwCampAutoDeclareDataMacro((fwMedData)(ImageSeries), FWMEDDATA_API);
 
@@ -25,7 +23,6 @@ class Image;
 namespace fwMedData
 {
 
-
 /**
  * @brief Holds images data
  */
@@ -48,10 +45,10 @@ public:
     FWMEDDATA_API virtual ~ImageSeries();
 
     /// Defines shallow copy
-    FWMEDDATA_API void shallowCopy( const ::fwData::Object::csptr &_source );
+    FWMEDDATA_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr &_source, DeepCopyCacheType &cache );
+    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
     /**
      * @name Getters / Setters
@@ -93,4 +90,3 @@ inline void ImageSeries::setImage(const SPTR(::fwData::Image)& val)
 
 #endif // __FWMEDDATA_IMAGESERIES_HPP__
 
-
diff --git a/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp
index 166b20f..d7aa2bd 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@
 #ifndef __FWMEDDATA_MODELSERIES_HPP__
 #define __FWMEDDATA_MODELSERIES_HPP__
 
-#include "fwMedData/config.hpp"
 #include "fwMedData/Series.hpp"
+#include "fwMedData/config.hpp"
 #include "fwMedData/types.hpp"
 
 #include <fwCom/Signal.hpp>
@@ -16,11 +16,8 @@
 
 #include <fwData/factory/new.hpp>
 
-#include <fwData/Object.hpp>
-
 #include <vector>
 
-
 fwCampAutoDeclareDataMacro((fwMedData)(ModelSeries), FWMEDDATA_API);
 
 namespace fwData
@@ -31,7 +28,6 @@ class Reconstruction;
 namespace fwMedData
 {
 
-
 /**
  * @brief Holds models data
  */
@@ -56,16 +52,16 @@ public:
     FWMEDDATA_API virtual ~ModelSeries();
 
     /// Defines shallow copy
-    FWMEDDATA_API void shallowCopy( const ::fwData::Object::csptr &_source );
+    FWMEDDATA_API void shallowCopy( const ::fwData::Object::csptr& _source );
 
     /// Defines deep copy
-    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr &_source, DeepCopyCacheType &cache );
+    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
 
     /**
      * @name Getters / Setters
      * @{ */
-    const ReconstructionVectorType &getReconstructionDB() const;
-    void setReconstructionDB(const ReconstructionVectorType &val);
+    const ReconstructionVectorType& getReconstructionDB() const;
+    void setReconstructionDB(const ReconstructionVectorType& val);
     /**  @} */
 
     /***
@@ -119,7 +115,7 @@ inline const ModelSeries::ReconstructionVectorType& ModelSeries::getReconstructi
 
 //-----------------------------------------------------------------------------
 
-inline void ModelSeries::setReconstructionDB(const ModelSeries::ReconstructionVectorType &val)
+inline void ModelSeries::setReconstructionDB(const ModelSeries::ReconstructionVectorType& val)
 {
     m_reconstructionDB = val;
 }
@@ -130,4 +126,3 @@ inline void ModelSeries::setReconstructionDB(const ModelSeries::ReconstructionVe
 
 #endif // __FWMEDDATA_MODELSERIES_HPP__
 
-
diff --git a/SrcLib/core/fwMedData/include/fwMedData/NavigationSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/NavigationSeries.hpp
new file mode 100644
index 0000000..159ab4c
--- /dev/null
+++ b/SrcLib/core/fwMedData/include/fwMedData/NavigationSeries.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 __FWMEDDATA_NAVIGATIONSERIES_HPP__
+#define __FWMEDDATA_NAVIGATIONSERIES_HPP__
+
+#include "fwMedData/Series.hpp"
+#include "fwMedData/config.hpp"
+
+#include <fwData/factory/new.hpp>
+
+#include <array>
+#include <map>
+
+fwCampAutoDeclareDataMacro((fwMedData)(NavigationSeries), FWMEDDATA_API);
+
+namespace fwMedData
+{
+
+class Series;
+
+/**
+ * @brief Holds navigation information
+ */
+class FWMEDDATA_CLASS_API NavigationSeries : public ::fwMedData::Series
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (NavigationSeries)(::fwMedData::Series),
+                                            (()),
+                                            ::fwData::factory::New< NavigationSeries >);
+
+    fwCampMakeFriendDataMacro((fwMedData)(NavigationSeries));
+
+    typedef std::array<double, 3> CoordinateType;
+    typedef double TimestampType;
+    typedef std::map<TimestampType, CoordinateType> ContainerType;
+
+    /**
+     * @brief Constructor
+     * @param key Private construction key
+     */
+    FWMEDDATA_API NavigationSeries(::fwData::Object::Key key);
+
+    /// Destructor
+    FWMEDDATA_API virtual ~NavigationSeries();
+
+    /// 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 );
+
+    /// Adds a position associate with the specified timestamp
+    FWMEDDATA_API void addPosition(TimestampType time, const CoordinateType& pos);
+
+    /// Adds a move direction associate with the specified timestamp
+    FWMEDDATA_API void addMove(TimestampType time, const CoordinateType& dir);
+
+    /// Adds a lookAt point associate with the specified timestamp
+    FWMEDDATA_API void addLookAt(TimestampType time, const CoordinateType& point);
+
+    /// Removes the position (if one exists) associate with the specified timestamp
+    FWMEDDATA_API void erasePosition(TimestampType time);
+
+    /// Removes the move direction (if one exists) associate with the specified timestamp
+    FWMEDDATA_API void eraseMove(TimestampType time);
+
+    /// Removes the lookAt point (if one exists) associate with the specified timestamp
+    FWMEDDATA_API void eraseLookAt(TimestampType time);
+
+    /// Clear all positions
+    FWMEDDATA_API void clearPosition();
+
+    /// Clear all move directions
+    FWMEDDATA_API void clearMove();
+
+    /// Clear all lookAt points
+    FWMEDDATA_API void clearLookAt();
+
+    /// Returns positions map container
+    FWMEDDATA_API const ContainerType& getPositionMap() const;
+
+    /// Returns move map container
+    FWMEDDATA_API const ContainerType& getMoveMap() const;
+
+    /// Returns lokAt map container
+    FWMEDDATA_API const ContainerType& getLookAtMap() const;
+
+protected:
+
+    ContainerType m_position;
+    ContainerType m_move;
+    ContainerType m_lookAt;
+};
+
+}   //end namespace fwMedData
+
+#endif // __FWMEDDATA_NAVIGATIONSERIES_HPP__
+
+
diff --git a/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
index ff6a424..32c9dca 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwData/Composite.hpp>
 #include <fwData/Exception.hpp>
-#include <fwData/Object.hpp>
 #include <fwData/registry/macros.hpp>
 
 fwDataRegisterMacro( ::fwMedData::ActivitySeries );
@@ -16,8 +15,9 @@ fwDataRegisterMacro( ::fwMedData::ActivitySeries );
 namespace fwMedData
 {
 
-ActivitySeries::ActivitySeries(::fwData::Object::Key key) : Series(key),
-                                                            m_data(::fwData::Composite::New())
+ActivitySeries::ActivitySeries(::fwData::Object::Key key) :
+    Series(key),
+    m_data(::fwData::Composite::New())
 {
 }
 
@@ -29,7 +29,7 @@ ActivitySeries::~ActivitySeries()
 
 //------------------------------------------------------------------------------
 
-void ActivitySeries::shallowCopy(const ::fwData::Object::csptr &_source)
+void ActivitySeries::shallowCopy(const ::fwData::Object::csptr& _source)
 {
     ActivitySeries::csptr other = ActivitySeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
@@ -43,7 +43,7 @@ void ActivitySeries::shallowCopy(const ::fwData::Object::csptr &_source)
 
 //------------------------------------------------------------------------------
 
-void ActivitySeries::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCacheType &cache)
+void ActivitySeries::cachedDeepCopy(const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache)
 {
     ActivitySeries::csptr other = ActivitySeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
diff --git a/SrcLib/core/fwMedData/src/fwMedData/AttachmentSeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/AttachmentSeries.cpp
new file mode 100644
index 0000000..bf449ea
--- /dev/null
+++ b/SrcLib/core/fwMedData/src/fwMedData/AttachmentSeries.cpp
@@ -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 ****** */
+
+#include "fwMedData/AttachmentSeries.hpp"
+
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
+
+#include <fwMemory/stream/in/Raw.hpp>
+
+#include <boost/filesystem/operations.hpp>
+
+fwDataRegisterMacro( ::fwMedData::AttachmentSeries );
+
+namespace fwMedData
+{
+
+AttachmentSeries::AttachmentSeries(::fwData::Object::Key key) : Series(key),
+                                                                m_buffer(::fwMemory::BufferObject::New()),
+                                                                m_attachmentAvailability(NONE)
+{
+}
+
+//------------------------------------------------------------------------------
+
+AttachmentSeries::~AttachmentSeries()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeries::cachedDeepCopy(const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache)
+{
+    AttachmentSeries::csptr other = AttachmentSeries::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);
+
+    if( !other->m_buffer->isEmpty() )
+    {
+        ::fwMemory::BufferObject::Lock lockerDest(m_buffer);
+        m_buffer->allocate(other->m_buffer->getSize());
+        char* buffDest = static_cast< char* >( lockerDest.getBuffer() );
+
+        ::fwMemory::BufferObject::Lock lockerSource(other->m_buffer);
+        char* buffSrc = static_cast< char* >( lockerSource.getBuffer() );
+
+        std::copy(buffSrc, buffSrc+other->m_buffer->getSize(), buffDest );
+    }
+    m_attachmentAvailability = other->m_attachmentAvailability;
+    m_attachmentPath         = other->m_attachmentPath;
+    m_mediaType              = other->m_mediaType;
+}
+
+//------------------------------------------------------------------------------
+
+const ::boost::filesystem::path& AttachmentSeries::getAttachmentPath() const
+{
+    return m_attachmentPath;
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeries::setAttachmentPath(const ::boost::filesystem::path& path)
+{
+    m_attachmentPath = path;
+    size_t buffSize = ::boost::filesystem::file_size(path);
+    m_buffer->setIStreamFactory( std::make_shared< ::fwMemory::stream::in::Raw >(path),
+                                 buffSize, path, ::fwMemory::RAW);
+    m_attachmentAvailability = LOCAL;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMemory::BufferObject::sptr AttachmentSeries::getBufferObject () const
+{
+    return m_buffer;
+}
+
+//------------------------------------------------------------------------------
+
+AttachmentSeries::AttachmentAvailability AttachmentSeries::getAttachmentAvailability() const
+{
+    return m_attachmentAvailability;
+}
+
+//------------------------------------------------------------------------------
+
+std::string AttachmentSeries::getMediaType() const
+{
+    return m_mediaType;
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeries::setMediaType(const std::string& mediaType)
+{
+    m_mediaType = mediaType;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwMedData
+
diff --git a/SrcLib/core/fwMedData/src/fwMedData/NavigationSeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/NavigationSeries.cpp
new file mode 100644
index 0000000..cfdbd7c
--- /dev/null
+++ b/SrcLib/core/fwMedData/src/fwMedData/NavigationSeries.cpp
@@ -0,0 +1,145 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwMedData/NavigationSeries.hpp"
+
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
+
+fwDataRegisterMacro( ::fwMedData::NavigationSeries );
+
+namespace fwMedData
+{
+
+NavigationSeries::NavigationSeries(::fwData::Object::Key key) :
+    Series(key)
+{
+}
+
+//------------------------------------------------------------------------------
+
+NavigationSeries::~NavigationSeries()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::shallowCopy(const ::fwData::Object::csptr& _source)
+{
+    NavigationSeries::csptr other = NavigationSeries::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_position = other->m_position;
+    m_move     = other->m_move;
+    m_lookAt   = other->m_lookAt;
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::cachedDeepCopy(const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache)
+{
+    NavigationSeries::csptr other = NavigationSeries::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_position = other->m_position;
+    m_move     = other->m_move;
+    m_lookAt   = other->m_lookAt;
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::addPosition(TimestampType time, const CoordinateType& pos)
+{
+    m_position[time] = pos;
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::addMove(TimestampType time, const CoordinateType& dir)
+{
+    m_move[time] = dir;
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::addLookAt(TimestampType time, const CoordinateType& point)
+{
+    m_lookAt[time] = point;
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::erasePosition(TimestampType time)
+{
+    m_position.erase(time);
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::eraseMove(TimestampType time)
+{
+    m_move.erase(time);
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::eraseLookAt(TimestampType time)
+{
+    m_lookAt.erase(time);
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::clearPosition()
+{
+    m_position.clear();
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::clearMove()
+{
+    m_move.clear();
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeries::clearLookAt()
+{
+    m_lookAt.clear();
+}
+
+//------------------------------------------------------------------------------
+
+const NavigationSeries::ContainerType& NavigationSeries::getPositionMap() const
+{
+    return m_position;
+}
+
+//------------------------------------------------------------------------------
+
+const NavigationSeries::ContainerType& NavigationSeries::getMoveMap() const
+{
+    return m_move;
+}
+
+//------------------------------------------------------------------------------
+
+const NavigationSeries::ContainerType& NavigationSeries::getLookAtMap() const
+{
+    return m_lookAt;
+}
+
+} // namespace fwMedData
+
diff --git a/SrcLib/core/fwMedData/test/Properties.cmake b/SrcLib/core/fwMedData/test/Properties.cmake
index 3bb3652..90b4806 100644
--- a/SrcLib/core/fwMedData/test/Properties.cmake
+++ b/SrcLib/core/fwMedData/test/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME fwMedDataTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwData fwMedData fwTools )
+set( DEPENDENCIES
+    fwCore
+    fwTest
+    fwData
+    fwMedData
+    fwMemory
+    fwTools
+    fwAtomsBoostIO
+    fwZip
+    fwAtomConversion
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwMedData/test/tu/include/AttachmentSeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/AttachmentSeriesTest.hpp
new file mode 100644
index 0000000..f8c0e79
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/include/AttachmentSeriesTest.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_ATTACHMENTSERIESTEST_HPP__
+#define __FWMEDDATA_UT_ATTACHMENTSERIESTEST_HPP__
+
+#include <fwMedData/AttachmentSeries.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMedData
+{
+namespace ut
+{
+
+class AttachmentSeriesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( AttachmentSeriesTest );
+CPPUNIT_TEST(attachmentTest);
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void attachmentTest();
+
+private:
+    ::fwMedData::AttachmentSeries::sptr m_series;
+};
+
+} //namespace ut
+} //namespace fwMedData
+
+#endif //__FWMEDDATA_UT_ATTACHMENTSERIESTEST_HPP__
+
diff --git a/SrcLib/core/fwMedData/test/tu/include/NavigationSeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/NavigationSeriesTest.hpp
new file mode 100644
index 0000000..76861c0
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/include/NavigationSeriesTest.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_NAVIGATIONSERIESTEST_HPP__
+#define __FWMEDDATA_UT_NAVIGATIONSERIESTEST_HPP__
+
+#include <fwMedData/NavigationSeries.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMedData
+{
+namespace ut
+{
+
+class NavigationSeriesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( NavigationSeriesTest );
+CPPUNIT_TEST(navigationTest);
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void navigationTest();
+
+private:
+    ::fwMedData::NavigationSeries::sptr m_series;
+};
+
+} //namespace ut
+} //namespace fwMedData
+
+#endif //__FWMEDDATA_UT_NAVIGATIONSERIESTEST_HPP__
+
diff --git a/SrcLib/core/fwMedData/test/tu/src/AttachmentSeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/AttachmentSeriesTest.cpp
new file mode 100644
index 0000000..09b8d98
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/src/AttachmentSeriesTest.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 "AttachmentSeriesTest.hpp"
+
+#include <fwAtomConversion/convert.hpp>
+
+#include <fwAtomsBoostIO/Reader.hpp>
+#include <fwAtomsBoostIO/Writer.hpp>
+#include <fwAtomsBoostIO/types.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/System.hpp>
+#include <fwTools/Type.hpp>
+
+#include <fwZip/ReadDirArchive.hpp>
+#include <fwZip/ReadZipArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <fstream>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::AttachmentSeriesTest );
+
+namespace fwMedData
+{
+namespace ut
+{
+
+::fwAtoms::Object::sptr readAttachment( const ::boost::filesystem::path& filePath )
+{
+    const ::boost::filesystem::path folderPath = filePath.parent_path();
+    const ::boost::filesystem::path filename   = filePath.filename();
+    const std::string extension                = ::boost::filesystem::extension(filePath);
+
+    ::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
+    {
+        FW_RAISE( "This file extension '" << extension << "' is not managed" );
+    }
+
+    ::fwAtomsBoostIO::Reader reader;
+    ::fwAtoms::Object::sptr atom =
+        ::fwAtoms::Object::dynamicCast(reader.read(readArchive, archiveRootName, format));
+
+    return atom;
+}
+
+//------------------------------------------------------------------------------
+
+void writeAttachment( const ::boost::filesystem::path& filePath, const ::fwAtoms::Object::sptr atom )
+{
+    const ::boost::filesystem::path folderPath = filePath.parent_path();
+    const ::boost::filesystem::path filename   = filePath.filename();
+    std::string extension                      = ::boost::filesystem::extension(filePath);
+
+    // Write atom
+    ::fwZip::IWriteArchive::sptr writeArchive;
+    ::fwAtomsBoostIO::FormatType format;
+    ::boost::filesystem::path archiveRootName;
+
+    if ( extension == ".json" )
+    {
+        writeArchive    = ::fwZip::WriteDirArchive::New(folderPath.string());
+        archiveRootName = filename;
+        format          = ::fwAtomsBoostIO::JSON;
+    }
+    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
+    {
+        FW_RAISE( "This file extension '" << extension << "' is not managed" );
+    }
+
+    ::fwAtomsBoostIO::Writer(atom).write( writeArchive, archiveRootName, format );
+    writeArchive.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeriesTest::setUp()
+{
+    // Set up context before running a test.
+    m_series = ::fwMedData::AttachmentSeries::New();
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeriesTest::tearDown()
+{
+    // Clean up after the test run.
+    m_series.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void AttachmentSeriesTest::attachmentTest()
+{
+    CPPUNIT_ASSERT(m_series);
+
+    //Create Path
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "attachmenttest";
+    ::boost::filesystem::create_directories(path);
+    const std::string filename                     = "attach.ext";
+    const ::boost::filesystem::path attachmentFile = path / filename;
+    const std::string mediaType                    = "text";
+
+    std::ofstream file;
+    file.open(attachmentFile.string().c_str(), std::ofstream::out);
+    file << "42";
+    file.close();
+    size_t fileSize = ::boost::filesystem::file_size(attachmentFile);
+
+    //None
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::AttachmentSeries::NONE, m_series->getAttachmentAvailability());
+    CPPUNIT_ASSERT(m_series->getBufferObject()->isEmpty());
+
+    //Local
+    m_series->setAttachmentPath(attachmentFile);
+    m_series->setMediaType(mediaType);
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::AttachmentSeries::LOCAL, m_series->getAttachmentAvailability());
+    CPPUNIT_ASSERT_EQUAL(attachmentFile, m_series->getAttachmentPath());
+    CPPUNIT_ASSERT(!m_series->getBufferObject()->isEmpty());
+    CPPUNIT_ASSERT_EQUAL(fileSize, m_series->getBufferObject()->getSize());
+    CPPUNIT_ASSERT_EQUAL(mediaType, m_series->getMediaType());
+
+    //Embedded
+    const std::string jsonzFile = "AttachmentSeriesTest.jsonz";
+    ::fwAtoms::Object::sptr atom1 = ::fwAtomConversion::convert(m_series);
+    writeAttachment((path/jsonzFile), atom1);
+    ::fwAtoms::Object::sptr atom2 = readAttachment(path/jsonzFile);
+
+    ::fwData::Object::sptr object;
+    ::fwMedData::AttachmentSeries::sptr attachmentSeries;
+
+    object           = ::fwAtomConversion::convert(atom2, ::fwAtomConversion::AtomVisitor::ChangePolicy());
+    attachmentSeries = ::fwMedData::AttachmentSeries::dynamicCast(object);
+
+    CPPUNIT_ASSERT(attachmentSeries);
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::AttachmentSeries::EMBEDDED, attachmentSeries->getAttachmentAvailability());
+    CPPUNIT_ASSERT_EQUAL(filename, attachmentSeries->getAttachmentPath().string());
+    CPPUNIT_ASSERT_EQUAL(mediaType, attachmentSeries->getMediaType());
+
+    ::fwMemory::BufferObject::sptr buff = attachmentSeries->getBufferObject();
+    ::fwMemory::BufferObject::Lock lock = buff->lock();
+    CPPUNIT_ASSERT_EQUAL(fileSize, buff->getSize());
+    CPPUNIT_ASSERT( lock.getBuffer() != nullptr );
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMedData
diff --git a/SrcLib/core/fwMedData/test/tu/src/NavigationSeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/NavigationSeriesTest.cpp
new file mode 100644
index 0000000..e85933c
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/src/NavigationSeriesTest.cpp
@@ -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 ****** */
+
+#include "NavigationSeriesTest.hpp"
+
+#include <fwAtomConversion/convert.hpp>
+
+#include <fwAtomsBoostIO/Reader.hpp>
+#include <fwAtomsBoostIO/Writer.hpp>
+#include <fwAtomsBoostIO/types.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/System.hpp>
+#include <fwTools/Type.hpp>
+
+#include <fwZip/ReadDirArchive.hpp>
+#include <fwZip/ReadZipArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <fstream>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::NavigationSeriesTest );
+
+namespace fwMedData
+{
+namespace ut
+{
+
+::fwAtoms::Object::sptr readNavigation( const ::boost::filesystem::path& filePath )
+{
+    const ::boost::filesystem::path folderPath = filePath.parent_path();
+    const ::boost::filesystem::path filename   = filePath.filename();
+    const std::string extension                = ::boost::filesystem::extension(filePath);
+
+    ::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
+    {
+        FW_RAISE( "This file extension '" << extension << "' is not managed" );
+    }
+
+    ::fwAtomsBoostIO::Reader reader;
+    ::fwAtoms::Object::sptr atom =
+        ::fwAtoms::Object::dynamicCast(reader.read(readArchive, archiveRootName, format));
+
+    return atom;
+}
+
+//------------------------------------------------------------------------------
+
+void writeNavigation( const ::boost::filesystem::path& filePath, const ::fwAtoms::Object::sptr atom )
+{
+    const ::boost::filesystem::path folderPath = filePath.parent_path();
+    const ::boost::filesystem::path filename   = filePath.filename();
+    std::string extension                      = ::boost::filesystem::extension(filePath);
+
+    // Write atom
+    ::fwZip::IWriteArchive::sptr writeArchive;
+    ::fwAtomsBoostIO::FormatType format;
+    ::boost::filesystem::path archiveRootName;
+
+    if ( extension == ".json" )
+    {
+        writeArchive    = ::fwZip::WriteDirArchive::New(folderPath.string());
+        archiveRootName = filename;
+        format          = ::fwAtomsBoostIO::JSON;
+    }
+    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
+    {
+        FW_RAISE( "This file extension '" << extension << "' is not managed" );
+    }
+
+    ::fwAtomsBoostIO::Writer(atom).write( writeArchive, archiveRootName, format );
+    writeArchive.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeriesTest::setUp()
+{
+    // Set up context before running a test.
+    m_series = ::fwMedData::NavigationSeries::New();
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeriesTest::tearDown()
+{
+    // Clean up after the test run.
+    m_series.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeriesTest::navigationTest()
+{
+    CPPUNIT_ASSERT(m_series);
+    ::fwMedData::NavigationSeries::ContainerType positions =
+    {
+        {0., {-514.1606513019431, -94.68116795798758, 979.3785055174628}}
+    };
+
+    ::fwMedData::NavigationSeries::ContainerType move =
+    {
+        {0., {0.897820633950464, 0.13607544320686907, -1.2769419285130967}},
+        {1421.375, {2.322431935080602, 0.33708203932328956, -3.734284956660633}},
+        {2114.208, {2.43713135678714, -0.049220088700801926, -3.266794030753196}},
+        {3377.9159999999997, {0., 0., 0.}},
+        {4027.6536502546687, {-3.964310130780936, 0.08006285575503613, 5.313864037415808}},
+        {6237.149579831932, {0., 0., 0.}},
+        {6500.074702886248, {-0.8058588959846187, 1.6088833889257592, -2.2406369414514837}},
+        {7616.651952461799, {0.15881288125106394, 0.9634983958585909, -3.792280054764281}},
+        {9291.517826825127, {15.00876504273313, 1.948698699541007, 9.621351972786318}},
+        {10328.339558573854, {8.746762102220163, -1.3252231011236748, 0.40990799919194243}},
+        {11344.944, {3.107379091978582, 0.24758149132857085, -1.7704233405817775}},
+        {13717.94906621392, {-14.868514648384936, -0.06864726970614742, -1.8512522029189045}},
+        {14874.404074702887, {-2.1505985395333633, 0.0025699595738454374, -0.5800507110513734}},
+        {15472.570458404074, {0.5463244285267206, -0.009449336194383946, -4.067785389892101}},
+        {18862.179966044143, {0., 0., 0.}},
+        {20576.923599320886, {-1.4763543428185393, 0.6215147468157091, 4.983670944496179}},
+        {23208.855687606112, {0., 0., 0.}}
+    };
+
+    ::fwMedData::NavigationSeries::ContainerType lookAt =
+    {
+        {0., {216.48659596562175, -109.43725495319805, 0.}},
+        {4027.6536502546687, {206.6271751068543, -90.3143606602177, -7.6435594203111314}},
+        {6500.074702886248, {206.6271751068543, -90.3143606602177, -7.6435594203111314}}
+    };
+
+    // Test add API
+    for(const auto& elt : positions)
+    {
+        m_series->addPosition(elt.first, elt.second);
+    }
+    for(const auto& elt : move)
+    {
+        m_series->addMove(elt.first, elt.second);
+    }
+    for(const auto& elt : lookAt)
+    {
+        m_series->addLookAt(elt.first, elt.second);
+    }
+    CPPUNIT_ASSERT_EQUAL(positions.size(), m_series->getPositionMap().size());
+    CPPUNIT_ASSERT_EQUAL(move.size(), m_series->getMoveMap().size());
+    CPPUNIT_ASSERT_EQUAL(lookAt.size(), m_series->getLookAtMap().size());
+
+    CPPUNIT_ASSERT(positions == m_series->getPositionMap());
+    CPPUNIT_ASSERT(move == m_series->getMoveMap());
+    CPPUNIT_ASSERT(lookAt == m_series->getLookAtMap());
+
+    // Create Path
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "navigationtest";
+    ::boost::filesystem::create_directories(path);
+
+    const std::string jsonzFile = "NavigationSeriesTest.jsonz";
+    ::fwAtoms::Object::sptr atom1 = ::fwAtomConversion::convert(m_series);
+    writeNavigation((path/jsonzFile), atom1);
+
+    ::fwAtoms::Object::sptr atom2 = readNavigation(path/jsonzFile);
+
+    ::fwData::Object::sptr object;
+    ::fwMedData::NavigationSeries::sptr navigationSeries;
+
+    object           = ::fwAtomConversion::convert(atom2, ::fwAtomConversion::AtomVisitor::ChangePolicy());
+    navigationSeries = ::fwMedData::NavigationSeries::dynamicCast(object);
+
+    // Test get API
+    CPPUNIT_ASSERT(navigationSeries);
+    CPPUNIT_ASSERT_EQUAL(positions.size(), navigationSeries->getPositionMap().size());
+    CPPUNIT_ASSERT_EQUAL(move.size(), navigationSeries->getMoveMap().size());
+    CPPUNIT_ASSERT_EQUAL(lookAt.size(), navigationSeries->getLookAtMap().size());
+
+    CPPUNIT_ASSERT(positions == navigationSeries->getPositionMap());
+    CPPUNIT_ASSERT(move == navigationSeries->getMoveMap());
+    CPPUNIT_ASSERT(lookAt == navigationSeries->getLookAtMap());
+
+    // Test erase API
+    double timestamp = positions.begin()->first;
+    navigationSeries->erasePosition(timestamp);
+    CPPUNIT_ASSERT(navigationSeries->getPositionMap().find(timestamp) == navigationSeries->getPositionMap().end());
+
+    timestamp = move.begin()->first;
+    navigationSeries->eraseMove(timestamp);
+    CPPUNIT_ASSERT(navigationSeries->getMoveMap().find(timestamp) == navigationSeries->getMoveMap().end());
+
+    timestamp = lookAt.begin()->first;
+    navigationSeries->eraseLookAt(timestamp);
+    CPPUNIT_ASSERT(navigationSeries->getLookAtMap().find(timestamp) == navigationSeries->getLookAtMap().end());
+
+    // Test clear API
+    navigationSeries->clearPosition();
+    CPPUNIT_ASSERT(navigationSeries->getPositionMap().empty());
+
+    navigationSeries->clearMove();
+    CPPUNIT_ASSERT(navigationSeries->getMoveMap().empty());
+
+    navigationSeries->clearLookAt();
+    CPPUNIT_ASSERT(navigationSeries->getLookAtMap().empty());
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMedData
diff --git a/SrcLib/core/fwMedDataCamp/CMakeLists.txt b/SrcLib/core/fwMedDataCamp/CMakeLists.txt
new file mode 100644
index 0000000..a16777b
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/CMakeLists.txt
@@ -0,0 +1,3 @@
+fwLoadProperties()
+
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/SrcLib/tests/fwTest/Properties.cmake b/SrcLib/core/fwMedDataCamp/Properties.cmake
similarity index 63%
copy from SrcLib/tests/fwTest/Properties.cmake
copy to SrcLib/core/fwMedDataCamp/Properties.cmake
index 72a815e..f322cc6 100644
--- a/SrcLib/tests/fwTest/Properties.cmake
+++ b/SrcLib/core/fwMedDataCamp/Properties.cmake
@@ -1,15 +1,11 @@
 
-set( NAME fwTest )
+set( NAME fwMedDataCamp )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES
-    fwCore
     fwData
     fwDataCamp
-    fwDataTools
-    fwMath
     fwMedData
-    fwTools
 )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET fwDataCamp )
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
similarity index 81%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
index 8e6a052..ec2650e 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,10 +7,13 @@
 #ifndef __FWMEDDATACAMP_ACTIVITYSERIES_HPP__
 #define __FWMEDDATACAMP_ACTIVITYSERIES_HPP__
 
+#include "fwMedDataCamp/config.hpp"
+
 #include <fwCamp/macros.hpp>
-#include <fwMedData/ActivitySeries.hpp>
 
-#include "fwDataCamp/config.hpp"
+#include <fwData/Composite.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
 
 fwCampDeclareAccessor((fwMedData)(ActivitySeries), (fwData)(Composite));
 
diff --git a/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/AttachmentSeries.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/AttachmentSeries.hpp
new file mode 100644
index 0000000..45dafa1
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/AttachmentSeries.hpp
@@ -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 ****** */
+
+#ifndef __FWMEDDATACAMP_ATTACHMENTSERIES_HPP__
+#define __FWMEDDATACAMP_ATTACHMENTSERIES_HPP__
+
+#include "fwMedDataCamp/config.hpp"
+
+#include <fwCamp/macros.hpp>
+
+#include <fwMedData/AttachmentSeries.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+fwCampDeclareAccessor((fwMedData)(AttachmentSeries), (fwMemory)(BufferObject));
+
+fwCampAutoDeclareEnumMacro((fwMedData)(AttachmentSeries)(AttachmentAvailability));
+
+#endif // __FWMEDDATACAMP_ATTACHMENTSERIES_HPP__
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/DicomSeries.hpp
similarity index 80%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/DicomSeries.hpp
index 4481a22..06431be 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/DicomSeries.hpp
@@ -7,15 +7,14 @@
 #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 "fwMedDataCamp/config.hpp"
 
 #include <fwCamp/macros.hpp>
+
 #include <fwData/Array.hpp>
 
+#include <fwMedData/DicomSeries.hpp>
+
 fwCampAutoDeclareEnumMacro((fwMedData)(DicomSeries)(DICOM_AVAILABILITY));
 
 fwCampDeclareAccessor((fwMedData)(DicomSeries), (fwData)(Array));
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ImageSeries.hpp
similarity index 81%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ImageSeries.hpp
index a18f4a4..414de4a 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/ImageSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,10 +7,13 @@
 #ifndef __FWMEDDATACAMP_IMAGESERIES_HPP__
 #define __FWMEDDATACAMP_IMAGESERIES_HPP__
 
+#include "fwMedDataCamp/config.hpp"
+
 #include <fwCamp/macros.hpp>
-#include <fwMedData/ImageSeries.hpp>
 
-#include "fwDataCamp/config.hpp"
+#include <fwData/Image.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
 
 fwCampDeclareAccessor((fwMedData)(ImageSeries), (fwData)(Image));
 
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Series.hpp
similarity index 76%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Series.hpp
index 3c2e5c3..f078391 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Series.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,10 +7,14 @@
 #ifndef __FWMEDDATACAMP_SERIES_HPP__
 #define __FWMEDDATACAMP_SERIES_HPP__
 
+#include "fwMedDataCamp/config.hpp"
+
 #include <fwCamp/macros.hpp>
-#include <fwMedData/Series.hpp>
 
-#include "fwDataCamp/config.hpp"
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/Study.hpp>
 
 fwCampDeclareAccessor((fwMedData)(Series), (fwMedData)(Patient));
 fwCampDeclareAccessor((fwMedData)(Series), (fwMedData)(Study));
diff --git a/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Version.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Version.hpp
new file mode 100644
index 0000000..7446f6a
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/Version.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 __FWMEDDATACAMP_VERSION_HPP__
+#define __FWMEDDATACAMP_VERSION_HPP__
+
+#include "fwMedDataCamp/config.hpp"
+
+namespace fwMedDataCamp
+{
+/// Class to manage fwMedDataCamp version
+struct Version
+{
+    FWMEDDATACAMP_API static const int s_CURRENT_VERSION;
+};
+}
+
+#endif // __FWMEDDATACAMP_VERSION_HPP__
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/autoload.hpp
similarity index 75%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/autoload.hpp
index 1a67087..249a3c1 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/autoload.hpp
@@ -7,21 +7,25 @@
 #ifndef __FWMEDDATACAMP_AUTOLOAD_HPP__
 #define __FWMEDDATACAMP_AUTOLOAD_HPP__
 
-#include <fwCamp/macros.hpp>
+#include "fwMedDataCamp/ActivitySeries.hpp"
+#include "fwMedDataCamp/AttachmentSeries.hpp"
+#include "fwMedDataCamp/DicomSeries.hpp"
+#include "fwMedDataCamp/ImageSeries.hpp"
+#include "fwMedDataCamp/Series.hpp"
 
+#include <fwCamp/macros.hpp>
 
 #include <fwMedData/ActivitySeries.hpp>
 #include <fwMedData/DicomSeries.hpp>
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/NavigationSeries.hpp>
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Series.hpp>
 #include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
 
-#include <fwMedDataCamp/DicomSeries.hpp>
-
 namespace fwMedDataCamp
 {
 
@@ -39,6 +43,9 @@ struct runner
         localDeclarefwMedDataActivitySeries();
         localDeclarefwMedDataDicomSeriesDICOM_AVAILABILITY();
         localDeclarefwMedDataDicomSeries();
+        localDeclarefwMedDataAttachmentSeriesAttachmentAvailability();
+        localDeclarefwMedDataAttachmentSeries();
+        localDeclarefwMedDataNavigationSeries();
     }
 
     static runner r;
diff --git a/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/camp/mapper.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/camp/mapper.hpp
new file mode 100644
index 0000000..e78f646
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/camp/mapper.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 __FWMEDDATACAMP_CAMP_MAPPER_HPP__
+#define __FWMEDDATACAMP_CAMP_MAPPER_HPP__
+
+#include <fwCamp/Mapper/ValueMapper.hpp>
+
+#include <fwMedData/NavigationSeries.hpp>
+
+#include <boost/algorithm/string.hpp>
+
+namespace camp_ext
+{
+
+template <>
+struct ValueMapper< ::fwMedData::NavigationSeries::CoordinateType >
+{
+    typedef ::fwMedData::NavigationSeries::CoordinateType ReturnType;
+    static const int type = camp::stringType;
+    static const std::string to(const ReturnType& source)
+    {
+        std::string result;
+
+        std::string current = ::boost::lexical_cast<std::string>(source[0]);
+        result += current;
+        result += ";";
+
+        current = ::boost::lexical_cast<std::string>(source[1]);
+        result += current;
+        result += ";";
+
+        current = ::boost::lexical_cast<std::string>(source[2]);
+        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(const std::string& source)
+    {
+        std::vector< std::string> result;
+        ReturnType coord;
+        ::boost::split(result, source, ::boost::is_any_of(";"));
+
+        if(result.size() >= 3)
+        {
+            coord[0] = ValueMapper<double>::from(result[0]);
+            coord[1] = ValueMapper<double>::from(result[1]);
+            coord[2] = ValueMapper<double>::from(result[2]);
+        }
+        else
+        {
+            OSLM_WARN("Invalid number of components: " << result.size());
+        }
+        return coord;
+    }
+};
+
+} //camp_ext
+
+#endif /* __FWMEDDATACAMP_CAMP_MAPPER_HPP__ */
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/namespace.hpp
similarity index 87%
rename from SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp
rename to SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/namespace.hpp
index 42c13e5..1a52ee0 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp
+++ b/SrcLib/core/fwMedDataCamp/include/fwMedDataCamp/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * 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 ****** */
@@ -9,7 +9,6 @@
 
 /**
  * @brief This namespace contains medical data object descriptions used for introspection.
- * @namespace fwMedDataCamp
  **/
 
 namespace fwMedDataCamp
diff --git a/SrcLib/core/fwDataCamp/src/autoload.cpp b/SrcLib/core/fwMedDataCamp/src/autoload.cpp
similarity index 61%
copy from SrcLib/core/fwDataCamp/src/autoload.cpp
copy to SrcLib/core/fwMedDataCamp/src/autoload.cpp
index bef8e37..2a994c8 100644
--- a/SrcLib/core/fwDataCamp/src/autoload.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/autoload.cpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "fwDataCamp/autoload.hpp"
 #include "fwMedDataCamp/autoload.hpp"
 
-
-namespace fwDataCamp
-{
-runner runner::r;
-}
+#include <fwDataCamp/Version.hpp>
 
 namespace fwMedDataCamp
 {
+
+//Force link with fwDataCamp
+static const int fwDataVersion = ::fwDataCamp::Version::s_CURRENT_VERSION;
+
 runner runner::r;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
similarity index 94%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
index 6f3e29c..33ee5a7 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 <fwMedData/ActivitySeries.hpp>
+#include "fwMedDataCamp/ActivitySeries.hpp"
 
 #include <fwCamp/UserObject.hpp>
 
-#include "fwMedDataCamp/ActivitySeries.hpp"
+#include <fwData/Composite.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/AttachmentSeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/AttachmentSeries.cpp
new file mode 100644
index 0000000..341d54a
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/AttachmentSeries.cpp
@@ -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 ****** */
+
+#include "fwMedDataCamp/AttachmentSeries.hpp"
+
+#include <fwCamp/UserObject.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+//------------------------------------------------------------------------------
+
+fwCampImplementDataMacro((fwMedData)(AttachmentSeries))
+{
+    builder
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwMedData::Series>()
+    .property("attachment_availability", &::fwMedData::AttachmentSeries::m_attachmentAvailability)
+    .property("attachment_path", &::fwMedData::AttachmentSeries::m_attachmentPath)
+    .property("media_type", &::fwMedData::AttachmentSeries::m_mediaType)
+    .property("buffer", &::fwMedData::AttachmentSeries::m_buffer)
+    ;
+}
+
+
+fwCampImplementEnumMacro((fwMedData)(AttachmentSeries)(AttachmentAvailability))
+{
+    builder
+    .value("NONE",  ::fwMedData::AttachmentSeries::NONE)
+    .value("LOCAL",  ::fwMedData::AttachmentSeries::LOCAL)
+    .value("EMBEDDED",  ::fwMedData::AttachmentSeries::EMBEDDED)
+    ;
+}
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/DicomSeries.cpp
similarity index 99%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/DicomSeries.cpp
index caae450..9f840dc 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/DicomSeries.cpp
@@ -6,9 +6,10 @@
 
 #include "fwMedDataCamp/DicomSeries.hpp"
 
-#include <fwMedData/DicomSeries.hpp>
 #include <fwCamp/UserObject.hpp>
 
+#include <fwMedData/DicomSeries.hpp>
+
 //------------------------------------------------------------------------------
 
 fwCampImplementDataMacro((fwMedData)(DicomSeries))
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Equipment.cpp
similarity index 93%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Equipment.cpp
index 51a17cc..df6a8da 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Equipment.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/Equipment.hpp>
-
 #include <fwCamp/UserObject.hpp>
 
+#include <fwMedData/Equipment.hpp>
+
 //------------------------------------------------------------------------------
 
 fwCampImplementDataMacro((fwMedData)(Equipment))
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ImageSeries.cpp
similarity index 93%
copy from SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
copy to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ImageSeries.cpp
index f54c4ae..1eda9c1 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ImageSeries.cpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 <fwMedData/ImageSeries.hpp>
+#include "fwMedDataCamp/ImageSeries.hpp"
 
 #include <fwCamp/UserObject.hpp>
 
-#include "fwMedDataCamp/ImageSeries.hpp"
+#include <fwData/Image.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ModelSeries.cpp
similarity index 93%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ModelSeries.cpp
index 64a4588..a4636ad 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/ModelSeries.cpp
@@ -1,13 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * 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 <fwData/Reconstruction.hpp>
-#include <fwMedData/ModelSeries.hpp>
 
-#include <fwCamp/UserObject.hpp>
+#include <fwMedData/ModelSeries.hpp>
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/NavigationSeries.cpp
similarity index 53%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/NavigationSeries.cpp
index f54c4ae..d78a2fb 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/NavigationSeries.cpp
@@ -1,24 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 <fwMedData/ImageSeries.hpp>
+#include "fwMedDataCamp/camp/mapper.hpp"
 
 #include <fwCamp/UserObject.hpp>
 
-#include "fwMedDataCamp/ImageSeries.hpp"
+#include <fwMedData/NavigationSeries.hpp>
 
 //------------------------------------------------------------------------------
 
-fwCampImplementDataMacro((fwMedData)(ImageSeries))
+fwCampImplementDataMacro((fwMedData)(NavigationSeries))
 {
     builder
     .tag("object_version", "1")
     .tag("lib_name", "fwMedData")
     .base< ::fwMedData::Series>()
-    .property("image", &::fwMedData::ImageSeries::m_image)
+    .property("position", &::fwMedData::NavigationSeries::m_position)
+    .property("move", &::fwMedData::NavigationSeries::m_move)
+    .property("look_at", &::fwMedData::NavigationSeries::m_lookAt)
     ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Patient.cpp
similarity index 94%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Patient.cpp
index 06b7037..59e52d9 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Patient.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/Patient.hpp>
-
 #include <fwCamp/UserObject.hpp>
 
+#include <fwMedData/Patient.hpp>
+
 //------------------------------------------------------------------------------
 
 fwCampImplementDataMacro((fwMedData)(Patient))
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Series.cpp
similarity index 96%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Series.cpp
index e5ebb7f..2748131 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Series.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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 <fwMedData/Patient.hpp>
-#include <fwMedData/Study.hpp>
-#include <fwMedData/Equipment.hpp>
+#include "fwMedDataCamp/Series.hpp"
 
 #include <fwCamp/UserObject.hpp>
 
-#include "fwMedDataCamp/Series.hpp"
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/Study.hpp>
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/SeriesDB.cpp
similarity index 93%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/SeriesDB.cpp
index 7459127..3d74dd1 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/SeriesDB.cpp
@@ -1,14 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/SeriesDB.hpp>
-#include <fwMedData/Series.hpp>
-
 #include <fwCamp/UserObject.hpp>
 
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
 //------------------------------------------------------------------------------
 
 fwCampImplementDataMacro((fwMedData)(SeriesDB))
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Study.cpp
similarity index 95%
rename from SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp
rename to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Study.cpp
index 7a8af34..2745ef1 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Study.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/Study.hpp>
-
 #include <fwCamp/UserObject.hpp>
 
+#include <fwMedData/Study.hpp>
+
 //------------------------------------------------------------------------------
 
 fwCampImplementDataMacro((fwMedData)(Study))
diff --git a/Bundles/core/appXml2/include/appXml2/Namespace.hpp b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Version.cpp
similarity index 59%
copy from Bundles/core/appXml2/include/appXml2/Namespace.hpp
copy to SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Version.cpp
index e74537d..f4946a7 100644
--- a/Bundles/core/appXml2/include/appXml2/Namespace.hpp
+++ b/SrcLib/core/fwMedDataCamp/src/fwMedDataCamp/Version.cpp
@@ -4,14 +4,9 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __APPXML2_NAMESPACE_HPP__
-#define __APPXML2_NAMESPACE_HPP__
+#include "fwMedDataCamp/Version.hpp"
 
-/**
- * @brief      The namespace appXml2.
- */
-namespace appXml2
+namespace fwMedDataCamp
 {
-
+const int Version::s_CURRENT_VERSION = 1;
 }
-#endif /* __APPXML2_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataCamp/test/CMakeLists.txt b/SrcLib/core/fwMedDataCamp/test/CMakeLists.txt
similarity index 71%
copy from SrcLib/core/fwDataCamp/test/CMakeLists.txt
copy to SrcLib/core/fwMedDataCamp/test/CMakeLists.txt
index dddc271..20372b8 100644
--- a/SrcLib/core/fwDataCamp/test/CMakeLists.txt
+++ b/SrcLib/core/fwMedDataCamp/test/CMakeLists.txt
@@ -11,3 +11,4 @@ fwLink(
     ${CPPUNIT_LIBRARY}
 )
 
+target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DCAMP_COMPILATION")
diff --git a/Bundles/core/preferences/Properties.cmake b/SrcLib/core/fwMedDataCamp/test/Properties.cmake
similarity index 51%
copy from Bundles/core/preferences/Properties.cmake
copy to SrcLib/core/fwMedDataCamp/test/Properties.cmake
index 874cf98..8096077 100644
--- a/Bundles/core/preferences/Properties.cmake
+++ b/SrcLib/core/fwMedDataCamp/test/Properties.cmake
@@ -1,18 +1,17 @@
 
-set( NAME preferences )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
+set( NAME fwMedDataCampTest )
+set( VERSION  )
+set( TYPE TEST )
 set( DEPENDENCIES
     fwCore
+    fwTest
     fwTools
-    fwRuntime
-    fwData
-    fwDataCamp
-    fwServices
-    fwAtomsBoostIO
-    fwAtomConversion
-    fwZip
     fwAtoms
+    fwAtomConversion
+    fwDataCamp
+    fwMedDataCamp
+    fwMedData
+    fwData
 )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/ActivitySeriesTest.hpp
similarity index 71%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/ActivitySeriesTest.hpp
index be88fdf..0ddee1c 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/ActivitySeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_ACTIVITYSERIESTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_ACTIVITYSERIESTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
+#define __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_ACTIVITYSERIESTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/AttachmentSeriesTest.hpp
similarity index 61%
copy from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
copy to SrcLib/core/fwMedDataCamp/test/tu/include/AttachmentSeriesTest.hpp
index f903e3b..86f4520 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/AttachmentSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_PATIENTTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_ATTACHMENTSERIESTEST_HPP__
+#define __FWMEDDATACAMP_UT_ATTACHMENTSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -14,9 +14,9 @@ namespace fwMedDataCamp
 namespace ut
 {
 
-class PatientTest : public CPPUNIT_NS::TestFixture
+class AttachmentSeriesTest : public CPPUNIT_NS::TestFixture
 {
-CPPUNIT_TEST_SUITE( PatientTest );
+CPPUNIT_TEST_SUITE( AttachmentSeriesTest );
 CPPUNIT_TEST( propertiesTest );
 CPPUNIT_TEST_SUITE_END();
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_ATTACHMENTSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/CompareObjectsTest.hpp
similarity index 52%
copy from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
copy to SrcLib/core/fwMedDataCamp/test/tu/include/CompareObjectsTest.hpp
index c46b296..cc5e0c9 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/CompareObjectsTest.hpp
@@ -4,8 +4,8 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_COMPAREOBJECTSTEST_HPP__
+#define __FWMEDDATACAMP_UT_COMPAREOBJECTSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -14,22 +14,23 @@ namespace fwMedDataCamp
 namespace ut
 {
 
-class DicomSeriesCampTest : public CPPUNIT_NS::TestFixture
+class CompareObjectsTest :  public CPPUNIT_NS::TestFixture
 {
-CPPUNIT_TEST_SUITE( DicomSeriesCampTest );
-CPPUNIT_TEST(propertiesTest);
+CPPUNIT_TEST_SUITE( CompareObjectsTest );
+CPPUNIT_TEST( compareSeriesDBTest );
 CPPUNIT_TEST_SUITE_END();
 
 public:
+
     // interface
     void setUp();
     void tearDown();
 
-    void propertiesTest();
+    void compareSeriesDBTest();
 };
 
-} //namespace ut
-} //namespace fwMedDataCamp
+}  // namespace ut
+}  // namespace fwMedDataCamp
 
-#endif //__FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_COMPAREOBJECTSTEST_HPP__
 
diff --git a/SrcLib/core/fwMedDataCamp/test/tu/include/DataCampHelper.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/DataCampHelper.hpp
new file mode 100644
index 0000000..e9cb439
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/DataCampHelper.hpp
@@ -0,0 +1,27 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_UT_DATACAMPHELPER_HPP__
+#define __FWMEDDATACAMP_UT_DATACAMPHELPER_HPP__
+
+#include <fwData/Object.hpp>
+
+namespace DataCampHelper
+{
+typedef std::vector<std::string> PropertiesNameType;
+
+void visitProperties(const std::string& className, const PropertiesNameType& vecProp);
+
+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);
+}
+
+#endif // __FWMEDDATACAMP_UT_DATACAMPHELPER_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/DicomSeriesCampTest.hpp
similarity index 76%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/DicomSeriesCampTest.hpp
index c46b296..c668286 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/DicomSeriesCampTest.hpp
@@ -4,8 +4,8 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_DICOMSERIESCAMPTEST_HPP__
+#define __FWMEDDATACAMP_UT_DICOMSERIESCAMPTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -31,5 +31,5 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif //__FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+#endif //__FWMEDDATACAMP_UT_DICOMSERIESCAMPTEST_HPP__
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/EquipmentTest.hpp
similarity index 72%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/EquipmentTest.hpp
index 3552b37..01ac66e 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/EquipmentTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_EQUIPMENTTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_EQUIPMENTTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
+#define __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_EQUIPMENTTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/ImageSeriesTest.hpp
similarity index 72%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/ImageSeriesTest.hpp
index 5d668dd..cabbca1 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/ImageSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_IMAGESERIESTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_IMAGESERIESTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
+#define __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_IMAGESERIESTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/ModelSeriesTest.hpp
similarity index 72%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/ModelSeriesTest.hpp
index 166b208..2471ff0 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/ModelSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_MODELSERIESTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_MODELSERIESTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
+#define __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_MODELSERIESTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/NavigationSeriesTest.hpp
similarity index 61%
copy from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
copy to SrcLib/core/fwMedDataCamp/test/tu/include/NavigationSeriesTest.hpp
index f903e3b..13bd956 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/NavigationSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_PATIENTTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_NAVIGATIONSERIESTEST_HPP__
+#define __FWMEDDATACAMP_UT_NAVIGATIONSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -14,9 +14,9 @@ namespace fwMedDataCamp
 namespace ut
 {
 
-class PatientTest : public CPPUNIT_NS::TestFixture
+class NavigationSeriesTest : public CPPUNIT_NS::TestFixture
 {
-CPPUNIT_TEST_SUITE( PatientTest );
+CPPUNIT_TEST_SUITE( NavigationSeriesTest );
 CPPUNIT_TEST( propertiesTest );
 CPPUNIT_TEST_SUITE_END();
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_NAVIGATIONSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/PatientTest.hpp
similarity index 73%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/PatientTest.hpp
index f903e3b..7a3a8ad 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/PatientTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_PATIENTTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
+#define __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/SeriesDBTest.hpp
similarity index 72%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/SeriesDBTest.hpp
index b9d771a..cf3acdc 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/SeriesDBTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_SERIESDBTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_SERIESDBTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
+#define __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_SERIESDBTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp b/SrcLib/core/fwMedDataCamp/test/tu/include/StudyTest.hpp
similarity index 73%
rename from SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp
rename to SrcLib/core/fwMedDataCamp/test/tu/include/StudyTest.hpp
index d0d2929..a7cedcb 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/include/StudyTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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_STUDYTEST_HPP__
-#define __FWDATACAMP_UT_FWMEDDATACAMP_STUDYTEST_HPP__
+#ifndef __FWMEDDATACAMP_UT_STUDYTEST_HPP__
+#define __FWMEDDATACAMP_UT_STUDYTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWDATACAMP_UT_FWMEDDATACAMP_STUDYTEST_HPP__
+#endif // __FWMEDDATACAMP_UT_STUDYTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/ActivitySeriesTest.cpp
similarity index 91%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/ActivitySeriesTest.cpp
index da75630..cdd7c99 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/ActivitySeriesTest.cpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "ActivitySeriesTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
 #include <fwData/Composite.hpp>
-#include <fwDataCamp/Version.hpp>
 
 #include <fwMedData/ActivitySeries.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/ActivitySeriesTest.hpp"
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -27,8 +29,9 @@ namespace ut
 void ActivitySeriesTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void ActivitySeriesTest::tearDown()
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/AttachmentSeriesTest.cpp
similarity index 59%
copy from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
copy to SrcLib/core/fwMedDataCamp/test/tu/src/AttachmentSeriesTest.cpp
index 1978075..b802911 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/AttachmentSeriesTest.cpp
@@ -1,51 +1,51 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "AttachmentSeriesTest.hpp"
 
-#include <fwData/Image.hpp>
-#include <fwData/Reconstruction.hpp>
+#include "DataCampHelper.hpp"
 
-#include <fwTest/generator/Image.hpp>
+#include <fwMedDataCamp/Version.hpp>
 
-#include <fwDataCamp/Version.hpp>
+#include <fwMedData/AttachmentSeries.hpp>
 #include <fwMedData/Equipment.hpp>
-#include <fwMedData/ImageSeries.hpp>
-#include <fwMedData/ModelSeries.hpp>
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Study.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/ImageSeriesTest.hpp"
+#include <fwTools/System.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
 
-using namespace ::boost::assign;
+#include <fstream>
 
 // Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::ImageSeriesTest );
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::AttachmentSeriesTest );
 
 namespace fwMedDataCamp
 {
 namespace ut
 {
 
-void ImageSeriesTest::setUp()
+void AttachmentSeriesTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
-void ImageSeriesTest::tearDown()
+void AttachmentSeriesTest::tearDown()
 {
     // Clean up after the test run.
 }
 
 //------------------------------------------------------------------------------
 
-void ImageSeriesTest::propertiesTest()
+void AttachmentSeriesTest::propertiesTest()
 {
     const std::string instance_uid                            = "123456789";
     const std::string modality                                = "CT";
@@ -53,43 +53,61 @@ void ImageSeriesTest::propertiesTest()
     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");
-
-    ::fwData::Image::sptr img = ::fwData::Image::New();
-    ::fwTest::generator::Image::generateRandomImage(img, ::fwTools::Type::create("uint8"));
+    const std::string mediaType                               = "text";
+    const std::string filename                                = "attach.ext";
+    const ::DataCampHelper::PropertiesNameType dataProperties = {{"fields"},
+                                                                 {"patient"},
+                                                                 {"study"},
+                                                                 {"equipment"},
+                                                                 {"instance_uid"},
+                                                                 {"modality"},
+                                                                 {"date"},
+                                                                 {"time"},
+                                                                 {"performing_physicians_name"},
+                                                                 {"description"},
+                                                                 {"attachment_availability"},
+                                                                 {"attachment_path"},
+                                                                 {"media_type"},
+                                                                 {"buffer"}};
+
     ::fwMedData::DicomValuesType performing_physicians_names;
     performing_physicians_names.push_back(performing_physicians_name);
 
-    ::fwMedData::ImageSeries::sptr obj = ::fwMedData::ImageSeries::New();
+    ::fwMedData::AttachmentSeries::sptr obj = ::fwMedData::AttachmentSeries::New();
     obj->setInstanceUID(instance_uid);
     obj->setModality(modality);
     obj->setDate(date);
     obj->setTime(time);
     obj->setPerformingPhysiciansName(performing_physicians_names);
     obj->setDescription(description);
-    obj->setImage(img);
+
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "attachmenttest";
+    ::boost::filesystem::create_directories(path);
+    const ::boost::filesystem::path attachmentFile = path / filename;
+
+    {
+        std::ofstream file;
+        file.open(attachmentFile.string().c_str(), std::ofstream::out);
+        file << "42";
+        file.close();
+    }
+    obj->setAttachmentPath(attachmentFile);
+    obj->setMediaType(mediaType);
 
     ::DataCampHelper::visitProperties(obj->getClassname(), dataProperties);
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@patient", obj->getPatient());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@study", obj->getStudy());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@equipment", obj->getEquipment());
     ::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, "@image", obj->getImage());
-    ::DataCampHelper::compareObjectPropertyValue(obj, "@patient", obj->getPatient());
-    ::DataCampHelper::compareObjectPropertyValue(obj, "@study", obj->getStudy());
-    ::DataCampHelper::compareObjectPropertyValue(obj, "@equipment", obj->getEquipment());
+    //TODO: Enum are not supported yet, so we cannot make unit tests on this part...
+    //::DataCampHelper::compareSimplePropertyValue(obj, "@attachment_availability", "LOCAL");
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@attachment_path", attachmentFile.string());
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@media_type", mediaType);
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedDataCamp/test/tu/src/CompareObjectsTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/CompareObjectsTest.cpp
new file mode 100644
index 0000000..07ac1bc
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/CompareObjectsTest.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 "CompareObjectsTest.hpp"
+
+#include <fwCore/Exception.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwTest/generator/SeriesDB.hpp>
+
+#include <fwTools/Type.hpp>
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::CompareObjectsTest );
+
+namespace fwMedDataCamp
+{
+namespace ut
+{
+
+//-----------------------------------------------------------------------------
+
+// Set up context before running a test.
+void CompareObjectsTest::setUp()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void CompareObjectsTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void CompareObjectsTest::compareSeriesDBTest()
+{
+    ::fwMedData::SeriesDB::sptr seriesDBRef  = ::fwTest::generator::SeriesDB::createSeriesDB(1, 1, 1);
+    ::fwMedData::SeriesDB::sptr seriesDBComp = ::fwData::Object::copy< ::fwMedData::SeriesDB >(seriesDBRef);
+
+    {
+        ::fwDataCamp::visitor::CompareObjects visitor;
+        visitor.compare(seriesDBRef, seriesDBComp);
+
+        SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
+        CPPUNIT_ASSERT_EQUAL(size_t(0), props->size());
+    }
+
+    {
+        CPPUNIT_ASSERT_EQUAL(size_t(3), seriesDBComp->getContainer().size());
+        ::fwMedData::Series::sptr series = seriesDBComp->getContainer()[0];
+        CPPUNIT_ASSERT(series);
+
+        ::fwMedData::Patient::sptr patient = series->getPatient();
+        const std::string name = patient->getName() + "X";
+
+        patient->setName(name);
+        patient->setSex("M");
+        patient->setPatientId("42");
+
+        ::fwDataCamp::visitor::CompareObjects visitor;
+        visitor.compare(seriesDBRef, seriesDBComp);
+
+        SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
+        CPPUNIT_ASSERT_EQUAL(props->size(), (size_t)3);
+
+        CPPUNIT_ASSERT(props->find("values.0.patient.name") != props->end());
+        CPPUNIT_ASSERT_EQUAL(name, (*props)["values.0.patient.name"]);
+
+        CPPUNIT_ASSERT(props->find("values.0.patient.patient_id") != props->end());
+        CPPUNIT_ASSERT_EQUAL(std::string("42"), (*props)["values.0.patient.patient_id"]);
+
+        CPPUNIT_ASSERT(props->find("values.0.patient.sex") != props->end());
+        CPPUNIT_ASSERT_EQUAL(std::string("M"), (*props)["values.0.patient.sex"]);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+}  // namespace ut
+}  // namespace fwMedDataCamp
+
diff --git a/SrcLib/core/fwMedDataCamp/test/tu/src/DataCampHelper.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/DataCampHelper.cpp
new file mode 100644
index 0000000..e36b0c4
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/DataCampHelper.cpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
+ * 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 <fwData/GenericFieldBase.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <boost/assign/std/vector.hpp>
+
+#include <camp/class.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <vector>
+
+namespace DataCampHelper
+{
+
+//------------------------------------------------------------------------------
+
+void visitProperties(const std::string& className, const PropertiesNameType& vecProp)
+{
+    const ::camp::Class& metaClass = ::camp::classByName(className);
+    CPPUNIT_ASSERT_EQUAL( vecProp.size(), metaClass.propertyCount());
+    for(const std::string& property :  vecProp)
+    {
+        CPPUNIT_ASSERT_MESSAGE("Missing property "+ property+" in "+className,
+                               metaClass.hasProperty(property));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void compareSimplePropertyValue(::fwData::Object::sptr obj,
+                                const std::string& propertyPath,
+                                const std::string& value)
+{
+    ::fwData::GenericFieldBase::sptr field;
+    field = ::fwDataCamp::getObject< ::fwData::GenericFieldBase >(obj, propertyPath);
+    CPPUNIT_ASSERT_MESSAGE("Retrieve failed for property "+propertyPath, field);
+    CPPUNIT_ASSERT_EQUAL( value, field->toString());
+}
+
+//------------------------------------------------------------------------------
+
+void compareObjectPropertyValue(::fwData::Object::sptr obj,
+                                const std::string& propertyPath,
+                                ::fwData::Object::sptr value)
+{
+    ::fwData::Object::sptr subObj;
+    subObj = ::fwDataCamp::getObject(obj, propertyPath);
+    CPPUNIT_ASSERT_MESSAGE("Retrieve failed for property "+propertyPath, subObj);
+    CPPUNIT_ASSERT_MESSAGE("Retrieve property "+propertyPath+" not equal with value", value == subObj);
+}
+
+//------------------------------------------------------------------------------
+
+} // end namespace DataCampHelper
+
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/DicomSeriesCampTest.cpp
similarity index 97%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/DicomSeriesCampTest.cpp
index 11707b0..4ee822f 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/DicomSeriesCampTest.cpp
@@ -4,14 +4,17 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "DicomSeriesCampTest.hpp"
+
 #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>
 
@@ -53,8 +56,7 @@ void DicomSeriesCampTest::propertiesTest()
     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";
+    //const std::string dicom_availability  = "PATHS";
     ::DataCampHelper::PropertiesNameType dataProperties = ::boost::assign::list_of("fields")
                                                               ("dicom_availability")
                                                               ("number_of_instances")
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/EquipmentTest.cpp
similarity index 83%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/EquipmentTest.cpp
index 57392fc..a8c8b53 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/EquipmentTest.cpp
@@ -1,15 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwDataCamp/Version.hpp>
-#include <fwMedData/Equipment.hpp>
+#include "EquipmentTest.hpp"
 
-#include "fwMedDataCamp/EquipmentTest.hpp"
 #include "DataCampHelper.hpp"
 
+#include <fwMedDataCamp/Version.hpp>
+
+#include <fwMedData/Equipment.hpp>
+
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::EquipmentTest );
 
@@ -21,8 +23,9 @@ namespace ut
 void EquipmentTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void EquipmentTest::tearDown()
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/ImageSeriesTest.cpp
similarity index 94%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/ImageSeriesTest.cpp
index 1978075..e632bc6 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/ImageSeriesTest.cpp
@@ -1,25 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "ImageSeriesTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
 #include <fwData/Image.hpp>
 #include <fwData/Reconstruction.hpp>
 
-#include <fwTest/generator/Image.hpp>
-
-#include <fwDataCamp/Version.hpp>
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/ModelSeries.hpp>
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Study.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/ImageSeriesTest.hpp"
+#include <fwTest/generator/Image.hpp>
+
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -34,8 +36,9 @@ namespace ut
 void ImageSeriesTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void ImageSeriesTest::tearDown()
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/ModelSeriesTest.cpp
similarity index 93%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/ModelSeriesTest.cpp
index b38e3a1..4c67ac0 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/ModelSeriesTest.cpp
@@ -1,21 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "ModelSeriesTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
 #include <fwData/Reconstruction.hpp>
 
-#include <fwDataCamp/Version.hpp>
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ModelSeries.hpp>
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Study.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/ModelSeriesTest.hpp"
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -30,8 +32,9 @@ namespace ut
 void ModelSeriesTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void ModelSeriesTest::tearDown()
diff --git a/SrcLib/core/fwMedDataCamp/test/tu/src/NavigationSeriesTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/NavigationSeriesTest.cpp
new file mode 100644
index 0000000..bc33cc2
--- /dev/null
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/NavigationSeriesTest.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 "NavigationSeriesTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/NavigationSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::NavigationSeriesTest );
+
+namespace fwMedDataCamp
+{
+namespace ut
+{
+
+void NavigationSeriesTest::setUp()
+{
+    // Set up context before running a test.
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeriesTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void NavigationSeriesTest::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 ::DataCampHelper::PropertiesNameType dataProperties = {{"fields"},
+                                                                 {"patient"},
+                                                                 {"study"},
+                                                                 {"equipment"},
+                                                                 {"instance_uid"},
+                                                                 {"modality"},
+                                                                 {"date"},
+                                                                 {"time"},
+                                                                 {"performing_physicians_name"},
+                                                                 {"description"},
+                                                                 {"position"},
+                                                                 {"move"},
+                                                                 {"look_at"}};
+
+    ::fwMedData::DicomValuesType performing_physicians_names;
+    performing_physicians_names.push_back(performing_physicians_name);
+
+    ::fwMedData::NavigationSeries::sptr obj = ::fwMedData::NavigationSeries::New();
+    obj->setInstanceUID(instance_uid);
+    obj->setModality(modality);
+    obj->setDate(date);
+    obj->setTime(time);
+    obj->setPerformingPhysiciansName(performing_physicians_names);
+    obj->setDescription(description);
+
+    ::fwMedData::NavigationSeries::ContainerType positions =
+    {
+        {0., {-514.1606513019431, -94.68116795798758, 979.3785055174628}}
+    };
+
+    ::fwMedData::NavigationSeries::ContainerType move =
+    {
+        {0., {0.897820633950464, 0.13607544320686907, -1.2769419285130967}},
+        {1421.375, {2.322431935080602, 0.33708203932328956, -3.734284956660633}},
+        {2114.208, {2.43713135678714, -0.049220088700801926, -3.266794030753196}},
+        {3377.9159999999997, {0., 0., 0.}},
+        {4027.6536502546687, {-3.964310130780936, 0.08006285575503613, 5.313864037415808}},
+        {6237.149579831932, {0., 0., 0.}},
+        {6500.074702886248, {-0.8058588959846187, 1.6088833889257592, -2.2406369414514837}},
+        {7616.651952461799, {0.15881288125106394, 0.9634983958585909, -3.792280054764281}},
+        {9291.517826825127, {15.00876504273313, 1.948698699541007, 9.621351972786318}},
+        {10328.339558573854, {8.746762102220163, -1.3252231011236748, 0.40990799919194243}},
+        {11344.944, {3.107379091978582, 0.24758149132857085, -1.7704233405817775}},
+        {13717.94906621392, {-14.868514648384936, -0.06864726970614742, -1.8512522029189045}},
+        {14874.404074702887, {-2.1505985395333633, 0.0025699595738454374, -0.5800507110513734}},
+        {15472.570458404074, {0.5463244285267206, -0.009449336194383946, -4.067785389892101}},
+        {18862.179966044143, {0., 0., 0.}},
+        {20576.923599320886, {-1.4763543428185393, 0.6215147468157091, 4.983670944496179}},
+        {23208.855687606112, {0., 0., 0.}}
+    };
+
+    ::fwMedData::NavigationSeries::ContainerType lookAt =
+    {
+        {0., {216.48659596562175, -109.43725495319805, 0.}},
+        {4027.6536502546687, {206.6271751068543, -90.3143606602177, -7.6435594203111314}},
+        {6500.074702886248, {206.6271751068543, -90.3143606602177, -7.6435594203111314}}
+    };
+
+    for(const auto& elt : positions)
+    {
+        obj->addPosition(elt.first, elt.second);
+    }
+    for(const auto& elt : move)
+    {
+        obj->addMove(elt.first, elt.second);
+    }
+    for(const auto& elt : lookAt)
+    {
+        obj->addLookAt(elt.first, elt.second);
+    }
+
+    ::DataCampHelper::visitProperties(obj->getClassname(), dataProperties);
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@patient", obj->getPatient());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@study", obj->getStudy());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@equipment", obj->getEquipment());
+    ::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::compareSimplePropertyValue(obj, "@position.0",
+                                                 "-514.16065130194306;-94.681167957987583;979.37850551746283;");
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@move.0",
+                                                 "0.89782063395046396;0.13607544320686907;-1.2769419285130967;");
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@look_at.0", "216.48659596562175;-109.43725495319805;0;");
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMedDataCamp
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/PatientTest.cpp
similarity index 89%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/PatientTest.cpp
index 67e9056..6ec4550 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/PatientTest.cpp
@@ -1,16 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "PatientTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
-#include <fwDataCamp/Version.hpp>
 #include <fwMedData/Patient.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/PatientTest.hpp"
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -25,8 +27,9 @@ namespace ut
 void PatientTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void PatientTest::tearDown()
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/SeriesDBTest.cpp
similarity index 91%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/SeriesDBTest.cpp
index 9dff983..d6a05a8 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/SeriesDBTest.cpp
@@ -1,23 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "SeriesDBTest.hpp"
 
-#include <fwDataCamp/Version.hpp>
-#include <fwMedData/ModelSeries.hpp>
-#include <fwMedData/ImageSeries.hpp>
-#include <fwMedData/SeriesDB.hpp>
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
 #include <fwAtomConversion/convert.hpp>
 
 #include <fwAtoms/Sequence.hpp>
+
 #include <fwDataCamp/getObject.hpp>
 
-#include "fwMedDataCamp/SeriesDBTest.hpp"
-#include "DataCampHelper.hpp"
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -32,8 +35,9 @@ namespace ut
 void SeriesDBTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void SeriesDBTest::tearDown()
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp b/SrcLib/core/fwMedDataCamp/test/tu/src/StudyTest.cpp
similarity index 91%
rename from SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp
rename to SrcLib/core/fwMedDataCamp/test/tu/src/StudyTest.cpp
index 9516cfd..a085339 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp
+++ b/SrcLib/core/fwMedDataCamp/test/tu/src/StudyTest.cpp
@@ -1,16 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/std/vector.hpp>
+#include "StudyTest.hpp"
+
+#include "DataCampHelper.hpp"
+
+#include <fwMedDataCamp/Version.hpp>
 
-#include <fwDataCamp/Version.hpp>
 #include <fwMedData/Study.hpp>
 
-#include "DataCampHelper.hpp"
-#include "fwMedDataCamp/StudyTest.hpp"
+#include <boost/assign/std/vector.hpp>
 
 using namespace ::boost::assign;
 
@@ -25,8 +27,9 @@ namespace ut
 void StudyTest::setUp()
 {
     // Set up context before running a test.
-    //Force link with fwDataCamp
-    const int version = ::fwDataCamp::Version::s_CURRENT_VERSION;
+    //Force link with fwMedDataCamp
+    const int version = ::fwMedDataCamp::Version::s_CURRENT_VERSION;
+    FwCoreNotUsedMacro(version);
 }
 
 void StudyTest::tearDown()
diff --git a/SrcLib/core/fwMedDataTools/Properties.cmake b/SrcLib/core/fwMedDataTools/Properties.cmake
index 700cab5..45f0b7d 100644
--- a/SrcLib/core/fwMedDataTools/Properties.cmake
+++ b/SrcLib/core/fwMedDataTools/Properties.cmake
@@ -9,3 +9,4 @@ set( DEPENDENCIES
     fwMedData
 )
 set( REQUIREMENTS  )
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp
index 05c6699..c184f01 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWMEMORY_BUFFERINFO_HPP__
 #define __FWMEMORY_BUFFERINFO_HPP__
 
-#include <boost/filesystem/path.hpp>
-#include <boost/function.hpp>
-
-#include <fwCore/macros.hpp>
-#include <fwCore/LogicStamp.hpp>
-
 #include "fwMemory/BufferAllocationPolicy.hpp"
 #include "fwMemory/FileFormat.hpp"
 #include "fwMemory/FileHolder.hpp"
+#include "fwMemory/config.hpp"
 #include "fwMemory/stream/in/IFactory.hpp"
 
-#include "fwMemory/config.hpp"
+#include <fwCore/LogicStamp.hpp>
+#include <fwCore/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
 
 namespace fwMemory
 {
 
-
 struct FWMEMORY_CLASS_API BufferInfo
 {
 
@@ -33,13 +30,13 @@ struct FWMEMORY_CLASS_API BufferInfo
     FWMEMORY_API BufferInfo();
 
     FWMEMORY_API void clear();
+    //------------------------------------------------------------------------------
+
     long lockCount() const
     {
         return lockCounter.use_count();
     }
 
-
-
     SizeType size;
     /// true if 'buffer' is loaded
     bool loaded;
@@ -55,12 +52,8 @@ struct FWMEMORY_CLASS_API BufferInfo
 
     SPTR( ::fwMemory::stream::in::IFactory ) istreamFactory;
 
-
 };
 
-
-
-
 } // namespace fwMemory
 
 #endif // __FWMEMORY_BUFFERINFO_HPP__
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
index ec86ee8..4641c2d 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,19 +7,20 @@
 #ifndef __FWMEMORY_BUFFEROBJECT_HPP__
 #define __FWMEMORY_BUFFEROBJECT_HPP__
 
-#include <istream>
+#include "fwMemory/BufferAllocationPolicy.hpp"
+#include "fwMemory/BufferManager.hpp"
+#include "fwMemory/config.hpp"
 
-#include <boost/type_traits/conditional.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/filesystem/path.hpp>
+#include <fwCamp/macros.hpp>
 
-#include <fwCore/mt/types.hpp>
 #include <fwCore/base.hpp>
-#include <fwCamp/macros.hpp>
+#include <fwCore/mt/types.hpp>
 
-#include "fwMemory/BufferAllocationPolicy.hpp"
-#include "fwMemory/BufferManager.hpp"
-#include "fwMemory/config.hpp"
+#include <boost/filesystem/path.hpp>
+#include <boost/type_traits/conditional.hpp>
+#include <boost/type_traits/is_const.hpp>
+
+#include <istream>
 
 fwCampAutoDeclareMacro((fwMemory)(BufferObject), FWMEMORY_API);
 
@@ -36,9 +37,6 @@ 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
  * any cleverness about allocating/destroying the buffer. Users of this class
@@ -110,7 +108,7 @@ public:
          *
          * @param bo BufferObject to lock
          */
-        LockBase( const SPTR(T) &bo ) :
+        LockBase( const SPTR(T)& bo ) :
             m_bufferObject(bo)
         {
             SLM_ASSERT("Can't lock NULL object", bo);
@@ -187,7 +185,7 @@ public:
      *
      */
     FWMEMORY_API virtual void allocate(SizeType size,
-                                       const ::fwMemory::BufferAllocationPolicy::sptr &policy =
+                                       const ::fwMemory::BufferAllocationPolicy::sptr& policy =
                                            ::fwMemory::BufferMallocPolicy::New());
 
     /**
@@ -223,10 +221,9 @@ public:
      *
      */
     FWMEMORY_API virtual void setBuffer(::fwMemory::BufferManager::BufferType buffer, SizeType size,
-                                        const ::fwMemory::BufferAllocationPolicy::sptr &policy =
+                                        const ::fwMemory::BufferAllocationPolicy::sptr& policy =
                                             ::fwMemory::BufferMallocPolicy::New());
 
-
     /**
      * @brief Return a lock on the BufferObject
      *
@@ -281,12 +278,13 @@ public:
         return &m_buffer;
     }
 
-    ::fwCore::mt::ReadWriteMutex &getMutex() {
+    ::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 );
+    FWMEMORY_API void swap( const BufferObject::sptr& _source );
 
     FWMEMORY_API BufferManager::StreamInfo getStreamInfo() const;
 
@@ -300,11 +298,11 @@ public:
      * @param format file format (RAW,RAWZ,OTHER), if sourceFile is provided
      * @param policy Buffer allocation policy
      */
-    FWMEMORY_API void setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory) &factory,
+    FWMEMORY_API void setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory)& factory,
                                         SizeType size,
-                                        const ::boost::filesystem::path &sourceFile = "",
+                                        const ::boost::filesystem::path& sourceFile = "",
                                         ::fwMemory::FileFormatType format = ::fwMemory::OTHER,
-                                        const ::fwMemory::BufferAllocationPolicy::sptr &policy = ::fwMemory::BufferMallocPolicy::New()
+                                        const ::fwMemory::BufferAllocationPolicy::sptr& policy = ::fwMemory::BufferMallocPolicy::New()
                                         );
 
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp b/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
index 2f2fb52..7354854 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,12 @@
 #ifndef __FWMEMORY_IPOLICY_HPP__
 #define __FWMEMORY_IPOLICY_HPP__
 
-#include <boost/function.hpp>
-
-#include <fwCore/base.hpp>
-
-#include "fwMemory/policy/factory/new.hpp"
-#include "fwMemory/BufferManager.hpp"
 #include "fwMemory/BufferInfo.hpp"
+#include "fwMemory/BufferManager.hpp"
 #include "fwMemory/config.hpp"
+#include "fwMemory/policy/factory/new.hpp"
+
+#include <fwCore/base.hpp>
 
 namespace fwMemory
 {
@@ -29,31 +27,30 @@ public:
     typedef SPTR (IPolicy) sptr;
     typedef std::vector<std::string> ParamNamesType;
 
-    virtual void allocationRequest(BufferInfo &info,
+    virtual void allocationRequest(BufferInfo& info,
                                    ::fwMemory::BufferManager::ConstBufferPtrType buffer,
                                    BufferInfo::SizeType size ) = 0;
 
-    virtual void setRequest(BufferInfo &info,
+    virtual void setRequest(BufferInfo& info,
                             ::fwMemory::BufferManager::ConstBufferPtrType buffer,  BufferInfo::SizeType size ) = 0;
 
-    virtual void reallocateRequest(BufferInfo &info,
+    virtual void reallocateRequest(BufferInfo& info,
                                    ::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 std::string getParam(const std::string &name, bool *ok = NULL ) const = 0;
-    virtual const ParamNamesType &getParamNames() const                           = 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;
 
     template <typename T>
     class Registrar
diff --git a/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp b/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp
index 4f7b92d..3d2726e 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,7 @@
 #ifndef __FWMEMORY_CAMP_DECLARE_HPP__
 #define __FWMEMORY_CAMP_DECLARE_HPP__
 
-#include <fwCamp/macros.hpp>
-
+#define CAMP_COMPILATION
 #include "fwMemory/BufferObject.hpp"
 
 namespace fwMemory
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp
index 632436f..75ed5d3 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWMEMORY_POLICY_FACTORY_NEW_HPP__
 #define __FWMEMORY_POLICY_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwMemory/config.hpp"
 #include "fwMemory/policy/registry/detail.hpp"
 
+#include <string>
+
 namespace fwMemory
 {
 
@@ -27,7 +24,6 @@ namespace factory
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
-
 FWMEMORY_API SPTR( ::fwMemory::IPolicy ) New( const ::fwMemory::policy::registry::KeyType & classname );
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
@@ -42,4 +38,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWMEMORY_POLICY_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp
index b84e2da..7117c4b 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWMEMORY_STREAM_IN_BUFFER_HPP__
 #define __FWMEMORY_STREAM_IN_BUFFER_HPP__
 
-#include <boost/function.hpp>
+#include "fwMemory/config.hpp"
+#include "fwMemory/stream/in/IFactory.hpp"
 
 #include <fwCore/macros.hpp>
 
-#include "fwMemory/stream/in/IFactory.hpp"
-#include "fwMemory/config.hpp"
-
 namespace fwMemory
 {
 namespace stream
@@ -25,7 +23,7 @@ class FWMEMORY_CLASS_API Buffer : public IFactory
 {
 public:
     typedef SPTR (void) LockType;
-    typedef ::boost::function< LockType () > CounterFactoryType;
+    typedef std::function< LockType() > CounterFactoryType;
 
     Buffer(void* buf, size_t size);
     Buffer(void* buf, size_t size, CounterFactoryType counterFactory);
@@ -39,12 +37,9 @@ protected:
     CounterFactoryType m_counterFactory;
 };
 
-
-
 } // namespace in
 } // namespace stream
 } // namespace fwMemory
 
 #endif // __FWMEMORY_STREAM_IN_BUFFER_HPP__
 
-
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp
index 205f6e4..d3f9e14 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,10 +7,11 @@
 #ifndef __FWMEMORY_STREAM_IN_IFACTORY_HPP__
 #define __FWMEMORY_STREAM_IN_IFACTORY_HPP__
 
-#include <istream>
+#include "fwMemory/config.hpp"
+
 #include <fwCore/macros.hpp>
 
-#include "fwMemory/config.hpp"
+#include <istream>
 
 namespace fwMemory
 {
@@ -26,7 +27,8 @@ public:
     {
     }
 
-    SPTR(std::istream) operator()(){
+    SPTR(std::istream) operator()()
+    {
         return this->get();
     }
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
index 6c8f09a..99c6787 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,11 +9,11 @@
 
 #ifdef __MACOSX__
 
-#include <boost/cstdint.hpp>
-#include <string>
-
 #include "fwMemory/config.hpp"
 
+#include <cstdint>
+#include <string>
+
 namespace fwMemory
 {
 namespace tools
@@ -29,11 +29,7 @@ public:
 
     FWMEMORY_API ~DarwinMemoryMonitorTools();
 
-
-
-    FWMEMORY_API static ::boost::uint64_t estimateFreeMem();
-
-
+    FWMEMORY_API static std::uint64_t estimateFreeMem();
 
     FWMEMORY_API static void printProcessMemoryInformation();
 
@@ -41,17 +37,13 @@ public:
 
     FWMEMORY_API static void printMemoryInformation();
 
+    FWMEMORY_API static std::uint64_t getTotalSystemMemory();
 
+    FWMEMORY_API static std::uint64_t getUsedSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getTotalSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getUsedSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getFreeSystemMemory();
-
-
+    FWMEMORY_API static std::uint64_t getFreeSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getUsedProcessMemory();
+    FWMEMORY_API static std::uint64_t getUsedProcessMemory();
 
 };
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
index 6760b3e..c0ec4d4 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #ifndef __FWMEMORY_TOOLS_MEMORYMONITORTOOLS_HPP__
 #define __FWMEMORY_TOOLS_MEMORYMONITORTOOLS_HPP__
 
-#include <boost/cstdint.hpp>
-
 #include "fwMemory/config.hpp"
 
+#include <cstdint>
+
 namespace fwMemory
 {
 namespace tools
@@ -25,9 +25,7 @@ public:
 
     FWMEMORY_API ~MemoryMonitorTools();
 
-
-    FWMEMORY_API static ::boost::uint64_t estimateFreeMem();
-
+    FWMEMORY_API static std::uint64_t estimateFreeMem();
 
     FWMEMORY_API static void printProcessMemoryInformation();
 
@@ -35,16 +33,13 @@ public:
 
     FWMEMORY_API static void printMemoryInformation();
 
+    FWMEMORY_API static std::uint64_t getTotalSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getTotalSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getUsedSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getFreeSystemMemory();
-
+    FWMEMORY_API static std::uint64_t getUsedSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getUsedProcessMemory();
+    FWMEMORY_API static std::uint64_t getFreeSystemMemory();
 
+    FWMEMORY_API static std::uint64_t getUsedProcessMemory();
 
 };
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
index 2768cdb..f9b0fae 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,11 +9,11 @@
 
 #if defined(linux) || defined(__linux)
 
-#include <boost/cstdint.hpp>
-#include <string>
-
 #include "fwMemory/config.hpp"
 
+#include <cstdint>
+#include <string>
+
 namespace fwMemory
 {
 namespace tools
@@ -23,13 +23,13 @@ namespace tools
 
 struct MemInfo {
 
-    ::boost::uint64_t total;
-    ::boost::uint64_t free;
-    ::boost::uint64_t buffered;
-    ::boost::uint64_t cached;
-    ::boost::uint64_t swapcached;
-    ::boost::uint64_t swaptotal;
-    ::boost::uint64_t swapfree;
+    std::uint64_t total;
+    std::uint64_t free;
+    std::uint64_t buffered;
+    std::uint64_t cached;
+    std::uint64_t swapcached;
+    std::uint64_t swaptotal;
+    std::uint64_t swapfree;
 
     MemInfo()
     {
@@ -48,16 +48,16 @@ struct MemInfo {
 
 struct Status {
 
-    ::boost::uint64_t VmPeak;
-    ::boost::uint64_t VmSize;
-    ::boost::uint64_t VmLck;
-    ::boost::uint64_t VmHWM;
-    ::boost::uint64_t VmRSS;
-    ::boost::uint64_t VmData;
-    ::boost::uint64_t VmStk;
-    ::boost::uint64_t VmExe;
-    ::boost::uint64_t VmLib;
-    ::boost::uint64_t VmPTE;
+    std::uint64_t VmPeak;
+    std::uint64_t VmSize;
+    std::uint64_t VmLck;
+    std::uint64_t VmHWM;
+    std::uint64_t VmRSS;
+    std::uint64_t VmData;
+    std::uint64_t VmStk;
+    std::uint64_t VmExe;
+    std::uint64_t VmLib;
+    std::uint64_t VmPTE;
 
     Status()
     {
@@ -86,11 +86,7 @@ public:
 
     FWMEMORY_API ~PosixMemoryMonitorTools();
 
-
-
-    FWMEMORY_API static ::boost::uint64_t estimateFreeMem();
-
-
+    FWMEMORY_API static std::uint64_t estimateFreeMem();
 
     FWMEMORY_API static void printProcessMemoryInformation();
 
@@ -98,38 +94,34 @@ public:
 
     FWMEMORY_API static void printMemoryInformation();
 
+    FWMEMORY_API static std::uint64_t getTotalSystemMemory();
 
+    FWMEMORY_API static std::uint64_t getUsedSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getTotalSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getUsedSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getFreeSystemMemory();
-
-
+    FWMEMORY_API static std::uint64_t getFreeSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getUsedProcessMemory();
+    FWMEMORY_API static std::uint64_t getUsedProcessMemory();
 
 private:
 
-    static ::boost::uint64_t s_pageSize;
-    static ::boost::uint64_t s_totalMemory;
+    static std::uint64_t s_pageSize;
+    static std::uint64_t s_totalMemory;
 
     /* Extract numbers from a string between the start and end indices */
-    static ::boost::uint64_t extract_number( char *str, int start, int end );
+    static std::uint64_t extract_number( char* str, int start, int end );
 
     /* Parse the contents of /proc/meminfo file into the meminfo structure */
-    static void get_memory_stats( MemInfo & meminfo );
+    static void get_memory_stats( MemInfo& meminfo );
 
-    static void printStatus( Status & stat );
+    static void printStatus( Status& stat );
 
-    static void analyseMemInfo( std::string & line, MemInfo & meminfo );
+    static void analyseMemInfo( std::string& line, MemInfo& meminfo );
 
-    static void analyseStatusLine( std::string & line, Status & stat );
+    static void analyseStatusLine( std::string& line, Status& stat );
 
-    static void getStatusOfPid( int pid, Status & stat);
+    static void getStatusOfPid( int pid, Status& stat);
 
-    static void getAllStatus(Status & allStat);
+    static void getAllStatus(Status& allStat);
 
     static void printAllStatus();
 };
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
index 8395c27..62953e7 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 
 #ifdef _WIN32
 
-#include <boost/cstdint.hpp>
-
 #include "fwMemory/config.hpp"
 
+#include <cstdint>
+
 namespace fwMemory
 {
 namespace tools
@@ -27,11 +27,7 @@ public:
 
     FWMEMORY_API ~Win32MemoryMonitorTools();
 
-
-
-    FWMEMORY_API static ::boost::uint64_t estimateFreeMem();
-
-
+    FWMEMORY_API static std::uint64_t estimateFreeMem();
 
     FWMEMORY_API static void printProcessMemoryInformation();
 
@@ -39,18 +35,13 @@ public:
 
     FWMEMORY_API static void printMemoryInformation();
 
+    FWMEMORY_API static std::uint64_t getTotalSystemMemory();
 
+    FWMEMORY_API static std::uint64_t getUsedSystemMemory();
 
-    FWMEMORY_API static ::boost::uint64_t getTotalSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getUsedSystemMemory();
-
-    FWMEMORY_API static ::boost::uint64_t getFreeSystemMemory();
-
-
-
-    FWMEMORY_API static ::boost::uint64_t getUsedProcessMemory();
+    FWMEMORY_API static std::uint64_t getFreeSystemMemory();
 
+    FWMEMORY_API static std::uint64_t getUsedProcessMemory();
 
 };
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp b/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
index 410fb57..8f9db63 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
@@ -1,23 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#define CAMP_COMPILATION
+
 #include "fwMemory/BufferObject.hpp"
 
 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("is_a", (bool(::fwMemory::BufferObject::*)(const std::string &) const) &::fwMemory::BufferObject::isA);
 }
 
 namespace fwMemory
 {
 
-
-
 BufferObject::BufferObject() :
     m_buffer(0),
     m_size(0),
@@ -38,7 +38,7 @@ BufferObject::~BufferObject()
 
 //------------------------------------------------------------------------------
 
-void BufferObject::allocate(SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy)
+void BufferObject::allocate(SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr& policy)
 {
     m_bufferManager->allocateBuffer(&m_buffer, size, policy).get();
     m_allocPolicy = policy;
@@ -65,7 +65,7 @@ void BufferObject::destroy()
 //------------------------------------------------------------------------------
 
 void BufferObject::setBuffer(::fwMemory::BufferManager::BufferType buffer, SizeType size,
-                             const ::fwMemory::BufferAllocationPolicy::sptr &policy)
+                             const ::fwMemory::BufferAllocationPolicy::sptr& policy)
 {
     m_bufferManager->setBuffer(&m_buffer, buffer, size, policy).get();
     m_allocPolicy = policy;
@@ -88,7 +88,7 @@ BufferObject::ConstLock BufferObject::lock() const
 
 //------------------------------------------------------------------------------
 
-void BufferObject::swap( const BufferObject::sptr &_source )
+void BufferObject::swap( const BufferObject::sptr& _source )
 {
     m_bufferManager->swapBuffer(&m_buffer, &(_source->m_buffer)).get();
 
@@ -106,11 +106,11 @@ BufferManager::StreamInfo BufferObject::getStreamInfo() const
 
 //------------------------------------------------------------------------------
 
-void BufferObject::setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory) &factory,
+void BufferObject::setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory)& factory,
                                      SizeType size,
-                                     const ::boost::filesystem::path &sourceFile,
+                                     const ::boost::filesystem::path& sourceFile,
                                      ::fwMemory::FileFormatType format,
-                                     const ::fwMemory::BufferAllocationPolicy::sptr &policy
+                                     const ::fwMemory::BufferAllocationPolicy::sptr& policy
                                      )
 {
     m_size        = size;
@@ -118,7 +118,5 @@ void BufferObject::setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory
     m_bufferManager->setIStreamFactory(&m_buffer, factory, size, sourceFile, format, policy).get();
 }
 
-
 } //namespace fwMemory
 
-
diff --git a/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp b/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
index 132f00b..261609c 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
@@ -1,53 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/fstream.hpp>
-// #include <boost/iostreams/filtering_stream.hpp>
-// #include <boost/iostreams/filter/gzip.hpp>
-//
-// //
-// #include <fwCore/macros.hpp>
-//
-// #include "fwMemory/stream/in/RawZ.hpp"
-//
-// namespace fwMemory
-// {
-// namespace stream
-// {
-// namespace in
-// {
-//
-// struct FilteringStream : ::boost::iostreams::filtering_istream
-// {
-//
-//     ~FilteringStream()
-//     {
-//         try { this->reset(); } catch (...) { }
-//     }
-//
-//     SPTR(void) heldStream;
-// };
-//
-// SPTR(std::istream) RawZ::get()
-// {
-//     SPTR(::boost::filesystem::ifstream) fs
-//         = std::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
-//
-//     SPTR(FilteringStream) filter = std::make_shared< FilteringStream >();
-//
-//     filter->heldStream = fs;
-//
-//     filter->push(::boost::iostreams::gzip_decompressor());
-//     filter->push(*fs);
-//
-//     return filter;
-// }
-//
-// } // namespace in
-// } // namespace stream
-// } // namespace fwMemory
+#include "fwMemory/stream/in/RawZ.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/iostreams/filter/gzip.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+
+namespace fwMemory
+{
+namespace stream
+{
+namespace in
+{
+
+struct FilteringStream : ::boost::iostreams::filtering_istream
+{
+
+    ~FilteringStream()
+    {
+        try
+        {
+            this->reset();
+        }
+        catch (...)
+        {
+        }
+    }
+
+    SPTR(void) heldStream;
+};
+
+SPTR(std::istream) RawZ::get()
+{
+    SPTR(::boost::filesystem::ifstream) fs
+        = std::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
+
+    SPTR(FilteringStream) filter = std::make_shared< FilteringStream >();
+
+    filter->heldStream = fs;
+
+    filter->push(::boost::iostreams::gzip_decompressor());
+    filter->push(*fs);
+
+    return filter;
+}
+
+} // namespace in
+} // namespace stream
+} // namespace fwMemory
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
index 5a52421..109c87e 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
@@ -1,27 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <assert.h>
-#include <iomanip>
-#include <iostream>
-
-#include <boost/regex.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/convenience.hpp>
-
-#include <fwCore/base.hpp>
-
 #include "fwMemory/tools/DarwinMemoryMonitorTools.hpp"
 
-
-#include <sys/types.h>
-#include <sys/sysctl.h>
+#include <fwCore/base.hpp>
 
 #include <mach/mach.h>
 #include <mach/mach_host.h>
@@ -29,6 +16,12 @@
 #include <mach/mach_types.h>
 #include <mach/vm_statistics.h>
 
+#include <sys/sysctl.h>
+#include <sys/types.h>
+
+#include <iomanip>
+#include <iostream>
+
 namespace fwMemory
 {
 namespace tools
@@ -48,9 +41,9 @@ DarwinMemoryMonitorTools::~DarwinMemoryMonitorTools()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t DarwinMemoryMonitorTools::estimateFreeMem()
+std::uint64_t DarwinMemoryMonitorTools::estimateFreeMem()
 {
-    ::boost::uint64_t freeMemory = 0;
+    std::uint64_t freeMemory = 0;
 
     freeMemory = getFreeSystemMemory();
 
@@ -67,10 +60,10 @@ DarwinMemoryMonitorTools::~DarwinMemoryMonitorTools()
     }
 
     // Hard coded 3Gb limit for 32bit process
-    const ::boost::uint64_t maxMemory         = 3221225472LL; // 3 Go
-    const ::boost::uint64_t usedProcessMemory = getUsedProcessMemory();
+    const std::uint64_t maxMemory         = 3221225472LL; // 3 Go
+    const std::uint64_t usedProcessMemory = getUsedProcessMemory();
     freeMemory = std::min( maxMemory - usedProcessMemory, freeMemory);
-    const ::boost::uint64_t maxVMemory = 4294967296LL; // 4 Go
+    const std::uint64_t maxVMemory = 4294967296LL; // 4 Go
     freeMemory = std::min( maxVMemory - t_info.virtual_size, freeMemory);
 #endif
 
@@ -99,7 +92,7 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t DarwinMemoryMonitorTools::getTotalSystemMemory()
+std::uint64_t DarwinMemoryMonitorTools::getTotalSystemMemory()
 {
     static int64_t physical_memory = 0;
 
@@ -117,7 +110,7 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t DarwinMemoryMonitorTools::getUsedSystemMemory()
+std::uint64_t DarwinMemoryMonitorTools::getUsedSystemMemory()
 {
     vm_size_t page_size;
     mach_port_t mach_port;
@@ -143,7 +136,7 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t DarwinMemoryMonitorTools::getFreeSystemMemory()
+std::uint64_t DarwinMemoryMonitorTools::getFreeSystemMemory()
 {
     vm_size_t page_size;
     mach_port_t mach_port;
@@ -168,7 +161,7 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t DarwinMemoryMonitorTools::getUsedProcessMemory()
+std::uint64_t DarwinMemoryMonitorTools::getUsedProcessMemory()
 {
     struct task_basic_info t_info;
     mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
index 17d646b..cfbdc2e 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwMemory/tools/MemoryMonitorTools.hpp"
 
-
 #ifdef _WIN32
 #define MEMORYTOOLIMPL Win32MemoryMonitorTools
 #include "fwMemory/tools/Win32MemoryMonitorTools.hpp"
@@ -37,7 +36,7 @@ MemoryMonitorTools::~MemoryMonitorTools()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t MemoryMonitorTools::estimateFreeMem()
+std::uint64_t MemoryMonitorTools::estimateFreeMem()
 {
     return MEMORYTOOLIMPL::estimateFreeMem();
 }
@@ -65,28 +64,28 @@ void MemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t MemoryMonitorTools::getTotalSystemMemory()
+std::uint64_t MemoryMonitorTools::getTotalSystemMemory()
 {
     return MEMORYTOOLIMPL::getTotalSystemMemory();
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t MemoryMonitorTools::getUsedSystemMemory()
+std::uint64_t MemoryMonitorTools::getUsedSystemMemory()
 {
     return MEMORYTOOLIMPL::getUsedSystemMemory();
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t MemoryMonitorTools::getFreeSystemMemory()
+std::uint64_t MemoryMonitorTools::getFreeSystemMemory()
 {
     return MEMORYTOOLIMPL::getFreeSystemMemory();
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t MemoryMonitorTools::getUsedProcessMemory()
+std::uint64_t MemoryMonitorTools::getUsedProcessMemory()
 {
     return MEMORYTOOLIMPL::getUsedProcessMemory();
 }
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
index c54b0e0..0a3085e 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
@@ -1,49 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #if defined(linux) || defined(__linux)
 
-#include <assert.h>
-#include <iomanip>
-#include <iostream>
-
-#include <boost/regex.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/convenience.hpp>
-#include <boost/lexical_cast.hpp>
+#include "fwMemory/tools/PosixMemoryMonitorTools.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwMemory/tools/PosixMemoryMonitorTools.hpp"
-
+#include <fcntl.h>
+#include <unistd.h>
 
-#include <cstdlib>
-#include <cstdio>
-#include <cerrno>
-#include <cctype>
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/regex.hpp>
 
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/time.h>
 #include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/types.h>
 
-#include <string>
+#include <cctype>
+#include <cerrno>
+#include <cstdio>
+#include <cstdlib>
 #include <fstream>
+#include <iomanip>
+#include <iostream>
 #include <sstream>
-
+#include <string>
 
 namespace fwMemory
 {
 namespace tools
 {
 
-::boost::uint64_t PosixMemoryMonitorTools::s_pageSize    = sysconf(_SC_PAGE_SIZE);
-::boost::uint64_t PosixMemoryMonitorTools::s_totalMemory = sysconf(_SC_PHYS_PAGES) * s_pageSize;
+std::uint64_t PosixMemoryMonitorTools::s_pageSize    = sysconf(_SC_PAGE_SIZE);
+std::uint64_t PosixMemoryMonitorTools::s_totalMemory = sysconf(_SC_PHYS_PAGES) * s_pageSize;
 
 //-----------------------------------------------------------------------------
 
@@ -59,19 +55,18 @@ PosixMemoryMonitorTools::~PosixMemoryMonitorTools()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::estimateFreeMem()
+std::uint64_t PosixMemoryMonitorTools::estimateFreeMem()
 {
-    ::boost::uint64_t freeMemory = 0;
+    std::uint64_t freeMemory = 0;
 
-//  ::boost::uint64_t systemMemoryAverageInNormalCase = 500 * 1024 * 1024; // 500 Mo
-//  ::boost::uint64_t memoryUsedByProcess = MemoryMonitor::getDefault()->totalUsedSizeInBytes()
+//  std::uint64_t systemMemoryAverageInNormalCase = 500 * 1024 * 1024; // 500 Mo
+//  std::uint64_t memoryUsedByProcess = MemoryMonitor::getDefault()->totalUsedSizeInBytes()
 //                                          + 50 * 1024 * 1024; // + 50 Mo of librairies;
 //  freeMemory = ( getTotalSystemMemory() < systemMemoryAverageInNormalCase + memoryUsedByProcess?
 //                 0:
 //                 getTotalSystemMemory() - systemMemoryAverageInNormalCase - memoryUsedByProcess
 //               );
 
-
     freeMemory = getFreeSystemMemory();
 
     return freeMemory;
@@ -92,7 +87,7 @@ void PosixMemoryMonitorTools::printSystemMemoryInformation()
 {
     MemInfo memory;
     get_memory_stats(memory);
-    ::boost::uint64_t oToKMo = 1024*1024;
+    std::uint64_t oToKMo = 1024*1024;
 
     OSLM_INFO("Total memory: " << memory.total/oToKMo<< " Mo");
     OSLM_INFO("Free memory:  " << memory.free/oToKMo << " Mo");
@@ -106,8 +101,8 @@ void PosixMemoryMonitorTools::printSystemMemoryInformation()
     getAllStatus( allStat );
     printStatus( allStat );
 
-    ::boost::uint64_t computedFree = ( memory.total - allStat.VmRSS ) / oToKMo;
-    ::boost::uint64_t free         = memory.free / oToKMo;
+    std::uint64_t computedFree = ( memory.total - allStat.VmRSS ) / oToKMo;
+    std::uint64_t free         = memory.free / oToKMo;
     OSLM_INFO(  "(ComputedFree, Free, Diff) - ( "
                 << std::setw(5) << computedFree
                 << std::setw(5) << free
@@ -127,21 +122,21 @@ void PosixMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::getTotalSystemMemory()
+std::uint64_t PosixMemoryMonitorTools::getTotalSystemMemory()
 {
     return s_totalMemory;
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::getUsedSystemMemory()
+std::uint64_t PosixMemoryMonitorTools::getUsedSystemMemory()
 {
     return getTotalSystemMemory() - getFreeSystemMemory();
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::getFreeSystemMemory()
+std::uint64_t PosixMemoryMonitorTools::getFreeSystemMemory()
 {
     //Status allStat;
     //getAllStatus( allStat );
@@ -152,7 +147,7 @@ void PosixMemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::getUsedProcessMemory()
+std::uint64_t PosixMemoryMonitorTools::getUsedProcessMemory()
 {
     Status stat;
     getStatusOfPid( getpid(), stat );
@@ -163,12 +158,12 @@ void PosixMemoryMonitorTools::printMemoryInformation()
 
 //------------------------------------------------------------------------------
 
-::boost::uint64_t PosixMemoryMonitorTools::extract_number(char *str, int start, int end)
+std::uint64_t PosixMemoryMonitorTools::extract_number(char* str, int start, int end)
 {
     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]);
     }
@@ -179,7 +174,7 @@ void PosixMemoryMonitorTools::printMemoryInformation()
 
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::get_memory_stats( MemInfo & meminfo )
+void PosixMemoryMonitorTools::get_memory_stats( MemInfo& meminfo )
 {
 /*
     // We are bothered about only the first 338 bytes of the /proc/meminfo file
@@ -201,7 +196,7 @@ void PosixMemoryMonitorTools::get_memory_stats( MemInfo & meminfo )
     meminfo.swapfree = extract_number(buf, 322, 335);
  */
 
-    std::ifstream input ( "/proc/meminfo" );
+    std::ifstream input( "/proc/meminfo" );
 
     std::string line;
     if ( input.is_open() )
@@ -218,51 +213,51 @@ void PosixMemoryMonitorTools::get_memory_stats( MemInfo & meminfo )
 
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::analyseMemInfo( std::string & line, MemInfo & meminfo )
+void PosixMemoryMonitorTools::analyseMemInfo( std::string& line, MemInfo& meminfo )
 {
-    ::boost::regex e ("([A-Za-z:]+)([ \t]+)([0-9]+)([ \t]+)kB(.*)");
+    ::boost::regex e("([A-Za-z:]+)([ \t]+)([0-9]+)([ \t]+)kB(.*)");
     std::string machine_format = "\\3";
     if ( line.find("MemTotal") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.total = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.total = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("MemFree") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.free = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.free = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("Buffers") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.buffered = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.buffered = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("SwapCached") != std::string::npos ) // Test before => line.find("Cached")
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.swapcached = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.swapcached = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("Cached") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.cached = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.cached = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("SwapTotal") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.swaptotal = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.swaptotal = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("SwapFree") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        meminfo.swapfree = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        meminfo.swapfree = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
 }
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::printStatus( Status & stat )
+void PosixMemoryMonitorTools::printStatus( Status& stat )
 {
     int oToMo = 1024 * 1024;
     OSLM_DEBUG("VmPeak = " << stat.VmPeak / oToMo << " Mo" );
@@ -280,69 +275,69 @@ void PosixMemoryMonitorTools::printStatus( Status & stat )
 
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::analyseStatusLine( std::string & line, Status & stat )
+void PosixMemoryMonitorTools::analyseStatusLine( std::string& line, Status& stat )
 {
-    ::boost::regex e ("([A-Za-z:]+)([ \t]+)([0-9]+)([ \t]+)kB(.*)");
+    ::boost::regex e("([A-Za-z:]+)([ \t]+)([0-9]+)([ \t]+)kB(.*)");
     std::string machine_format = "\\3";
     if ( line.find("VmPeak") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmPeak = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmPeak = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmSize") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmSize = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmSize = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmLck") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmLck = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmLck = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmHWM") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmHWM = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmHWM = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmRSS") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmRSS = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmRSS = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmData") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmData = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmData = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmStk") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmStk = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmStk = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmExe") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmExe = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmExe = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmLib") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmLib = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmLib = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
     else if ( line.find("VmPTE") != std::string::npos )
     {
         std::string size = regex_replace(line, e, machine_format, ::boost::match_default | ::boost::format_sed);
-        stat.VmPTE = ::boost::lexical_cast< ::boost::uint64_t >(size) * 1024;
+        stat.VmPTE = ::boost::lexical_cast< std::uint64_t >(size) * 1024;
     }
 }
 
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::getStatusOfPid( int pid, Status & stat)
+void PosixMemoryMonitorTools::getStatusOfPid( int pid, Status& stat)
 {
     std::stringstream file;
     file << "/proc/" << pid << "/status";
-    std::ifstream input ( file.str().c_str() );
+    std::ifstream input( file.str().c_str() );
 
     std::string line;
     if ( input.is_open() )
@@ -350,7 +345,7 @@ void PosixMemoryMonitorTools::getStatusOfPid( int pid, Status & stat)
         while ( !input.eof() )
         {
             getline( input, line );
-            analyseStatusLine(line,stat);
+            analyseStatusLine(line, stat);
         }
         input.close();
     }
@@ -358,10 +353,10 @@ void PosixMemoryMonitorTools::getStatusOfPid( int pid, Status & stat)
 
 //------------------------------------------------------------------------------
 
-void PosixMemoryMonitorTools::getAllStatus( Status & allStat )
+void PosixMemoryMonitorTools::getAllStatus( Status& allStat )
 {
-    ::boost::filesystem::path path ("/proc");
-    ::boost::regex e ("[0-9]+");
+    ::boost::filesystem::path path("/proc");
+    ::boost::regex e("[0-9]+");
 
     allStat.VmPeak = 0;
     allStat.VmSize = 0;
@@ -374,7 +369,7 @@ void PosixMemoryMonitorTools::getAllStatus( Status & allStat )
     allStat.VmLib  = 0;
     allStat.VmPTE  = 0;
 
-    for(    ::boost::filesystem::directory_iterator it (path);
+    for(    ::boost::filesystem::directory_iterator it(path);
             it != ::boost::filesystem::directory_iterator();
             ++it )
     {
@@ -407,22 +402,22 @@ void PosixMemoryMonitorTools::getAllStatus( Status & allStat )
 
 void PosixMemoryMonitorTools::printAllStatus()
 {
-    ::boost::filesystem::path path ("/proc");
-    ::boost::regex e ("[0-9]+");
+    ::boost::filesystem::path path("/proc");
+    ::boost::regex e("[0-9]+");
     int oToMo = 1024 * 1024;
 
-    ::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 totalVmData = 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);
+    std::uint64_t totalVmPeak = 0;
+    std::uint64_t totalVmSize = 0;
+    std::uint64_t totalVmLck  = 0;
+    std::uint64_t totalVmHWM  = 0;
+    std::uint64_t totalVmRSS  = 0;
+    std::uint64_t totalVmData = 0;
+    std::uint64_t totalVmStk  = 0;
+    std::uint64_t totalVmExe  = 0;
+    std::uint64_t totalVmLib  = 0;
+    std::uint64_t totalVmPTE  = 0;
+
+    for(    ::boost::filesystem::directory_iterator it(path);
             it != ::boost::filesystem::directory_iterator();
             ++it )
     {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
index fce4848..5b5669c 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
@@ -1,30 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <assert.h>
-#include <iomanip>
-#include <iostream>
-
-#include <boost/regex.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/convenience.hpp>
-
-#include <fwCore/base.hpp>
-
 #include "fwMemory/tools/Win32MemoryMonitorTools.hpp"
 
+#include <fwCore/base.hpp>
 
-#include <windows.h>
-#include <stdio.h>
 #include <psapi.h>
+#include <stdio.h>
 #include <tchar.h>
+#include <windows.h>
 
+#include <iomanip>
+#include <iostream>
 
 namespace fwMemory
 {
@@ -45,16 +37,16 @@ Win32MemoryMonitorTools::~Win32MemoryMonitorTools()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t Win32MemoryMonitorTools::estimateFreeMem()
+std::uint64_t Win32MemoryMonitorTools::estimateFreeMem()
 {
-    ::boost::uint64_t freeMemory = 0;
+    std::uint64_t freeMemory = 0;
 #ifdef _M_X64
     freeMemory = getFreeSystemMemory();
 #else
-    ::boost::uint64_t windowsLimitForAProcess = 1.2 * 1024 * 1024 * 1024; // 1.5 Go
-    ::boost::uint64_t freeMem                 = std::min(
+    std::uint64_t windowsLimitForAProcess = 1.2 * 1024 * 1024 * 1024; // 1.5 Go
+    std::uint64_t freeMem                 = std::min(
         getFreeSystemMemory(), windowsLimitForAProcess - getUsedProcessMemory());
-    freeMemory = std::max((::boost::uint64_t) 0, freeMem );
+    freeMemory = std::max((std::uint64_t) 0, freeMem );
 #endif
     return freeMemory;
 }
@@ -66,7 +58,6 @@ void Win32MemoryMonitorTools::printProcessMemoryInformation()
     DWORD processID = GetCurrentProcessId();
     HANDLE hProcess;
 
-
     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |PROCESS_VM_READ,
                             FALSE,
                             processID );
@@ -75,7 +66,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;
@@ -119,12 +110,12 @@ void Win32MemoryMonitorTools::printProcessMemoryInformation()
 
 void Win32MemoryMonitorTools::printSystemMemoryInformation()
 {
-    ::boost::uint64_t oToKo = 1024;
+    std::uint64_t oToKo = 1024;
 
     MEMORYSTATUSEX statex;
 
     statex.dwLength = sizeof (statex);
-    GlobalMemoryStatusEx (&statex);
+    GlobalMemoryStatusEx(&statex);
 
     SLM_INFO( "-- System memory information --" );
     OSLM_INFO( "    There is " << statex.dwMemoryLoad               <<  " percent of memory in use." );
@@ -146,45 +137,45 @@ void Win32MemoryMonitorTools::printMemoryInformation()
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t Win32MemoryMonitorTools::getTotalSystemMemory()
+std::uint64_t Win32MemoryMonitorTools::getTotalSystemMemory()
 {
     MEMORYSTATUSEX statex;
 
     statex.dwLength = sizeof (statex);
-    GlobalMemoryStatusEx (&statex);
+    GlobalMemoryStatusEx(&statex);
 
     return statex.ullTotalPhys;
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t Win32MemoryMonitorTools::getUsedSystemMemory()
+std::uint64_t Win32MemoryMonitorTools::getUsedSystemMemory()
 {
     MEMORYSTATUSEX statex;
 
     statex.dwLength = sizeof (statex);
-    GlobalMemoryStatusEx (&statex);
+    GlobalMemoryStatusEx(&statex);
 
     return statex.ullTotalPhys - statex.ullAvailPhys;
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t Win32MemoryMonitorTools::getFreeSystemMemory()
+std::uint64_t Win32MemoryMonitorTools::getFreeSystemMemory()
 {
     MEMORYSTATUSEX statex;
 
     statex.dwLength = sizeof (statex);
-    GlobalMemoryStatusEx (&statex);
+    GlobalMemoryStatusEx(&statex);
 
     return statex.ullAvailPhys;
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::uint64_t Win32MemoryMonitorTools::getUsedProcessMemory()
+std::uint64_t Win32MemoryMonitorTools::getUsedProcessMemory()
 {
-    ::boost::uint64_t memory = 0;
+    std::uint64_t memory = 0;
 
     BOOL result;
     PROCESS_MEMORY_COUNTERS_EX pmc;
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/core/fwPreferences/CMakeLists.txt
similarity index 95%
copy from SrcLib/core/fwDataCamp/CMakeLists.txt
copy to SrcLib/core/fwPreferences/CMakeLists.txt
index 1c29206..15cd4c1 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/core/fwPreferences/CMakeLists.txt
@@ -1,2 +1 @@
 fwLoadProperties()
-
diff --git a/SrcLib/tests/fwTest/Properties.cmake b/SrcLib/core/fwPreferences/Properties.cmake
similarity index 55%
copy from SrcLib/tests/fwTest/Properties.cmake
copy to SrcLib/core/fwPreferences/Properties.cmake
index 72a815e..953adbb 100644
--- a/SrcLib/tests/fwTest/Properties.cmake
+++ b/SrcLib/core/fwPreferences/Properties.cmake
@@ -1,15 +1,12 @@
-
-set( NAME fwTest )
+set( NAME fwPreferences )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES
     fwCore
-    fwData
-    fwDataCamp
-    fwDataTools
-    fwMath
-    fwMedData
     fwTools
+    fwRuntime
+    fwData
+    fwServices
 )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchServices)
diff --git a/Bundles/core/preferences/include/preferences/IPreferencesService.hpp b/SrcLib/core/fwPreferences/include/fwPreferences/IPreferences.hpp
similarity index 50%
rename from Bundles/core/preferences/include/preferences/IPreferencesService.hpp
rename to SrcLib/core/fwPreferences/include/fwPreferences/IPreferences.hpp
index e15452b..a26b24a 100644
--- a/Bundles/core/preferences/include/preferences/IPreferencesService.hpp
+++ b/SrcLib/core/fwPreferences/include/fwPreferences/IPreferences.hpp
@@ -4,39 +4,39 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __PREFERENCES_IPREFERENCESSERVICE_HPP__
-#define __PREFERENCES_IPREFERENCESSERVICE_HPP__
+#ifndef __FWPREFERENCES_IPREFERENCES_HPP__
+#define __FWPREFERENCES_IPREFERENCES_HPP__
 
-#include "preferences/config.hpp"
+#include "fwPreferences/config.hpp"
 
 #include <fwServices/IService.hpp>
 
-namespace preferences
+namespace fwPreferences
 {
 
 /**
  * @brief Preferences service API.
  * This class represents the base interface for preferences services.
  */
-class PREFERENCES_CLASS_API IPreferencesService : public fwServices::IService
+class PREFERENCES_CLASS_API IPreferences : public fwServices::IService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (IPreferencesService)(::fwServices::IService) );
+    fwCoreServiceClassDefinitionsMacro ( (IPreferences)(::fwServices::IService) );
 
     /// Constructor
-    IPreferencesService() throw()
+    IPreferences() throw()
     {
     }
 
     /// Destructor
-    virtual ~IPreferencesService() throw()
+    virtual ~IPreferences() throw()
     {
     }
 };
 
-} // namespace preferences
+} // namespace fwPreferences
 
-#endif /*__PREFERENCES_IPREFERENCESSERVICE_HPP__*/
+#endif /*__FWPREFERENCES_IPREFERENCES_HPP__*/
 
 
diff --git a/SrcLib/core/fwPreferences/include/fwPreferences/helper.hpp b/SrcLib/core/fwPreferences/include/fwPreferences/helper.hpp
new file mode 100644
index 0000000..bc9e343
--- /dev/null
+++ b/SrcLib/core/fwPreferences/include/fwPreferences/helper.hpp
@@ -0,0 +1,30 @@
+/* ***** 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 __FWPREFERENCES_HELPER_HPP__
+#define __FWPREFERENCES_HELPER_HPP__
+
+#include "fwPreferences/config.hpp"
+
+#include <boost/filesystem.hpp>
+
+#include <string>
+
+namespace fwPreferences
+{
+
+/// Returns preferences associated with specified key. If not found, returns an empty string.
+FWPREFERENCES_API std::string getPreference(const std::string& preferenceKey);
+
+/// Sets a value in preferences associated with specified key. If fail, returns false.
+FWPREFERENCES_API bool setPreference(const std::string& key, const std::string& value);
+
+/// Returns file used to store all preferences in current context.
+FWPREFERENCES_API ::boost::filesystem::path getPreferencesFile();
+
+} // namespace fwPreferences
+
+#endif //__FWPREFERENCES_HELPER_HPP__
diff --git a/SrcLib/core/fwPreferences/src/fwPreferences/helper.cpp b/SrcLib/core/fwPreferences/src/fwPreferences/helper.cpp
new file mode 100644
index 0000000..bab347c
--- /dev/null
+++ b/SrcLib/core/fwPreferences/src/fwPreferences/helper.cpp
@@ -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 ****** */
+
+#include "fwPreferences/helper.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTools/Os.hpp>
+
+namespace fwPreferences
+{
+
+//----------------------------------------------------------------------------
+
+bool setPreference(const std::string& key, const std::string& value)
+{
+    bool isModified = false;
+    // Check preferences
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
+    if(!preferencesServicesList.empty())
+    {
+        const ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
+        ::fwData::Composite::sptr prefs = prefService->getObject< ::fwData::Composite >();
+
+        ::fwData::Composite::IteratorType iterPref = prefs->find(key);
+        if ( iterPref != prefs->end() )
+        {
+            ::fwData::String::sptr preferences = ::fwData::String::dynamicCast(iterPref->second);
+            preferences->value()               = value;
+        }
+        else
+        {
+            (*prefs)[key] = ::fwData::String::New(value);
+        }
+        isModified = true;
+    }
+    return isModified;
+}
+
+//----------------------------------------------------------------------------
+
+std::string getPreference(const std::string& preferenceKey)
+{
+    std::string value;
+    // Check preferences
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::fwPreferences::IPreferences");
+    if(!preferencesServicesList.empty())
+    {
+        ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
+        ::fwData::Composite::sptr prefs          = prefService->getObject< ::fwData::Composite >();
+
+        ::fwData::Composite::IteratorType iterPref = prefs->find( preferenceKey );
+        if ( iterPref != prefs->end() )
+        {
+            ::fwData::String::sptr prefString = ::fwData::String::dynamicCast(iterPref->second);
+            value                             = prefString->value();
+        }
+    }
+    return value;
+}
+
+//-----------------------------------------------------------------------------
+
+::boost::filesystem::path getPreferencesFile()
+{
+    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 fwPreferences
diff --git a/SrcLib/core/fwDataCamp/test/CMakeLists.txt b/SrcLib/core/fwPreferences/test/CMakeLists.txt
similarity index 61%
copy from SrcLib/core/fwDataCamp/test/CMakeLists.txt
copy to SrcLib/core/fwPreferences/test/CMakeLists.txt
index dddc271..73acf03 100644
--- a/SrcLib/core/fwDataCamp/test/CMakeLists.txt
+++ b/SrcLib/core/fwPreferences/test/CMakeLists.txt
@@ -1,13 +1,11 @@
 fwLoadProperties()
+
 find_package(CppUnit)
-find_package(CAMP REQUIRED)
 
 fwInclude(
-    ${CAMP_INCLUDE_DIR}
     ${CPPUNIT_INCLUDE_DIR}
 )
+
 fwLink(
-    ${CAMP_LIBRARIES}
     ${CPPUNIT_LIBRARY}
 )
-
diff --git a/SrcLib/core/fwPreferences/test/Properties.cmake b/SrcLib/core/fwPreferences/test/Properties.cmake
new file mode 100644
index 0000000..f6eab71
--- /dev/null
+++ b/SrcLib/core/fwPreferences/test/Properties.cmake
@@ -0,0 +1,19 @@
+set( NAME fwPreferencesTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwCore
+    fwTest
+    fwTools
+    fwRuntime
+    fwData
+    fwServices
+    fwCom
+    fwThread
+    fwPreferences
+)
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    preferences
+)
diff --git a/SrcLib/core/fwPreferences/test/tu/include/PreferencesTest.hpp b/SrcLib/core/fwPreferences/test/tu/include/PreferencesTest.hpp
new file mode 100644
index 0000000..e2b903a
--- /dev/null
+++ b/SrcLib/core/fwPreferences/test/tu/include/PreferencesTest.hpp
@@ -0,0 +1,44 @@
+/* ***** 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 __FWPREFERENCES_UT_PREFERENCESTEST_HPP__
+#define __FWPREFERENCES_UT_PREFERENCESTEST_HPP__
+
+#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwPreferences
+{
+namespace ut
+{
+
+/**
+ * @brief Preferences unit test .
+ */
+class PreferencesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( PreferencesTest );
+CPPUNIT_TEST( helperTest );
+CPPUNIT_TEST_SUITE_END();
+
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void helperTest();
+
+private:
+    ::fwRuntime::profile::Profile::sptr m_profile;
+};
+
+} //namespace ut
+} //namespace fwPreferences
+
+#endif // __FWPREFERENCES_UT_PREFERENCESTEST_HPP__
diff --git a/SrcLib/core/fwPreferences/test/tu/src/PreferencesTest.cpp b/SrcLib/core/fwPreferences/test/tu/src/PreferencesTest.cpp
new file mode 100644
index 0000000..917ca1a
--- /dev/null
+++ b/SrcLib/core/fwPreferences/test/tu/src/PreferencesTest.cpp
@@ -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 ****** */
+
+#include "PreferencesTest.hpp"
+
+#include <fwPreferences/helper.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/IPlugin.hpp>
+#include <fwRuntime/Runtime.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwTools/Os.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwPreferences::ut::PreferencesTest );
+
+namespace fwPreferences
+{
+namespace ut
+{
+
+void PreferencesTest::setUp()
+{
+    m_profile = ::fwRuntime::profile::Profile::New();
+    m_profile->setName("APP_TEST");
+    ::fwRuntime::profile::setCurrentProfile(m_profile);
+
+    // Set up context before running a test.
+    const ::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();
+
+    // Read bundles
+    runtime->addBundles(bundlesLocation);
+
+    std::shared_ptr< ::fwRuntime::Bundle > dataReg = runtime->findBundle("dataReg");
+    CPPUNIT_ASSERT_MESSAGE("'dataReg bundle not found !'",dataReg);
+    dataReg->setEnable(true);
+    CPPUNIT_ASSERT(dataReg->isEnable());
+    dataReg->start();
+
+    std::shared_ptr< ::fwRuntime::Bundle > servicesReg = runtime->findBundle("servicesReg");
+    CPPUNIT_ASSERT_MESSAGE("'servicesReg bundle not found !'",servicesReg);
+    servicesReg->setEnable(true);
+    CPPUNIT_ASSERT(servicesReg->isEnable());
+    servicesReg->start();
+
+    std::shared_ptr< ::fwRuntime::Bundle > preferences = runtime->findBundle("preferences");
+    CPPUNIT_ASSERT_MESSAGE("'preferences bundle not found !'",preferences);
+    preferences->setEnable(true);
+    CPPUNIT_ASSERT(preferences->isEnable());
+    preferences->start();
+}
+
+//------------------------------------------------------------------------------
+
+void PreferencesTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void PreferencesTest::helperTest()
+{
+    const std::string preferenceKey   = "PREF_KEY_TEST";
+    const std::string preferenceValue = "PREF_VALUE_TEST";
+    const std::string profileName     = m_profile->getName();
+
+    const ::boost::filesystem::path appPrefDir = ::fwTools::os::getUserDataDir("fw4spl", profileName);
+    const ::boost::filesystem::path prefFile   = appPrefDir / "preferences.json";
+
+    //Check preference file dir
+    const ::boost::filesystem::path file = ::fwPreferences::getPreferencesFile();
+    CPPUNIT_ASSERT_EQUAL(prefFile.string(), file.string());
+
+    //Check set preference
+    const bool isModified = ::fwPreferences::setPreference(preferenceKey, preferenceValue);
+    CPPUNIT_ASSERT(isModified);
+
+    //Check get preference
+    const std::string value = ::fwPreferences::getPreference(preferenceKey);
+    CPPUNIT_ASSERT_EQUAL(preferenceValue, value);
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwPreferences
diff --git a/SrcLib/core/fwRender/Properties.cmake b/SrcLib/core/fwRender/Properties.cmake
index bc7dcb0..9b10a97 100644
--- a/SrcLib/core/fwRender/Properties.cmake
+++ b/SrcLib/core/fwRender/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore fwGui fwRuntime fwServices fwTools )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchServices)
diff --git a/SrcLib/core/fwRuntime/Properties.cmake b/SrcLib/core/fwRuntime/Properties.cmake
index 50b7acf..f1b71ba 100644
--- a/SrcLib/core/fwRuntime/Properties.cmake
+++ b/SrcLib/core/fwRuntime/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.3 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET fwCore )
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
index e55d70c..4b84d1a 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,40 @@
 #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
+ * @defgroup requirement Requirements
+ * The bundles in the \p \<requirement\> section of the \b plugin.xml are started when the bundle is started.
  *
- * @date        2009-2010.
+ * In fw4spl, we can automatically start bundles in two case:
+ * - The bundle contains an AppConfig or an Activity: the bundle will be started when the config or the activity is
+ *   launched
+ * - The bundle contains services: the bundle will be started when one of the services is used in an AppConfig to launch.
  *
+ * But in some case, we must define the bundles to start manually using the \p \<requirement\> tag.
+ *
+ * <b>Which bundle should I add in requirement ?</b>
+ *
+ * You must add requirement for:
+ *  - bundles containing data (ex. dataReg)
+ *  - bundles containing registry (ex. servicesReg, @ref activities)
+ *  - bundles for @ref preferences, guiQt, visuVTKQt, @ref memory
+ *  - ...
+ */
+
+/**
+ * @defgroup apprequirement Application requirements
+ * @ingroup  requirement
+ *  This list contains the bundles that could be added in your application's requirements.
+ */
+
+/**
+ * @defgroup bundlerequirement Bundles requirements
+ * @ingroup  requirement
+ * This list contains the bundles that could be added in bundle's requirements
+ */
+
+/**
+ * @brief  The namespace fwRuntime contains classes to manage bundle, configuration element, extension point in the
+ *         runtime environment from a configuration file .
  */
 namespace fwRuntime
 {
diff --git a/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp b/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp
index 49d31b5..9f760a0 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@
 #include "fwRuntime/EConfigurationElement.hpp"
 
 #include "fwRuntime/Bundle.hpp"
-#include "fwRuntime/IExecutable.hpp"
-#include "fwRuntime/RuntimeException.hpp"
-
 
 namespace fwRuntime
 {
@@ -23,6 +20,8 @@ EConfigurationElement::~EConfigurationElement()
 {
 }
 
+//------------------------------------------------------------------------------
+
 EConfigurationElement::sptr EConfigurationElement::addConfigurationElement( const std::string& name )
 {
     EConfigurationElement::sptr cfg = EConfigurationElement::New(name);
@@ -30,16 +29,22 @@ EConfigurationElement::sptr EConfigurationElement::addConfigurationElement( cons
     return cfg;
 }
 
+//------------------------------------------------------------------------------
+
 void EConfigurationElement::addConfigurationElement( EConfigurationElement::sptr element )
 {
     this->::fwRuntime::ConfigurationElement::addConfigurationElement( element );
 }
 
+//------------------------------------------------------------------------------
+
 void EConfigurationElement::setAttributeValue(const std::string& name, const std::string& value) throw()
 {
     this->::fwRuntime::ConfigurationElement::setAttributeValue( name, value );
 }
 
+//------------------------------------------------------------------------------
+
 void EConfigurationElement::setValue(const std::string& value) throw()
 {
     this->::fwRuntime::ConfigurationElement::setValue(value);
diff --git a/SrcLib/core/fwServices/Properties.cmake b/SrcLib/core/fwServices/Properties.cmake
index 641c522..5a3ce88 100644
--- a/SrcLib/core/fwServices/Properties.cmake
+++ b/SrcLib/core/fwServices/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwActivities fwCom fwDataCamp fwRuntime )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp b/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp
index 8e37f97..547ef89 100644
--- a/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp
@@ -168,6 +168,12 @@ private:
     /// List of services started in this configuration
     ServiceContainer m_startedSrv;
 
+    /// Start ordered list of deferred services
+    std::vector<std::string> m_deferredStartSrv;
+
+    /// Update ordered list of deferred services
+    std::vector<std::string> m_deferredUpdateSrv;
+
     /// 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
diff --git a/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp b/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp
index 92eb48a..8394df9 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 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,27 +13,42 @@
 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>
 class ServiceFactoryRegistrar
 {
 public:
 
-    // parameters are intentionally not references
-    ServiceFactoryRegistrar(std::string simpl, std::string stype, std::string oimpl)
+    ServiceFactoryRegistrar(const std::string& simpl, const std::string& stype)
     {
-        ::fwServices::registry::ServiceFactory::getDefault()
-        ->addFactory( &::fwServices::factory::New< SRV_IMPL >, simpl, stype, oimpl);
+        auto factory = ::fwServices::registry::ServiceFactory::getDefault();
+        factory->addServiceFactory( &::fwServices::factory::New< SRV_IMPL >, simpl, stype);
     }
 
+    ServiceFactoryRegistrar(const std::string& simpl, const std::string& stype, const std::string& oimpl)
+    {
+        auto factory = ::fwServices::registry::ServiceFactory::getDefault();
+        factory->addServiceFactory( &::fwServices::factory::New< SRV_IMPL >, simpl, stype);
+        factory->addObjectFactory( simpl, oimpl);
+    }
 };
 
+/**
+ * @brief Helper for associating an object to a service implementation
+ */
+class ServiceObjectFactoryRegistrar
+{
+public:
+
+    ServiceObjectFactoryRegistrar(const std::string& simpl, const std::string& oimpl)
+    {
+        auto factory = ::fwServices::registry::ServiceFactory::getDefault();
+        factory->addObjectFactory( simpl, oimpl);
+    }
+};
 
 } //end namespace fwServices
 
diff --git a/SrcLib/core/fwServices/include/fwServices/macros.hpp b/SrcLib/core/fwServices/include/fwServices/macros.hpp
index c57db36..f7ceec9 100644
--- a/SrcLib/core/fwServices/include/fwServices/macros.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/macros.hpp
@@ -12,6 +12,10 @@
 
 #include <fwCore/concept_checks.hpp>
 
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/facilities/empty.hpp>
+#include <boost/preprocessor/facilities/overload.hpp>
+
 namespace fwServices
 {
 
@@ -19,14 +23,7 @@ namespace fwServices
  * @name Macros for declaring service to object association
  */
 
-//@{
-/**
- * @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 )                         \
+#define __FWSERVICES_REGISTER_MACRO( ServiceType, ServiceImpl )                                    \
     class BOOST_PP_CAT (  ServiceTypeConceptCheck, __LINE__ )                                      \
     {                                                                                              \
     public:                                                                                        \
@@ -37,14 +34,41 @@ namespace fwServices
     public:                                                                                        \
         BOOST_CONCEPT_ASSERT((::fwCore::concepts::SharedPtrTypedef< ServiceImpl >));               \
     };                                                                                             \
+    static ::fwServices::ServiceFactoryRegistrar< ServiceImpl >                                    \
+    BOOST_PP_CAT( serviceRegistrar, __LINE__) ( #ServiceImpl, #ServiceType );
+
+#define __FWSERVICES_REGISTER_OBJECT_MACRO( ServiceImpl, ServiceObject )                           \
     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 );
+    static ::fwServices::ServiceObjectFactoryRegistrar                                             \
+    BOOST_PP_CAT( serviceObjectRegistrar, __LINE__) ( #ServiceImpl, #ServiceObject );
+
+//@{
+
+#define __FWSERVICES_REGISTER_MACRO_2(ServiceImpl, ServiceObject)                                  \
+    __FWSERVICES_REGISTER_MACRO(ServiceImpl, ServiceObject)
+
+#define __FWSERVICES_REGISTER_MACRO_3(ServiceType, ServiceImpl, ServiceObject)                     \
+    __FWSERVICES_REGISTER_MACRO(ServiceType, ServiceImpl)                                          \
+    __FWSERVICES_REGISTER_OBJECT_MACRO(ServiceImpl, ServiceObject)
+
+/**
+ * @brief Service object type association including all string-based registration
+ * Associations concern Service-ObjectType are ObjectType-Service. Keys are typeid.
+ */
+#if !BOOST_PP_VARIADICS_MSVC
+
+#define fwServicesRegisterMacro(...) BOOST_PP_OVERLOAD(__FWSERVICES_REGISTER_MACRO_,__VA_ARGS__)(__VA_ARGS__)
+
+#else
+
+#define fwServicesRegisterMacro(...) \
+    BOOST_PP_CAT(BOOST_PP_OVERLOAD(__FWSERVICES_REGISTER_MACRO_,__VA_ARGS__)(__VA_ARGS__),BOOST_PP_EMPTY())
 
+#endif
 //@}
 
 }
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Add.hxx b/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
index 8ee4a40..3430412 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,8 @@
 #ifndef __FWSERVICES_OP_ADD_HXX__
 #define __FWSERVICES_OP_ADD_HXX__
 
-#include <fwData/Object.hpp>
-
-#include "fwServices/registry/ObjectService.hpp"
 #include "fwServices/IService.hpp"
+#include "fwServices/registry/ObjectService.hpp"
 
 namespace fwServices
 {
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Get.hxx b/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
index 86691cd..de5db82 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,9 @@
 #ifndef __FWSERVICES_OP_GET_HXX__
 #define __FWSERVICES_OP_GET_HXX__
 
-#include <fwData/Object.hpp>
-
-#include "fwServices/registry/ObjectService.hpp"
 #include "fwServices/IService.hpp"
 #include "fwServices/op/Add.hpp"
+#include "fwServices/registry/ObjectService.hpp"
 
 namespace fwServices
 {
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
index 4be24db..6c71beb 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #include <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/Extension.hpp>
 
-#include <fwTools/macros.hpp>
 #include <fwTools/Object.hpp>
 
 #include <map>
 
-
 namespace fwServices
 {
 
@@ -60,10 +58,10 @@ public:
      * @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,
+    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);
@@ -74,7 +72,7 @@ public:
      * @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,
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string& configId,
                                                                                       const FieldAdaptorType replaceFields =
                                                                                           FieldAdaptorType() ) const;
 
@@ -84,7 +82,7 @@ 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,
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string& configId,
                                                                                       ::fwData::Composite::csptr replaceFields )
     const;
 
@@ -92,7 +90,7 @@ public:
      * @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);
+    FWSERVICES_API std::shared_ptr< ::fwRuntime::Bundle > getBundle(const std::string& configId);
 
     /**
      * @brief Return all configurations ( standard and template ) register in the registry.
@@ -104,7 +102,7 @@ public:
      * @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;
+    FWSERVICES_API std::vector< std::string > getConfigsFromGroup(const std::string& group) const;
 
     /**
      * @brief Clear the registry.
@@ -138,10 +136,10 @@ private:
 
     /// Adapts the configuration : replace field thanks to field adaptors
     ::fwRuntime::EConfigurationElement::sptr adaptConfig( ::fwRuntime::ConfigurationElement::csptr _cfgElem,
-                                                          const FieldAdaptorType & fieldAdaptors ) const;
+                                                          const FieldAdaptorType& fieldAdaptors ) const;
 
     /// Adapts field thanks to field adaptors
-    std::string adaptField( const std::string & _str, const FieldAdaptorType & fieldAdaptors ) const;
+    std::string adaptField( const std::string& _str, const FieldAdaptorType& fieldAdaptors ) const;
 
     /// Used to protect the registry access.
     mutable ::fwCore::mt::ReadWriteMutex m_registryMutex;
@@ -162,4 +160,3 @@ private:
 
 #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
index 696342f..293b770 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig2.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig2.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/Extension.hpp>
 
-#include <fwTools/macros.hpp>
 #include <fwTools/Object.hpp>
 
 #include <map>
@@ -59,7 +58,7 @@ public:
      * @note This method is thread safe.
      */
     FWSERVICES_API void parseBundleInformation(
-        const std::vector< std::shared_ptr< ::fwRuntime::Extension > > &extensions);
+        const std::vector< std::shared_ptr< ::fwRuntime::Extension > >& extensions);
 
     /**
      * @brief Register a new config.
@@ -71,10 +70,10 @@ public:
      * @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,
+    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);
@@ -85,7 +84,7 @@ public:
      * @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,
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string& configId,
                                                                                       const FieldAdaptorType replaceFields,
                                                                                       bool autoPrefixId ) const;
 
@@ -95,7 +94,7 @@ 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,
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string& configId,
                                                                                       ::fwData::Composite::csptr replaceFields,
                                                                                       bool autoPrefixId )
     const;
@@ -104,7 +103,7 @@ public:
      * @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);
+    FWSERVICES_API std::shared_ptr< ::fwRuntime::Bundle > getBundle(const std::string& configId);
 
     /**
      * @brief Return all configurations ( standard and template ) register in the registry.
@@ -116,7 +115,7 @@ public:
      * @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;
+    FWSERVICES_API std::vector< std::string > getConfigsFromGroup(const std::string& group) const;
 
     /**
      * @brief Clear the registry.
@@ -150,11 +149,11 @@ private:
 
     /// 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;
+                                                         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;
+    std::string adaptField( const std::string& _str, const FieldAdaptorType& fieldAdaptors ) const;
 
     /// Used to protect the registry access.
     mutable ::fwCore::mt::ReadWriteMutex m_registryMutex;
@@ -175,4 +174,3 @@ private:
 
 #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 82f7227..4cb6fa0 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
 #define __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
 
-#include <map>
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppConfig.hpp"
 
 #include <fwCore/mt/types.hpp>
 
-#include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
 
-#include "fwServices/config.hpp"
+#include <fwTools/Object.hpp>
 
-#include "fwServices/registry/AppConfig.hpp"
+#include <map>
 
 namespace fwServices
 {
@@ -55,7 +53,7 @@ public:
      * @brief Get the parameters associated to extension id.
      * @note This method is thread safe.
      **/
-    FWSERVICES_API const FieldAdaptorType & getParameters( const std::string & extensionId ) const;
+    FWSERVICES_API const FieldAdaptorType& getParameters( const std::string& extensionId ) const;
 
     /**
      * @brief Clear the registry.
@@ -79,7 +77,6 @@ protected:
     /// The global instance of the app config parameters.
     static AppConfigParameters::sptr s_appConfigParameters;
 
-
 };
 
 } // namespace registry
@@ -88,4 +85,3 @@ protected:
 
 #endif // __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
 
-
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp b/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
index 24e5503..11ff09e 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 @@
 #include "fwServices/config.hpp"
 
 #include <fwRuntime/ConfigurationElement.hpp>
+
 #include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
 
 #include <map>
 
@@ -21,10 +21,7 @@ namespace fwServices
 namespace registry
 {
 
-
 /**
- * @class ServiceConfigInfo
- *
  */
 class FWSERVICES_CLASS_API ServiceConfigInfo : public ::fwCore::BaseObject
 {
@@ -47,13 +44,9 @@ public:
     ::fwRuntime::ConfigurationElement::csptr config;
 };
 
-
 /**
  * @brief This class allows to register all the service configuration which has the point extension
  *        "::fwServices::registry::ServiceConfig".
- * @class ServiceConfig
- *
- *
  *
  * Registry config like :
  * @code{.xml}
@@ -98,24 +91,24 @@ public:
      * @param config   the registered config
      * @note This method is thread safe
      */
-    FWSERVICES_API void addServiceConfigInfo( const std::string & configId,
-                                              const std::string & service,
-                                              const std::string & desc,
+    FWSERVICES_API void addServiceConfigInfo( const std::string& configId,
+                                              const std::string& service,
+                                              const std::string& desc,
                                               ::fwRuntime::ConfigurationElement::csptr config );
 
     /**
      * @brief Returns the configuration with the given id for the service with the given implementation
      * @note This method is thread safe
      */
-    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getServiceConfig( const std::string & configId,
-                                                                              const std::string &serviceImpl =
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getServiceConfig( const std::string& configId,
+                                                                              const std::string& serviceImpl =
                                                                                   "" ) const;
 
     /**
      * @brief Returns the description of the given configuration name.
      * @note This method is thread safe
      */
-    FWSERVICES_API const std::string& getConfigDesc( const std::string & configId ) const;
+    FWSERVICES_API const std::string& getConfigDesc( const std::string& configId ) const;
 
     /**
      * @brief Returns a vector containing the names of the available config for the service with the given
@@ -155,4 +148,3 @@ protected:
 
 #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 003449a..7c1210f 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp
@@ -9,16 +9,15 @@
 
 #include "fwServices/config.hpp"
 
-#include <fwTools/Object.hpp>
 #include <fwCore/mt/types.hpp>
 
 #include <fwRuntime/Bundle.hpp>
 
-#include <boost/function.hpp>
+#include <fwTools/Object.hpp>
+
 #include <boost/unordered_map.hpp>
-#include <boost/tuple/tuple.hpp>
 
-#include <map>
+#include <unordered_map>
 
 namespace fwServices
 {
@@ -29,31 +28,8 @@ namespace registry
 {
 
 /**
- * @class ServiceInfo
- *
- */
-class FWSERVICES_CLASS_API ServiceInfo : public ::fwTools::Object
-{
-public:
-    typedef ::boost::function< SPTR(::fwServices::IService)() > FactoryType;
-
-    fwCoreClassDefinitionsWithFactoryMacro( (ServiceInfo)(::fwTools::Object), (()),
-                                            std::make_shared< ServiceInfo > );
-
-    std::string serviceType;
-    std::string objectImpl;
-    /// service description.
-    std::string desc;
-
-    std::shared_ptr< ::fwRuntime::Bundle > bundle;
-
-    FactoryType factory;
-};
-
-
-/**
- * @class ServiceFactory
- *
+ * The ServiceFactory is a registrar of all the services. It allows to retrieve the informations necessary to
+ * instantiate the services.
  */
 class FWSERVICES_CLASS_API ServiceFactory : public ::fwCore::BaseObject
 {
@@ -64,7 +40,9 @@ public:
     typedef std::vector<KeyType> KeyVectorType;
     typedef std::pair<std::string, std::string> StringPair;
 
+    /// We keep boost here because std implementation does not support a pair of std::string as key
     typedef ::boost::unordered_map< StringPair, bool > SupportMapType;
+    typedef std::function< SPTR(::fwServices::IService)() > FactoryType;
 
     fwCoreClassDefinitionsWithFactoryMacro( (ServiceFactory)(::fwCore::BaseObject), (()), new ServiceFactory);
 
@@ -74,14 +52,16 @@ public:
     /// Parse bundle information to retrieve service declaration
     FWSERVICES_API void parseBundleInformation( );
 
-    FWSERVICES_API void addFactory( ServiceInfo::FactoryType _factory,
-                                    const std::string & simpl,
-                                    const std::string & stype,
-                                    const std::string & oimpl);
+    FWSERVICES_API void addServiceFactory( FactoryType _factory,
+                                           const std::string& simpl,
+                                           const std::string& stype);
 
-    FWSERVICES_API SPTR(IService) create( const std::string & _srvImpl ) const;
+    FWSERVICES_API void addObjectFactory( const std::string& simpl,
+                                          const std::string& oimpl);
 
-    FWSERVICES_API SPTR(IService) create( const std::string & _srvType, const std::string & _srvImpl ) const;
+    FWSERVICES_API SPTR(IService) create( const std::string& _srvImpl ) const;
+
+    FWSERVICES_API SPTR(IService) create( const std::string& _srvType, const std::string& _srvImpl ) const;
 
     FWSERVICES_API void clearFactory();
 
@@ -100,50 +80,56 @@ public:
     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
      * @return true if service type supported
      */
-    FWSERVICES_API bool support(const std::string & object, const std::string & srvType);
+    FWSERVICES_API bool support(const std::string& object, const std::string& srvType);
 
     /**
      * @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:
-
-    typedef std::map< KeyType, ServiceInfo::sptr > SrvRegContainer;
-
-    /// Container of service information
-    SrvRegContainer m_srvImplTosrvInfo;
-    SupportMapType m_supportMap;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_srvImplTosrvInfoMutex;
-    mutable ::fwCore::mt::ReadWriteMutex m_supportMapMutex;
-
 private:
 
+    struct ServiceInfo
+    {
+        std::string serviceType;
+        std::string objectImpl;
+        std::string desc;
+        std::shared_ptr< ::fwRuntime::Bundle > bundle;
+        FactoryType factory;
+    };
+    typedef std::unordered_map< KeyType, ServiceInfo > SrvRegContainer;
+
     /**
      * @brief print services informations
      * @warning not thread-safe
      */
-    void printInfoMap( const SrvRegContainer & src ) const;
+    void printInfoMap( const SrvRegContainer& src ) const;
 
     /**
      * @brief Trace services not declared in plugin.xml
      * @warning not thread-safe
      */
     void checkServicesNotDeclaredInPluginXml() const;
+
+    /// Container of service information
+    SrvRegContainer m_srvImplTosrvInfo;
+    SupportMapType m_supportMap;
+
+    mutable ::fwCore::mt::ReadWriteMutex m_srvImplTosrvInfoMutex;
+    mutable ::fwCore::mt::ReadWriteMutex m_supportMapMutex;
 };
 
 } // namespace registry
diff --git a/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp b/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp
index 914c7b4..1d98a7e 100644
--- a/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp
@@ -228,8 +228,6 @@ fwData::Object::sptr AppConfigManager2::findObject(const std::string& uid, 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())
@@ -243,8 +241,7 @@ fwData::Object::sptr AppConfigManager2::findObject(const std::string& uid, const
 
         SLM_ASSERT(this->msgHead() + "Object '" + uid + "' has not been found" + errMsgTail,
                    itDeferredObj != m_deferredObjects.end());
-        obj      = itDeferredObj->second.m_object;
-        deferred = true;
+        obj = itDeferredObj->second.m_object;
     }
     return obj;
 }
@@ -374,9 +371,10 @@ void AppConfigManager2::processStartItems()
             {
                 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.");
+                    m_deferredStartSrv.push_back(uid);
+                    SLM_INFO( this->msgHead() + "Start for service '" + uid + "' will be deferred since at least one "
+                              "of its data is missing. With DEBUG log level, you can know which are the "
+                              "missing objects.");
                 }
                 else
                 {
@@ -384,14 +382,17 @@ void AppConfigManager2::processStartItems()
                                "', but it does not exist.");
                 }
             }
+            else
+            {
+                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);
 
-            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());
 
-            futures.push_back(srv->start());
+                m_startedSrv.push_back(srv);
+            }
 
-            m_startedSrv.push_back(srv);
         }
     }
     ::boost::wait_for_all(futures.begin(), futures.end());
@@ -414,9 +415,10 @@ void AppConfigManager2::processUpdateItems()
             {
                 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.");
+                    m_deferredUpdateSrv.push_back(uid);
+                    SLM_INFO( this->msgHead() + "Update for service '" + uid + "'will be deferred since at least one "
+                              "of its data is missing. With DEBUG log level, you can know which are the "
+                              "missing objects.");
                 }
                 else
                 {
@@ -424,12 +426,14 @@ void AppConfigManager2::processUpdateItems()
                                "', but it does not exist.");
                 }
             }
+            else
+            {
+                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);
 
-            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());
+                futures.push_back(srv->update());
+            }
         }
     }
 
@@ -818,7 +822,8 @@ void AppConfigManager2::addObjects(fwData::Object::sptr obj, const std::string&
         }
     }
 
-    std::vector< ::fwServices::IService::SharedFutureType > futures;
+    std::unordered_map<std::string, ::fwServices::IService::sptr> newServices;
+
     for(const auto& itService : servicesCfg)
     {
         auto srvCfg = itService;
@@ -875,15 +880,11 @@ void AppConfigManager2::addObjects(fwData::Object::sptr obj, const std::string&
         // 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);
+            // Create the service
+            newServices.emplace(std::make_pair(uid, this->createService(*srvCfg)));
 
             // Debug message
-            SLM_INFO( this->msgHead() + "Service '" + uid + "' has been automatically started because its "
+            SLM_INFO( this->msgHead() + "Service '" + uid + "' has been automatically created because its "
                       "objects are all available.");
         }
         else if(reconnect)
@@ -897,6 +898,40 @@ void AppConfigManager2::addObjects(fwData::Object::sptr obj, const std::string&
         }
     }
 
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+
+    // Start services according to the order given in the configuration
+    for(const auto& uid : m_deferredStartSrv)
+    {
+        auto itSrv = newServices.find(uid);
+        if( itSrv != newServices.end())
+        {
+            futures.push_back(itSrv->second->start());
+            m_startedSrv.push_back(itSrv->second);
+
+            // Debug message
+            SLM_INFO( this->msgHead() + "Service '" + uid + "' has been automatically started because its "
+                      "objects are all available.");
+        }
+    }
+
+    ::boost::wait_for_all(futures.begin(), futures.end());
+    futures.clear();
+
+    // Update services according to the order given in the configuration
+    for(const auto& uid : m_deferredUpdateSrv)
+    {
+        auto itSrv = newServices.find(uid);
+        if( itSrv != newServices.end())
+        {
+            futures.push_back(itSrv->second->update());
+
+            // Debug message
+            SLM_INFO( this->msgHead() + "Service '" + uid + "' has been automatically update because its "
+                      "objects are all available.");
+        }
+    }
+
     ::boost::wait_for_all(futures.begin(), futures.end());
 }
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
index 7dc7f1f..232233e 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/ObjectService.hpp"
+
 #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 <fwData/Object.hpp>
-
 #include <fwCore/LogicStamp.hpp>
 #include <fwCore/util/LazyInstantiator.hpp>
 
@@ -32,6 +31,8 @@ namespace fwServices
 namespace OSR
 {
 
+//------------------------------------------------------------------------------
+
 ::fwServices::registry::ObjectService::sptr get()
 {
     return ::fwCore::util::LazyInstantiator< ::fwServices::registry::ObjectService >::getInstance();
@@ -90,7 +91,7 @@ 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::IService::AccessType access, ::fwServices::IService::sptr service )
 {
     ::fwServices::OSR::get()->registerService(obj, objKey, access, service);
 }
@@ -144,7 +145,6 @@ bool isRegistered(const ::fwServices::IService::KeyType& objKey,
 
 } //namespace OSR
 
-
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
index c6708c6..64d4ab9 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
@@ -4,8 +4,10 @@
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <functional>
-#include <vector>
+#include "fwServices/registry/ServiceFactory.hpp"
+
+#include "fwServices/IService.hpp"
+#include "fwServices/registry/ActiveWorkers.hpp"
 
 #include <fwCore/util/LazyInstantiator.hpp>
 
@@ -16,9 +18,8 @@
 #include <fwRuntime/helper.hpp>
 #include <fwRuntime/profile/Profile.hpp>
 
-#include "fwServices/IService.hpp"
-#include "fwServices/registry/ActiveWorkers.hpp"
-#include "fwServices/registry/ServiceFactory.hpp"
+#include <functional>
+#include <vector>
 
 namespace fwServices
 {
@@ -45,11 +46,10 @@ void ServiceFactory::parseBundleInformation()
     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;
 
         for(ConfigurationType cfgElt :  cfgEltVec)
         {
@@ -77,29 +77,15 @@ void ServiceFactory::parseBundleInformation()
         }
         SLM_ASSERT("Missing type element.", !type.empty());
         SLM_ASSERT("Missing service element.", !service.empty());
-        SLM_ASSERT("Missing object element.", !object.empty());
-
-        ServiceInfo::sptr info = ServiceInfo::New();
-        info->serviceType = type;
-        info->objectImpl  = object;
-        info->desc        = desc;
 
-        info->bundle = cfgEltVec[0]->getBundle();
-        SLM_ASSERT("Bundle not find.", info->bundle );
+        ServiceInfo info;
+        info.serviceType = type;
+        info.objectImpl  = object;
+        info.desc        = desc;
+        info.bundle      = cfgEltVec[0]->getBundle();
+        SLM_ASSERT("Bundle not find.", info.bundle );
 
-        bundleInfoMap[ service] = info;
-    }
-    // Verify object
-    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 )");
-
-        }
+        bundleInfoMap.emplace(std::make_pair(service, info));
     }
 
 #if SPYLOG_LEVEL >= 5
@@ -109,34 +95,32 @@ void ServiceFactory::parseBundleInformation()
 
     ::fwCore::mt::ReadToWriteLock lock(m_srvImplTosrvInfoMutex);
     // Merge data info
-    for(SrvRegContainer::value_type bundle :  bundleInfoMap)
+    for(SrvRegContainer::value_type bundle : bundleInfoMap)
     {
-
         SrvRegContainer::iterator iter = m_srvImplTosrvInfo.find( bundle.first );
 
         if ( iter != m_srvImplTosrvInfo.end() )
         {
-            OSLM_DEBUG("Have already information (from register macro) about this service ( "
-                       << bundle.first << " )." );
+            OSLM_DEBUG("Have already information (from register macro) about this service ( "<< bundle.first << " )." );
 
-            ServiceInfo::sptr info       = iter->second;
-            ServiceInfo::sptr infoBundle = bundle.second;
+            ServiceInfo& info       = iter->second;
+            ServiceInfo& 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 );
+                       infoBundle.serviceType == info.serviceType );
             SLM_ASSERT("Try to add bundle, but this srv ("
                        << bundle.first << ")is already register and has not the same oimpl. ( "
-                       << infoBundle->objectImpl <<" != "<< info->objectImpl <<" )",
-                       infoBundle->objectImpl == info->objectImpl );
+                       << 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
         {
             ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
-            m_srvImplTosrvInfo[ bundle.first ] = bundle.second;
+            m_srvImplTosrvInfo.emplace(std::make_pair(bundle.first, bundle.second));
         }
 
     }
@@ -150,7 +134,7 @@ void ServiceFactory::parseBundleInformation()
 
 //-----------------------------------------------------------------------------
 
-IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
+IService::sptr ServiceFactory::create( const std::string& _srvImpl ) const
 {
     IService::sptr service;
 
@@ -160,37 +144,37 @@ IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
     OSLM_ASSERT("The service called '" << _srvImpl << "' does not exist in the ServiceFactory ",
                 iter != m_srvImplTosrvInfo.end() );
 
-    ServiceInfo::sptr info = iter->second;
+    const ServiceInfo& info = iter->second;
 
     OSLM_DEBUG("SR creates a new service ( classname = " << _srvImpl << " )");
 
-    if ( info->factory )
+    if ( info.factory )
     {
-        service = info->factory();
+        service = info.factory();
     }
     else
     {
         OSLM_ASSERT( "A bundle must declare the factory named"
                      << _srvImpl
                      <<", the service declaration might be missing (or misspelled) in a bundle plugin.",
-                     info->bundle );
-        OSLM_ASSERT( "The bundle '" + info->bundle->getIdentifier() + "' is already loaded and the factory '"
+                     info.bundle );
+        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() );
+                     "in a .cpp file.", !info.bundle->isStarted() );
 
         lock.unlock(); // bundle->start() may trigger calls to addFactory
-        info->bundle->start();
+        info.bundle->start();
         lock.lock();
 
         ::fwRuntime::profile::getCurrentProfile()->setup();
 
         FW_RAISE_EXCEPTION_IF(
-            ::fwData::Exception( "After loading the bundle " + info->bundle->getIdentifier() + " , factory " + _srvImpl
+            ::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 );
+            !info.factory );
 
-        service = info->factory();
+        service = info.factory();
     }
 
     // Setup worker here, this is a better place than the constructor
@@ -204,21 +188,20 @@ IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
 
 //-----------------------------------------------------------------------------
 
-IService::sptr ServiceFactory::create( const std::string & _srvType, const std::string & _srvImpl ) const
+IService::sptr ServiceFactory::create( const std::string& _srvType, const std::string& _srvImpl ) const
 {
 
 #ifdef _DEBUG
     {
         ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
 
-        OSLM_ASSERT("The service called " << _srvImpl << " does not exist in the ServiceFactory."
-                    ,
+        OSLM_ASSERT("The service called " << _srvImpl << " does not exist in the ServiceFactory.",
                     m_srvImplTosrvInfo.find( _srvImpl ) != m_srvImplTosrvInfo.end() );
 
         OSLM_ASSERT(
             "Conflincting types were defined for this service, "
-            << _srvType << " != " << m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType,
-            _srvType == m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType);
+            << _srvType << " != " << m_srvImplTosrvInfo.find( _srvImpl )->second.serviceType,
+            _srvType == m_srvImplTosrvInfo.find( _srvImpl )->second.serviceType);
     }
 #endif //_DEBUG
 
@@ -228,56 +211,67 @@ 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)
+void ServiceFactory::addServiceFactory( FactoryType _factory,
+                                        const std::string& simpl,
+                                        const std::string& stype)
 {
-    OSLM_DEBUG( "New service registering : "
-                << " simpl =" << simpl
-                << " stype=" << stype
-                << " oimpl=" << oimpl
-                );
+    SLM_DEBUG("New service registering : simpl =" + simpl + " stype=" + stype);
 
     ::fwCore::mt::ReadToWriteLock lock(m_srvImplTosrvInfoMutex);
     SrvRegContainer::iterator iter = m_srvImplTosrvInfo.find( simpl );
 
-    ServiceInfo::sptr info;
-
     if ( iter != m_srvImplTosrvInfo.end() )
     {
-        OSLM_DEBUG("Have already information about this service ( " << simpl << " )." );
-        info = iter->second;
+        SLM_DEBUG("Have already information about this service ( " + simpl + " )." );
+        ServiceInfo& 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 <<" )",
-                    stype == info->serviceType );
-        OSLM_ASSERT("Try to add factory, but this srv ( "
-                    << simpl << " ) is already register and has not the same oimpl. ( "
-                    << oimpl << " != " << info->objectImpl <<" )",
-                    oimpl == info->objectImpl );
+                    << stype << " != " << info.serviceType <<" )",
+                    stype == info.serviceType );
 
         ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
-        info->factory = _factory;
+        info.factory = _factory;
     }
     else
     {
-        OSLM_DEBUG("Add new service factory in registry ( " << simpl << " )." );
+        SLM_DEBUG("Add new service factory in registry ( " + simpl + " )." );
         ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
-        info              = m_srvImplTosrvInfo[simpl] = ServiceInfo::New();
-        info->serviceType = stype;
-        info->objectImpl  = oimpl;
-        info->factory     = _factory;
+        ServiceInfo info;
+        info.serviceType = stype;
+        info.factory     = _factory;
+        m_srvImplTosrvInfo.emplace(std::make_pair(simpl, info));
     }
-
 }
 
+//-----------------------------------------------------------------------------
+
+void ServiceFactory::addObjectFactory(const std::string& simpl, const std::string& oimpl)
+{
+    SLM_DEBUG("New object oimpl=" + oimpl + "registering to service: simpl =" + simpl);
+
+    ::fwCore::mt::ReadToWriteLock lock(m_srvImplTosrvInfoMutex);
+    SrvRegContainer::iterator iter = m_srvImplTosrvInfo.find( simpl );
+
+    OSLM_ASSERT("Try to associate an object to a service factory, but this srv is not yet registered.",
+                iter != m_srvImplTosrvInfo.end());
+
+    if ( iter != m_srvImplTosrvInfo.end() )
+    {
+        ServiceInfo& info = iter->second;
+        SLM_ASSERT("Try to add factory, but this srv ( " + simpl + " ) is already registered "
+                   "and has not the same oimpl. ( " + oimpl + " != " + info.objectImpl + ")",
+                   info.objectImpl.empty() || oimpl == info.objectImpl );
+
+        ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
+        info.objectImpl = oimpl;
+    }
+}
 
 //-----------------------------------------------------------------------------
 
-void ServiceFactory::printInfoMap( const SrvRegContainer & src ) const
+void ServiceFactory::printInfoMap( const SrvRegContainer& src ) const
 {
     // not thread-safe
 
@@ -285,15 +279,15 @@ void ServiceFactory::printInfoMap( const SrvRegContainer & src ) const
     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("  - 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 = " <<  srvReg.second.bundle->getIdentifier(), 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 );
+                      <<  srvReg.second.factory()->getClassname(), srvReg.second.factory );
+        OSLM_DEBUG_IF("  - name after creation = ( no factory registered )", !srvReg.second.factory );
     }
 }
 
@@ -305,7 +299,7 @@ void ServiceFactory::checkServicesNotDeclaredInPluginXml() const
     //Print information
     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." );
         }
@@ -330,9 +324,9 @@ std::vector< std::string > ServiceFactory::getImplementationIdFromObjectAndType(
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     for(SrvRegContainer::value_type srv :  m_srvImplTosrvInfo)
     {
-        ServiceInfo::sptr srvInfo = srv.second;
-        if(srvInfo->serviceType == type
-           && (srvInfo->objectImpl == object || srvInfo->objectImpl == "::fwData::Object") )
+        const ServiceInfo& srvInfo = srv.second;
+        if(srvInfo.serviceType == type
+           && (srvInfo.objectImpl == object || srvInfo.objectImpl == "::fwData::Object") )
         {
             serviceImpl.push_back(srv.first);
         }
@@ -354,23 +348,23 @@ std::string ServiceFactory::getDefaultImplementationIdFromObjectAndType( const s
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     for( SrvRegContainer::value_type srv :  m_srvImplTosrvInfo )
     {
-        ServiceInfo::sptr srvInfo = srv.second;
-        if ( srvInfo->serviceType == type )
+        const ServiceInfo& srvInfo = srv.second;
+        if ( srvInfo.serviceType == type )
         {
-            if ( srvInfo->objectImpl == object )
+            if ( srvInfo.objectImpl == object )
             {
                 OSLM_ASSERT("Method has already found a specific ("
                             << serviceImpl <<" != " << srv.first
-                            << ") service for the object " << srvInfo->objectImpl << ".",
+                            << ") service for the object " << srvInfo.objectImpl << ".",
                             !specificImplIsFound );
 
                 specificImplIsFound = true;
                 serviceImpl         = srv.first;
             }
-            else if ( srvInfo->objectImpl == "::fwData::Object" )
+            else if ( srvInfo.objectImpl == "::fwData::Object" )
             {
                 OSLM_ASSERT("Method has already found a generic service for the object ("
-                            << srvInfo->objectImpl << ").",
+                            << srvInfo.objectImpl << ").",
                             !genericImplIsFound );
 
                 genericImplIsFound = true;
@@ -395,7 +389,7 @@ std::string ServiceFactory::getObjectImplementation(const std::string& srvImpl)
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     SrvRegContainer::const_iterator iter = m_srvImplTosrvInfo.find( srvImpl );
     SLM_ASSERT("The service " << srvImpl << " is not found.", iter != m_srvImplTosrvInfo.end());
-    objImpl = iter->second->objectImpl;
+    objImpl = iter->second.objectImpl;
     return objImpl;
 }
 
@@ -407,13 +401,13 @@ std::string ServiceFactory::getServiceDescription(const std::string& srvImpl) co
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     SrvRegContainer::const_iterator iter = m_srvImplTosrvInfo.find( srvImpl );
     SLM_ASSERT("The service " << srvImpl << " is not found.", iter != m_srvImplTosrvInfo.end());
-    srvDescription = iter->second->desc;
+    srvDescription = iter->second.desc;
     return srvDescription;
 }
 
 //-----------------------------------------------------------------------------
 
-bool ServiceFactory::checkServiceValidity(const std::string & objectClassName, const std::string & srvImpl) const
+bool ServiceFactory::checkServiceValidity(const std::string& objectClassName, const std::string& srvImpl) const
 {
     bool isValid = true;
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
@@ -421,15 +415,15 @@ bool ServiceFactory::checkServiceValidity(const std::string & objectClassName, c
     isValid &= ( iter != m_srvImplTosrvInfo.end() );
     if (isValid)
     {
-        ServiceInfo::sptr srvInfo = iter->second;
-        isValid &= (srvInfo->objectImpl == "::fwData::Object" || srvInfo->objectImpl == objectClassName);
+        const ServiceInfo& srvInfo = iter->second;
+        isValid &= (srvInfo.objectImpl == "::fwData::Object" || srvInfo.objectImpl == objectClassName);
     }
     return isValid;
 }
 
 //-----------------------------------------------------------------------------
 
-bool ServiceFactory::support(const std::string &object, const std::string &srvType, const std::string &srvImpl) const
+bool ServiceFactory::support(const std::string& object, const std::string& srvType, const std::string& srvImpl) const
 {
     bool isSupported = true;
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
@@ -437,16 +431,16 @@ bool ServiceFactory::support(const std::string &object, const std::string &srvTy
     isSupported &= ( iter != m_srvImplTosrvInfo.end());
     if (isSupported)
     {
-        ServiceInfo::sptr srvInfo = iter->second;
-        isSupported &= (srvInfo->objectImpl == "::fwData::Object" || srvInfo->objectImpl == object);
-        isSupported &= (srvInfo->serviceType == srvType);
+        const ServiceInfo& srvInfo = iter->second;
+        isSupported &= (srvInfo.objectImpl == "::fwData::Object" || srvInfo.objectImpl == object);
+        isSupported &= (srvInfo.serviceType == srvType);
     }
     return isSupported;
 }
 
 //-----------------------------------------------------------------------------
 
-bool ServiceFactory::support(const std::string & object, const std::string & srvType)
+bool ServiceFactory::support(const std::string& object, const std::string& srvType)
 {
     bool isSupported = false;
     SupportMapType::key_type key(object, srvType);
@@ -461,9 +455,9 @@ bool ServiceFactory::support(const std::string & object, const std::string & srv
         ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
         for(SrvRegContainer::value_type srv :  m_srvImplTosrvInfo)
         {
-            ServiceInfo::sptr srvInfo = srv.second;
-            if(srvInfo->serviceType == srvType
-               && (srvInfo->objectImpl == object || srvInfo->objectImpl == "::fwData::Object") )
+            const ServiceInfo& srvInfo = srv.second;
+            if(srvInfo.serviceType == srvType
+               && (srvInfo.objectImpl == object || srvInfo.objectImpl == "::fwData::Object") )
             {
                 isSupported = true;
                 break;
diff --git a/SrcLib/core/fwServices/test/Properties.cmake b/SrcLib/core/fwServices/test/Properties.cmake
index 8c8d400..053597f 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 fwCom fwThread)
-set( REQUIREMENTS servicesReg )
-set(CPPUNITTEST_OPTIONS WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+set( DEPENDENCIES fwCore fwTest fwTools fwRuntime fwData fwServices fwCom fwThread )
+set( REQUIREMENTS dataReg servicesReg )
+set( CPPUNITTEST_OPTIONS BUNDLE fwServices WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
diff --git a/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp b/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp
index 7338df7..04909a6 100644
--- a/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp
@@ -7,12 +7,12 @@
 #ifndef __FWSERVICES_UT_CONFIGPARSERTEST_HPP__
 #define __FWSERVICES_UT_CONFIGPARSERTEST_HPP__
 
+#include <fwServices/macros.hpp>
+
 #include <fwCore/base.hpp>
 
 #include <fwRuntime/EConfigurationElement.hpp>
 
-#include <fwServices/macros.hpp>
-
 #include <cppunit/extensions/HelperMacros.h>
 
 
@@ -30,7 +30,6 @@ class ConfigParserTest : public CPPUNIT_NS::TestFixture
 {
 CPPUNIT_TEST_SUITE( ConfigParserTest );
 CPPUNIT_TEST( testObjectCreationWithConfig );
-CPPUNIT_TEST( testBuildComposite );
 CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -41,15 +40,9 @@ public:
     /// 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
diff --git a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
index 7efcbf4..79f5f97 100644
--- a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include <fwServices/IService.hpp>
 
 #include <fwCom/Signals.hpp>
-#include <fwData/Object.hpp>
 
 #include <boost/chrono/duration.hpp>
 
@@ -59,7 +58,9 @@ public:
     {
     }
 
-    void cachedDeepCopy( const Object::csptr& _source, DeepCopyCacheType &cache )
+    //------------------------------------------------------------------------------
+
+    void cachedDeepCopy( const Object::csptr& _source, DeepCopyCacheType& cache )
     {
     }
 };
@@ -69,7 +70,7 @@ public:
 class IBasicTest : public ::fwServices::IService
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (IBasicTest)(::fwServices::IService) );
+    fwCoreServiceClassDefinitionsMacro( (IBasicTest)(::fwServices::IService) );
 };
 
 class SBasicTest : public IBasicTest,
@@ -77,7 +78,7 @@ class SBasicTest : public IBasicTest,
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SBasicTest)(IBasicTest) );
+    fwCoreServiceClassDefinitionsMacro( (SBasicTest)(IBasicTest) );
 
     bool m_updateFinished;
     bool m_swapFinished;
@@ -86,6 +87,8 @@ public:
 
 protected:
 
+    //------------------------------------------------------------------------------
+
     virtual void configuring() throw ( ::fwTools::Failed )
     {
     }
@@ -101,7 +104,7 @@ class SReaderTest : public IBasicTest
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SReaderTest)(IBasicTest) );
+    fwCoreServiceClassDefinitionsMacro( (SReaderTest)(IBasicTest) );
 
     SReaderTest()
     {
@@ -109,15 +112,23 @@ 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 )
     {
     }
@@ -132,7 +143,7 @@ public:
 
     typedef ::fwCom::Signal< void () > ChangedSignalType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SReader2Test)(IBasicTest) );
+    fwCoreServiceClassDefinitionsMacro( (SReader2Test)(IBasicTest) );
 
     SReader2Test();
 
@@ -140,15 +151,23 @@ 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 )
     {
     }
@@ -164,8 +183,7 @@ class SShowTest : public IBasicTest,
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SShowTest)(IBasicTest) );
-
+    fwCoreServiceClassDefinitionsMacro( (SShowTest)(IBasicTest) );
 
     SShowTest();
 
@@ -179,15 +197,23 @@ 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 )
     {
     }
@@ -205,7 +231,7 @@ class SShow2Test : public IBasicTest,
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SShow2Test)(IBasicTest) );
+    fwCoreServiceClassDefinitionsMacro( (SShow2Test)(IBasicTest) );
 
     static const ::fwCom::Slots::SlotKeyType s_UPDATE_BUFFER_SLOT;
 
@@ -215,15 +241,23 @@ 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 )
     {
     }
diff --git a/SrcLib/core/fwServices/test/tu/include/TestService.hpp b/SrcLib/core/fwServices/test/tu/include/TestService.hpp
index 3f6b7cf..a3718ac 100644
--- a/SrcLib/core/fwServices/test/tu/include/TestService.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/TestService.hpp
@@ -29,11 +29,16 @@ class TestService : public ::fwServices::IService
 
 public:
 
+    static unsigned int s_START_COUNTER;
+    static unsigned int s_UPDATE_COUNTER;
+
     fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) );
     TestService() throw() :
         m_isUpdated(false),
         m_isUpdated2(false),
-        m_isUpdatedMessage(false)
+        m_isUpdatedMessage(false),
+        m_startOrder(0),
+        m_updateOrder(0)
     {
     }
 
@@ -44,15 +49,11 @@ public:
     virtual void configuring() throw( ::fwTools::Failed ) final
     {
     }
-    virtual void starting() throw(::fwTools::Failed)override
-    {
-    }
+    virtual void starting() throw(::fwTools::Failed);
     virtual void stopping() throw(::fwTools::Failed) final
     {
     }
-    virtual void updating() throw(::fwTools::Failed)override
-    {
-    }
+    virtual void updating() throw(::fwTools::Failed);
     virtual void info(std::ostream& _sstream )
     {
         _sstream << "TestService";
@@ -70,7 +71,6 @@ public:
         return m_isUpdated2;
     }
 
-
     /// return true if the service is updated with update(msg) method
     bool getIsUpdatedMessage() const
     {
@@ -89,10 +89,22 @@ public:
         m_isUpdated2 = false;
     }
 
+    unsigned int getStartOrder() const
+    {
+        return m_startOrder;
+    }
+
+    unsigned int getUpdateOrder() const
+    {
+        return m_updateOrder;
+    }
+
 protected:
     bool m_isUpdated;
-    bool m_isUpdatedMessage;
     bool m_isUpdated2;
+    bool m_isUpdatedMessage;
+    unsigned int m_startOrder;
+    unsigned int m_updateOrder;
 };
 
 /**
@@ -107,17 +119,15 @@ public:
     /// 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;
+    typedef ::fwCom::Signal< void (const 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);
     }
     //-------------------------------------------------------------------------
@@ -128,11 +138,13 @@ public:
     //-------------------------------------------------------------------------
     virtual void starting() throw(::fwTools::Failed) final
     {
+        TestService::starting();
     }
 
     //-------------------------------------------------------------------------
     virtual void updating() throw(::fwTools::Failed)override
     {
+        TestService::updating();
         m_isUpdated = true;
     }
 
@@ -150,12 +162,6 @@ public:
     }
 
     //-------------------------------------------------------------------------
-    void receiveMsg(std::string msg)
-    {
-        m_isUpdatedMessage = true;
-    }
-
-    //-------------------------------------------------------------------------
     virtual void info(std::ostream& _sstream ) override
     {
         _sstream << "TestServiceImplementation";
diff --git a/SrcLib/core/fwServices/test/tu/include/TestServices.hpp b/SrcLib/core/fwServices/test/tu/include/TestServices.hpp
index cf9d1c0..45559bf 100644
--- a/SrcLib/core/fwServices/test/tu/include/TestServices.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/TestServices.hpp
@@ -7,10 +7,10 @@
 #ifndef __FWSERVICES_UT_TESTSERVICES_HPP__
 #define __FWSERVICES_UT_TESTSERVICES_HPP__
 
-#include <fwCore/base.hpp>
-
 #include <fwServices/macros.hpp>
 
+#include <fwCore/base.hpp>
+
 #include <cppunit/extensions/HelperMacros.h>
 
 
@@ -22,16 +22,16 @@ namespace ut
 /**
  * @brief   Service type for test.
  */
-class TestService : public ::fwServices::IService
+class TestConfigService : public ::fwServices::IService
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) );
-    TestService() throw()
+    fwCoreServiceClassDefinitionsMacro ( (TestConfigService)(::fwServices::IService) );
+    TestConfigService() throw()
         :   m_isUpdated(false)
     {
     }
 
-    virtual ~TestService() throw()
+    virtual ~TestConfigService() throw()
     {
     }
 
@@ -56,51 +56,20 @@ protected:
     }
     virtual void info( std::ostream& _sstream )
     {
-        _sstream << "TestService";
+        _sstream << "TestConfigService";
     }
 
     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
+class TestServiceImplementationImage : public TestConfigService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationImage)(::fwServices::ut::TestService) );
+    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationImage)(::fwServices::ut::TestConfigService) );
     TestServiceImplementationImage() throw()
     {
     }
diff --git a/SrcLib/core/fwServices/test/tu/rc/profile.xml b/SrcLib/core/fwServices/test/tu/rc/profile.xml
new file mode 100644
index 0000000..513ea2d
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/rc/profile.xml
@@ -0,0 +1,8 @@
+<profile name="fwServicesTest" version="0.1">
+
+    <activate id="dataReg" version="0-1" />
+    <activate id="servicesReg" version="0-1" />
+
+    <start id="dataReg" />
+
+</profile>
diff --git a/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp b/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp
index 291198c..9c1ae02 100644
--- a/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp
@@ -6,6 +6,10 @@
 
 #include "AppConfig2Test.hpp"
 
+#include "fwServices/registry/ActiveWorkers.hpp"
+#include "fwServices/registry/AppConfig2.hpp"
+#include "fwServices/registry/ObjectService.hpp"
+
 #include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
 
@@ -15,10 +19,6 @@
 #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>
@@ -41,7 +41,7 @@ namespace ut
     BOOST_PP_CAT(timeStamp, __LINE__).modified(); \
     while(!(cond) && !BOOST_PP_CAT(timeStamp, __LINE__).periodExpired()) \
     { \
-        std::this_thread::sleep_for( std::chrono::milliseconds(1)); \
+        std::this_thread::sleep_for( std::chrono::milliseconds(10)); \
     }
 
 #define WAIT_SERVICE_STARTED(srv)  \
@@ -285,19 +285,26 @@ void AppConfig2Test::startStopTest()
         }
 
         // Put everything back
+        ::fwServices::ut::TestService::s_START_COUNTER  = 0;
+        ::fwServices::ut::TestService::s_UPDATE_COUNTER = 0;
         ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
         WAIT_SERVICE_STARTED("TestService5Uid");
 
-        // Now the service should have been started automatically
+        // Now the service should have been started automatically, check start order as well
         {
             auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
-            auto srv5   = ::fwServices::IService::dynamicCast(gnsrv5);
+            auto srv5   = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv5);
             CPPUNIT_ASSERT(srv5 != nullptr);
             CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+            CPPUNIT_ASSERT_EQUAL(0u, srv5->getStartOrder());
+            CPPUNIT_ASSERT_EQUAL(1u, srv5->getUpdateOrder());
 
             // Test as well service 4, just to be sure
             auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            auto srv4   = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv4);
             CPPUNIT_ASSERT(gnsrv4 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(1u, srv4->getStartOrder());
+            CPPUNIT_ASSERT_EQUAL(0u, srv4->getUpdateOrder());
         }
     }
 
@@ -1233,7 +1240,7 @@ void AppConfig2Test::concurentAccessToAppConfig2Test()
     dataService3->setAttributeValue( "key", "data" );
     dataService3->setAttributeValue( "uid", "data1Id" );
 
-    // Service #4
+    // Service #4 with one deferred data
     std::shared_ptr< ::fwRuntime::EConfigurationElement > service4 = cfg->addConfigurationElement("service");
     service4->setAttributeValue( "uid", "TestService4Uid" );
     service4->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
@@ -1243,7 +1250,7 @@ void AppConfig2Test::concurentAccessToAppConfig2Test()
     dataService4->setAttributeValue( "key", "data" );
     dataService4->setAttributeValue( "uid", "data2Id" );
 
-    // Service #5
+    // Service #5 with two deferred data
     std::shared_ptr< ::fwRuntime::EConfigurationElement > service5 = cfg->addConfigurationElement("service");
     service5->setAttributeValue( "uid", "TestService5Uid" );
     service5->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
@@ -1265,9 +1272,13 @@ void AppConfig2Test::concurentAccessToAppConfig2Test()
     // Start method from object's services
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService5Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService4Uid" );
 
     // Update method from object's services
     cfg->addConfigurationElement("update")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("update")->setAttributeValue( "uid", "TestService4Uid" );
+    cfg->addConfigurationElement("update")->setAttributeValue( "uid", "TestService5Uid" );
 
     return cfg;
 }
@@ -1370,6 +1381,8 @@ fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildAutoConnectTestConfig
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService2Uid" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService3Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService4Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService5Uid" );
 
     return cfg;
 }
@@ -1484,6 +1497,7 @@ fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildConnectionConfig()
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService2Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService3Uid" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService4Uid" );
 
     return cfg;
@@ -1599,6 +1613,7 @@ fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildOptionalKeyConfig()
     // Start method from object's services
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService5Uid" );
 
     return cfg;
 }
@@ -1700,6 +1715,8 @@ fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildKeyGroupConfig()
 
     // Start method from object's services
     cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService2Uid" );
 
     return cfg;
 }
diff --git a/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp b/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
index 5e669bb..7ccdcb8 100644
--- a/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
@@ -6,10 +6,10 @@
 
 #include "AppConfigTest.hpp"
 
-#include <fwData/String.hpp>
-
 #include <fwServices/registry/AppConfig.hpp>
 
+#include <fwData/String.hpp>
+
 #include <fwTest/helper/Thread.hpp>
 
 // Registers the fixture into the 'registry'
@@ -122,14 +122,14 @@ void AppConfigTest::concurentAccessToAppConfigTest()
     // Object's service A
     std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
     serviceA->setAttributeValue( "uid", "${GENERIC_UID}_myTestService1" );
-    serviceA->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceA->setAttributeValue( "type", "::fwServices::ut::TestConfigService" );
     serviceA->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
     serviceA->setAttributeValue( "autoConnect", "no" );
 
     // Object's service B
     std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
     serviceB->setAttributeValue( "uid", "${UID_SERVICE2}" );
-    serviceB->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceB->setAttributeValue( "type", "::fwServices::ut::TestConfigService" );
     serviceB->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
     serviceB->setAttributeValue( "autoConnect", "no" );
 
diff --git a/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp b/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp
index 98aa072..f36fe59 100644
--- a/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp
@@ -6,16 +6,16 @@
 
 #include "ConfigParserTest.hpp"
 
-#include <fwData/Composite.hpp>
-#include <fwData/Image.hpp>
-#include <fwData/Mesh.hpp>
+#include "TestServices.hpp"
 
-#include <fwServices/AppConfigManager.hpp>
+#include <fwServices/AppConfigManager2.hpp>
 #include <fwServices/IService.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
 
-#include "TestServices.hpp"
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Mesh.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ConfigParserTest );
@@ -51,7 +51,7 @@ void ConfigParserTest::testObjectCreationWithConfig()
     ::fwRuntime::ConfigurationElement::sptr config = buildObjectConfig();
 
     // Create the object and its services from the configuration
-    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
+    ::fwServices::AppConfigManager2::sptr configManager = ::fwServices::AppConfigManager2::New();
     configManager->::fwServices::IAppConfigManager::setConfig( config );
     configManager->create();
     auto image = ::fwData::Image::dynamicCast(configManager->getConfigRoot());
@@ -60,7 +60,7 @@ void ConfigParserTest::testObjectCreationWithConfig()
     CPPUNIT_ASSERT_EQUAL(objectUUID, image->getID());
 
     // Test if object's service is created
-    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwServices::ut::TestService"));
+    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwServices::ut::TestConfigService"));
 
     // Test start services
     configManager->start();
@@ -69,8 +69,9 @@ void ConfigParserTest::testObjectCreationWithConfig()
 
     // 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() ==
+    CPPUNIT_ASSERT( ::fwServices::ut::TestConfigService::dynamicCast( ::fwServices::get(serviceUUID1) )->getIsUpdated() );
+    CPPUNIT_ASSERT( ::fwServices::ut::TestConfigService::dynamicCast( ::fwServices::get(
+                                                                          serviceUUID2) )->getIsUpdated() ==
                     false );
 
     // Test stop services
@@ -83,75 +84,28 @@ void ConfigParserTest::testObjectCreationWithConfig()
 
 //------------------------------------------------------------------------------
 
-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()
 {
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
     // 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");
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "objectUUID");
+    objCfg->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" );
+    serviceA->setAttributeValue( "type", "::fwServices::ut::TestServiceImplementationImage" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataServiceA = serviceA->addConfigurationElement("in");
+    dataServiceA->setAttributeValue( "key", "data" );
+    dataServiceA->setAttributeValue( "uid", "objectUUID" );
 
     // Object's service B
     std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
     serviceB->setAttributeValue( "uid", "myTestService2" );
-    serviceB->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+    serviceB->setAttributeValue( "type", "::fwServices::ut::TestServiceImplementationImage" );
 
     // Start method from object's services
     std::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
@@ -168,68 +122,5 @@ void ConfigParserTest::testBuildComposite()
 
 //------------------------------------------------------------------------------
 
-::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/ServiceTest.cpp b/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
index 19cd311..87c7a1a 100644
--- a/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
@@ -6,6 +6,14 @@
 
 #include "ServiceTest.hpp"
 
+#include "TestService.hpp"
+
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/op/Get.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+
 #include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwData/Composite.hpp>
@@ -16,16 +24,8 @@
 #include <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/helper.hpp>
 
-#include <fwServices/IService.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/op/Add.hpp>
-#include <fwServices/op/Get.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
 #include <fwThread/Worker.hpp>
 
-#include "TestService.hpp"
-
 #include <thread>
 
 // Registers the fixture into the 'registry'
@@ -252,7 +252,7 @@ struct TestServiceSignals : public ::fwCom::HasSlots
     BOOST_PP_CAT(timeStamp, __LINE__).modified(); \
     while(!(cond) && !BOOST_PP_CAT(timeStamp, __LINE__).periodExpired()) \
     { \
-        std::this_thread::sleep_for( std::chrono::milliseconds(1)); \
+        std::this_thread::sleep_for( std::chrono::milliseconds(10)); \
     }
 
 void ServiceTest::testCommunication()
@@ -321,7 +321,9 @@ void ServiceTest::testCommunication()
     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 );
+                       service2, ::fwServices::ut::TestServiceImplementation::s_UPDATE2_SLOT );
+
+    CPPUNIT_ASSERT(!service2->getIsUpdated2());
 
     // Service1 send notification
     ::fwServices::ut::TestServiceImplementation::MsgSentSignalType::sptr sig;
@@ -336,6 +338,8 @@ void ServiceTest::testCommunication()
 
     service1->update().wait();
     service2->update().wait();
+    CPPUNIT_ASSERT(service2->getIsUpdated2());
+
     WAIT(receiver1->m_updated && receiver2->m_updated)
     CPPUNIT_ASSERT_EQUAL(true, receiver1->m_started);
     CPPUNIT_ASSERT_EQUAL(true, receiver1->m_updated);
@@ -347,7 +351,6 @@ void ServiceTest::testCommunication()
     // Test if service2 has received the message
     service1->stop().wait();
     service2->stop().wait();
-    CPPUNIT_ASSERT(service2->getIsUpdatedMessage());
 
     WAIT(receiver1->m_stopped && receiver2->m_stopped)
     CPPUNIT_ASSERT_EQUAL(true, receiver1->m_started);
diff --git a/SrcLib/core/fwServices/test/tu/src/TestService.cpp b/SrcLib/core/fwServices/test/tu/src/TestService.cpp
index 65eeae2..732a593 100644
--- a/SrcLib/core/fwServices/test/tu/src/TestService.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/TestService.cpp
@@ -6,14 +6,13 @@
 
 #include "TestService.hpp"
 
-#include <fwData/Object.hpp>
-
 #include <fwServices/macros.hpp>
 
+#include <fwData/Object.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 );
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementation2 );
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestSrvAutoconnect );
 
 namespace fwServices
 {
@@ -21,11 +20,29 @@ 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";
 
+unsigned int TestService::s_START_COUNTER  = 0;
+unsigned int TestService::s_UPDATE_COUNTER = 0;
+
+//------------------------------------------------------------------------------
+
+void TestService::starting() throw(::fwTools::Failed)
+{
+    m_startOrder = s_START_COUNTER++;
+}
+
+//------------------------------------------------------------------------------
+
+void TestService::updating() throw(::fwTools::Failed)
+{
+    m_updateOrder = s_UPDATE_COUNTER++;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace ut
 } // namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/TestServices.cpp b/SrcLib/core/fwServices/test/tu/src/TestServices.cpp
index 7e06580..98a0ba8 100644
--- a/SrcLib/core/fwServices/test/tu/src/TestServices.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/TestServices.cpp
@@ -12,8 +12,6 @@
 
 #include <fwMedData/SeriesDB.hpp>
 
-fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementationComposite,
-                         ::fwData::Composite );
-fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementationImage,
+fwServicesRegisterMacro( ::fwServices::ut::TestConfigService, ::fwServices::ut::TestServiceImplementationImage,
                          ::fwData::Image );
 
diff --git a/SrcLib/core/fwThread/CMakeLists.txt b/SrcLib/core/fwThread/CMakeLists.txt
index 3f1fab7..09138ce 100644
--- a/SrcLib/core/fwThread/CMakeLists.txt
+++ b/SrcLib/core/fwThread/CMakeLists.txt
@@ -1,5 +1,6 @@
 fwLoadProperties()
+
 if(CMAKE_SYSTEM_NAME MATCHES "Windows")
-    add_definitions(-DWIN32_LEAN_AND_MEAN)
+    target_compile_definitions(${FWPROJECT_NAME} PRIVATE "-DWIN32_LEAN_AND_MEAN")
 endif()
 
diff --git a/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp b/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
index 5efbf55..c608d01 100644
--- a/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,21 @@
 #ifndef __FWTOOLS_BOOKMARKS_HPP__
 #define __FWTOOLS_BOOKMARKS_HPP__
 
-#include <string>
-#include <list>
-
-#include <boost/unordered_map.hpp>
+#include "fwTools/config.hpp"
 
 #include <fwCore/base.hpp>
 
-
-#include "fwTools/config.hpp"
-#include "fwTools/macros.hpp"
+#include <list>
+#include <string>
+#include <unordered_map>
 
 namespace fwTools
 {
 
 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.
+ * @brief   Allows to add a bookmark to an object, the bookmark name is unique (in time), an object can have several
+ * bookmarks
  * @note    expired object do not erase its bookmarks
  **/
 class FWTOOLS_CLASS_API Bookmarks
@@ -54,7 +49,6 @@ public:
      */
     FWTOOLS_API static SPTR(::fwTools::Object ) getObject( BookmarkName _bookmark );
 
-
     /**
      * @brief Retrieves the list of bookmarks attach to an object
      */
@@ -65,18 +59,16 @@ public:
      */
     FWTOOLS_API static std::list<BookmarkName> getBookmarks();
 
-
     FWTOOLS_API virtual ~Bookmarks();
 protected:
 
     FWTOOLS_API Bookmarks();
 
-    typedef ::boost::unordered_map< BookmarkName, WPTR(::fwTools::Object ) > Dictionary;
+    typedef ::std::unordered_map< BookmarkName, WPTR(::fwTools::Object ) > Dictionary;
 
     static Dictionary m_dictionary;
 };
 
 }
 
-
 #endif /* __FWTOOLS_BOOKMARKS_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx b/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx
deleted file mode 100644
index a64b773..0000000
--- a/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx
+++ /dev/null
@@ -1,140 +0,0 @@
-/* ***** 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 __FWTOOLS_DYNAMICATTRIBUTES_HXX__
-#define __FWTOOLS_DYNAMICATTRIBUTES_HXX__
-
-#include "fwTools/macros.hpp"
-
-#include <fwCore/base.hpp>
-#include <fwCore/Demangler.hpp>
-
-#include <boost/ref.hpp>
-#include <map>
-#include <vector>
-
-namespace fwTools
-{
-
-class DynamicAttributesBase
-{
-public:
-
-    virtual fwToolsRegisterAttributeSignatureMacro() = 0;
-};
-
-template<class CLASS>
-class DynamicAttributes : public DynamicAttributesBase
-{
-
-public:
-    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;
-
-    DynamicAttributes();
-    virtual ~DynamicAttributes();
-
-    virtual ConstAttrType getConstAttribute( AttrNameType attrName ) const;
-    virtual AttrType getAttribute( AttrNameType attrName );
-    bool        hasAttribute( AttrNameType attrName );
-
-    virtual fwToolsSetAttributeSignatureMacro()
-    {
-        FwCoreNotUsedMacro(attrName);
-        FwCoreNotUsedMacro(_obj);
-    };
-
-    virtual AttrNameVectorType getAttributeNames();
-
-    virtual fwToolsRegisterAttributeSignatureMacro() {
-    };
-protected:
-    virtual AttrRefType getAttributeRef( AttrNameType attrName );
-    AttrMapType __FWTOOLS_ATTRIBUTE_MAP_NAME;
-
-
-};
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-DynamicAttributes< CLASS >::DynamicAttributes()
-{
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-DynamicAttributes< CLASS >::~DynamicAttributes()
-{
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-typename DynamicAttributes< CLASS >::AttrType DynamicAttributes< CLASS >::getAttribute( AttrNameType attrName )
-{
-    return this->getAttributeRef(attrName);
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-typename DynamicAttributes< CLASS >::AttrRefType DynamicAttributes< CLASS >::getAttributeRef( AttrNameType attrName )
-{
-    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()
-        );
-    return (*iter).second;
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-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()
-        );
-    return (*iter).second.get();
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-bool DynamicAttributes< CLASS >::hasAttribute( AttrNameType attrName )
-{
-    typename DynamicAttributes::AttrMapType::iterator iter = this->__FWTOOLS_ATTRIBUTE_MAP_NAME.find(attrName);
-    return iter != this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end();
-}
-
-//------------------------------------------------------------------------------
-
-template< class CLASS >
-typename DynamicAttributes< CLASS >::AttrNameVectorType DynamicAttributes< CLASS >::getAttributeNames()
-{
-    AttrNameVectorType names;
-    typename DynamicAttributes::AttrMapType::const_iterator iter;
-    for ( iter = this->__FWTOOLS_ATTRIBUTE_MAP_NAME.begin(); iter != this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end(); ++iter )
-    {
-        names.push_back((*iter).first);
-    }
-    return names;
-}
-
-} //end namespace fwTools
-
-#endif //__FWTOOLS_DYNAMICATTRIBUTES_HXX__
diff --git a/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp b/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp
index 6844826..53b4db4 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,32 +7,34 @@
 #ifndef __FWTOOLS_PROGRESSADVISER_HPP__
 #define __FWTOOLS_PROGRESSADVISER_HPP__
 
-#include <string>
+#include <fwTools/config.hpp>
 
 #include <fwCore/base.hpp>
-#include <fwTools/config.hpp>
 
-#include <boost/weak_ptr.hpp>
 #include <boost/signals2.hpp>
 
+#include <string>
 
 namespace fwTools
 {
 
 /**
  * @brief   Subclasses Inherited from  ProgressAdviser can notify progression
- * This class is used as base class to add the functionalities of progress notification. To notify a progress then simply call
- * notifyProgress() method by given the progression [0, 1.0] and a message. The ProgressAdviser will automatically call handler (=Observer).
- * Handlers can be added using addHandler(). the Handler of type ProgessHandler can be a function or functor or boost::signal with a signature
+ * This class is used as base class to add the functionalities of progress notification. To notify a progress then
+ * simply call
+ * notifyProgress() method by given the progression [0, 1.0] and a message. The ProgressAdviser will automatically call
+ * handler (=Observer).
+ * 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
  */
 class FWTOOLS_CLASS_API ProgressAdviser : public ::boost::signals2::trackable
 {
 public:
 
     /// define a boost signal signature for the ProgessHandler
-    typedef ::boost::signals2::signal< void (float, std::string) >  ProgessSignal; // signal for fctor or function returning void
+    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
@@ -44,9 +46,10 @@ 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
+     * @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, const std::string& msg = "") const;
diff --git a/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp b/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp
index 67a4e72..3c398c6 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,19 @@
 #ifndef __FWTOOLS_PROGRESSTOLOGGER_HPP__
 #define __FWTOOLS_PROGRESSTOLOGGER_HPP__
 
-#include <string>
 #include <fwTools/config.hpp>
 
-#include <boost/weak_ptr.hpp>
 #include <boost/signals2.hpp>
 
+#include <string>
+
 namespace fwTools
 {
 
 /**
- * @brief   Class ProgressToLogger is an ProgressAdviser::ProgressHandler, it receive notification from its ProgressAdviser
+ * @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::signals2::trackable
 {
diff --git a/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp b/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp
index 991842e..c408c75 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,14 @@
 #ifndef __FWTOOLS_TYPEINFO_HPP__
 #define __FWTOOLS_TYPEINFO_HPP__
 
-#include <typeinfo>
 #include "fwTools/config.hpp"
-#include <cassert>
+
+#include <typeinfo>
 
 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
  */
@@ -37,7 +34,7 @@ public:
      * @param[in] ti the TypeInfo to copy
      * @return the copied TypeInfo
      */
-    FWTOOLS_API TypeInfo &operator=(const TypeInfo &ti);
+    FWTOOLS_API TypeInfo& operator=(const TypeInfo& ti);
 
     /**
      * @brief access for the wrapped std::type_info
@@ -54,7 +51,6 @@ public:
         return *pInfo_;
     }
 
-
     // Compatibility functions
     /**
      * @brief compatibility functions ( std::type_info like)
@@ -74,7 +70,6 @@ private:
     const std::type_info* pInfo_;
 };
 
-
 // COMPARISON OPERATOR
 /**
  * @name Comparison operators for TypeInfo
diff --git a/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp b/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp
index c6917ab..139eb5e 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWTOOLS_TYPEMAPPING_HPP__
 #define __FWTOOLS_TYPEMAPPING_HPP__
 
-#include <iterator>
-#include <boost/static_assert.hpp>
-#include <assert.h>
-#include <stdexcept>
-
-#include <boost/mpl/is_sequence.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/empty.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/if.hpp>
-
 #include <boost/mpl/front.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/is_sequence.hpp>
 #include <boost/mpl/pop_front.hpp>
+#include <boost/mpl/size.hpp>
+#include <boost/static_assert.hpp>
+
+#include <iterator>
+#include <stdexcept>
 
 namespace fwTools
 {
@@ -31,7 +29,6 @@ struct isMappingMultiMPLHelper;
 template< class T, class KeyType >
 struct isMappingSingleMPLHelper;
 
-
 //
 /**
  * @brief   Create a type (T) binding/mapping with a KeyType ( std::string, ipop::PixelType etc...
@@ -56,37 +53,31 @@ struct isMappingSingleMPLHelper;
  * @endcode
  */
 template< class TSingle_or_TSEQ, class KeyType_or_KeyTypeContainer >
-bool isMapping(const KeyType_or_KeyTypeContainer &key)
+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 >
+            isMappingMultiMPLHelper< TSingle_or_TSEQ, KeyType_or_KeyTypeContainer >,
+            isMappingSingleMPLHelper< TSingle_or_TSEQ, KeyType_or_KeyTypeContainer >
             >::type typex;
     return typex::evaluate(key);
 
 }
 
-
-
-
-
 /**
- * @brief   an isMapping() helper : This function is called iff TSingle_or_TSEQ is not a sequence and isMapping<SingleType> is not specialized
+ * @brief   an isMapping() helper : This function is called iff TSingle_or_TSEQ is not a sequence and
+ * isMapping<SingleType> is not specialized
  * This class is intended to avoid developer to forgive the specialization of isMapping<TYPE>
- * @class   isMappingSingleMPLHelper
  * @tparam  T the type to test
  * @tparam  KeyType the type to match
- *
- * @date    2007-2009.
  */
 template< class T, class KeyType >
 struct isMappingSingleMPLHelper
 {
 
     /// this function is called iff TSingle_or_TSEQ is not a sequence and isMapping<SingleType>
-    static bool evaluate(const KeyType &key)
+    static bool evaluate(const KeyType& key)
     {
         FwCoreNotUsedMacro(key);
         BOOST_STATIC_ASSERT(sizeof(T) == 0);  // note its a compilator workaround of BOOST_STATIC_ASSERT(false);
@@ -98,7 +89,6 @@ struct isMappingSingleMPLHelper
     }
 };
 
-
 /**
  * @brief   Test whatever a typelist is mapping a container of KeyType
  *
@@ -107,52 +97,45 @@ struct isMappingSingleMPLHelper
 template< class TSEQ, class KeyTypeContainer >
 bool isMappingMulti(const KeyTypeContainer& keys)
 {
-    return isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(keys);
+    return isMappingMultiMPLHelper<TSEQ, KeyTypeContainer>::evaluate(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
     }
 };
 
-
-
-
 /**
- * @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
+ * @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)
     {
 
         namespace mpl = ::boost::mpl;
 
-        if ( keys.size() !=  static_cast<unsigned long>(mpl::size<TSEQ>::value) )
+        if ( keys.size() != static_cast<unsigned long>(mpl::size<TSEQ>::value) )
         {
             std::string msg("isMappingMulti TypeList & KeyType container does not have the same size !!!");
             throw std::invalid_argument(msg);
@@ -161,17 +144,18 @@ isMappingMultiMPLHelper
 
         typename KeyTypeContainer::const_iterator begin = keys.begin(); // needed to have cste ptr
         typename KeyTypeContainer::const_iterator end   = keys.end();
-        return isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate( begin, end );
+        return isMappingMultiMPLHelper<TSEQ, KeyTypeContainer>::evaluate( begin, end );
 
     }
 
 };
 
+//------------------------------------------------------------------------------
 
 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;
 
@@ -181,7 +165,7 @@ isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(typename KeyTypeContain
     typedef BOOST_DEDUCED_TYPENAME mpl::if_<
             mpl::empty<Tail>,
             EmptyListMapping < KeyTypeContainer >,
-            isMappingMultiMPLHelper <Tail,KeyTypeContainer >
+            isMappingMultiMPLHelper <Tail, KeyTypeContainer >
             >::type typex;
 
     bool firstKeyIsOK = isMapping< Head >( *begin );     // call a isMapping with a single key
@@ -196,9 +180,6 @@ isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(typename KeyTypeContain
 
 }
 
-
-
 } // namespace fwTools
 
-
 #endif /*__FWTOOLS_TYPEMAPPING_HPP__*/
diff --git a/SrcLib/core/fwTools/include/fwTools/fwID.hpp b/SrcLib/core/fwTools/include/fwTools/fwID.hpp
index a0acbaf..a712819 100644
--- a/SrcLib/core/fwTools/include/fwTools/fwID.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/fwID.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWTOOLS_FWID_HPP__
 #define __FWTOOLS_FWID_HPP__
 
-#include <string>
-
-#include <boost/unordered_map.hpp>
+#include "fwTools/config.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwCore/mt/types.hpp>
 
-#include "fwTools/config.hpp"
-#include "fwTools/macros.hpp"
+#include <cstdint>
+#include <string>
+#include <unordered_map>
 
 namespace fwTools
 {
@@ -23,9 +22,6 @@ namespace fwTools
 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
 {
@@ -35,7 +31,6 @@ public:
 
     typedef std::string IDType;
 
-
     typedef enum
     {
         EMPTY = 1,    ///< return an empty id if no one set
@@ -71,15 +66,14 @@ protected:
     /**
      * @brief Returns the id of the object. If it is not set and the policy value is
      * \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 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.
      * @note This method is thread-safe.
      */
     FWTOOLS_API IDType getID( Policy policy = GENERATE ) const;
 
-
-
     /**
      * @brief Set a newID  for the object, (newID must not exist in fwID), the oldest one is released.
      * @warning Cannot set a empty ID.
@@ -100,7 +94,6 @@ protected:
     {
     }          // cannot be instantiated
 
-
 private:
 
     /**
@@ -129,8 +122,8 @@ private:
 
     IDType m_id;
 
-    typedef ::boost::unordered_map< IDType, WPTR(::fwTools::Object ) > Dictionary;
-    typedef ::boost::unordered_map< std::string, ::boost::uint32_t >  CategorizedCounter;
+    typedef std::unordered_map< IDType, WPTR(::fwTools::Object ) > Dictionary;
+    typedef std::unordered_map< std::string, std::uint32_t >  CategorizedCounter;
 
     static Dictionary m_dictionary;
     static CategorizedCounter m_CategorizedCounter;
@@ -147,5 +140,4 @@ private:
 
 }
 
-
 #endif /* __FWTOOLS_FWID_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/macros.hpp b/SrcLib/core/fwTools/include/fwTools/macros.hpp
deleted file mode 100644
index 5013ae2..0000000
--- a/SrcLib/core/fwTools/include/fwTools/macros.hpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/* ***** 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 ****** */
-
-/**
- * @file fwTools/macros.hpp
- * @brief TODO
- *
- *
- */
-
-#ifndef __FWTOOLS_MACROS_HPP__
-#define __FWTOOLS_MACROS_HPP__
-
-#include <boost/ref.hpp>
-
-#include <boost/preprocessor/array/data.hpp>
-#include <boost/preprocessor/array/push_front.hpp>
-#include <boost/preprocessor/control/if.hpp>
-#include <boost/preprocessor/facilities/expand.hpp>
-#include <boost/preprocessor/repetition/for.hpp>
-#include <boost/preprocessor/seq/for_each.hpp>
-#include <boost/preprocessor/seq/seq.hpp>
-#include <boost/preprocessor/seq/size.hpp>
-#include <boost/preprocessor/seq/to_tuple.hpp>
-#include <boost/preprocessor/stringize.hpp>
-#include <boost/preprocessor/tuple/to_seq.hpp>
-
-/** @cond */
-#define __FWTOOLS_MEMBER_PREFIX                   m_
-#define __FWTOOLS_ATTRIBUTE_ACCESSOR_PARAM_PREFIX _
-#define __FWTOOLS_ATTRIBUTE_MAP_NAME              __m_object_attributes__
-#define __FWTOOLS_ATTRIBUTES_REGISTER_FUNC_NAME   __registerAttributes
-
-#define __FWTOOLS_NONE
-/** @endcond */
-
-
-#define fwToolsRegisterAttributeSignatureMacro()   \
-    void __FWTOOLS_ATTRIBUTES_REGISTER_FUNC_NAME()
-
-
-#define fwToolsSetAttributeSignatureMacro()                   \
-    void setAttribute( AttrNameType attrName, AttrType _obj )
-
-#define fwToolsPrependParamPrefixMacro( _name )                     \
-    BOOST_PP_CAT (__FWTOOLS_ATTRIBUTE_ACCESSOR_PARAM_PREFIX, _name)
-
-#define fwToolsAttributeTypeMacro( _type )  \
-    _type::__FWCORE_TYPEDEF_SHARED_PTR_NAME
-
-//-----------------------------------
-// Setter
-//-----------------------------------
-#define fwToolsSetterMacro( _memberprefix, _type, _var) \
-    fwToolsSetMacro    ( _memberprefix, _type, _var);   \
-    fwToolsSetCRefMacro( _memberprefix, _type, _var);
-
-//-----------------------------------
-//
-#define fwToolsSetMacro( _memberprefix, _type, _var)                                      \
-    void set ## _var (const _type fwToolsPrependParamPrefixMacro(_var))                     \
-    {                                                                                     \
-        this->BOOST_PP_CAT( _memberprefix, _var ) = fwToolsPrependParamPrefixMacro(_var); \
-    }
-
-//-----------------------------------
-//
-#define fwToolsSetCRefMacro( _memberprefix, _type, _var)                                  \
-    void setCRef ## _var (const _type &fwToolsPrependParamPrefixMacro(_var))               \
-    {                                                                                     \
-        this->BOOST_PP_CAT( _memberprefix, _var ) = fwToolsPrependParamPrefixMacro(_var); \
-    }
-
-//-----------------------------------
-
-
-//-----------------------------------
-// Getter
-//-----------------------------------
-#define fwToolsGetterMacro( _memberprefix, _type, _var) \
-    fwToolsGetMacro    ( _memberprefix, _type, _var);   \
-    fwToolsGetRefMacro ( _memberprefix, _type, _var);   \
-    fwToolsGetCRefMacro( _memberprefix, _type, _var);
-
-
-//-----------------------------------
-//
-#define fwToolsGetMacro( _memberprefix, _type, _var) \
-    const _type get ## _var () const                   \
-    {                                                \
-        return BOOST_PP_CAT( _memberprefix, _var );  \
-    }
-
-//-----------------------------------
-//
-#define fwToolsGetRefMacro( _memberprefix, _type, _var)   \
-    _type & getRef ## _var ()                               \
-    {                                                     \
-        return this->BOOST_PP_CAT( _memberprefix, _var ); \
-    }
-
-//-----------------------------------
-//
-#define fwToolsGetCRefMacro( _memberprefix, _type, _var)  \
-    const _type &getCRef ## _var () const                  \
-    {                                                     \
-        return this->BOOST_PP_CAT( _memberprefix, _var ); \
-    }
-
-//-----------------------------------
-// Getter/Setter
-//-----------------------------------
-#define fwGetterSetterMacro( _memberprefix, _type, _name, _desc )                   \
-    /** @name BOOST_PP_CAT( _memberprefix, _var ) accessor */                       \
-    /** Getter/Setter for _var                            */                        \
-    /** @{                                                */                        \
-    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 );
-
-
-#define fwToolsDeclareAttrTypedefMacro( _type, _name, _desc ) \
-    /** @desc _desc **/                                       \
-    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 ) ) \
-            ));
-
-#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) ) \
-    {                                                                                               \
-        theAttr = _obj;                                                                             \
-    }
-
-
-#define __FWTOOLS_PREPEND_TO_TUPLE_MACRO( _size, _tuple, _value )           \
-    BOOST_PP_ARRAY_DATA(BOOST_PP_ARRAY_PUSH_FRONT((_size, _tuple), _value))
-
-#define fwToolsOneAttrRegisterMacro( r, _data_memberprefix, _tuple )                                  \
-    BOOST_PP_EXPAND( __FWTOOLS_ONE_ATTR_REGISTER_MACRO __FWTOOLS_PREPEND_TO_TUPLE_MACRO(3, _tuple, _data_memberprefix))
-
-
-#define fwToolsOneAttrDeclareMacro( r, _data_memberprefix, _tuple )                                            \
-    BOOST_PP_EXPAND( fwToolsDeclareAttrMacro __FWTOOLS_PREPEND_TO_TUPLE_MACRO(3, _tuple, _data_memberprefix) )
-
-
-#define fwToolsOneAttrTypedefDeclareMacro( r, data, _tuple ) \
-    fwToolsDeclareAttrTypedefMacro _tuple
-
-
-#define fwToolsOneAttrGetterSetterMacro( r, _data_memberprefix, _tuple )                 \
-    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)
-
-#define fwToolsDeclareAttributesTypedefMacro( _memberprefix, _attributes )                   \
-    BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrTypedefDeclareMacro, _memberprefix, _attributes)
-
-
-#define fwToolsGetterSetterAttributesMacro( _memberprefix, _attributes )                   \
-    /** @cond **/                                                                          \
-    BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrGetterSetterMacro, _memberprefix, _attributes) \
-    /** @endcond **/
-
-
-#define fwToolsRegisterAttributesMacro( _memberprefix, _attributes )                    \
-    /** @cond **/                                                                       \
-    fwToolsRegisterAttributeSignatureMacro()                                            \
-    {                                                                                   \
-        BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrRegisterMacro,  _memberprefix, _attributes) \
-    }                                                                                   \
-    /** @endcond **/
-
-
-#define fwToolsSetAttributesMacro( _attributes )                                           \
-    /** @cond **/                                                                          \
-    fwToolsSetAttributeSignatureMacro()                                                    \
-    {                                                                                      \
-        AttrRefType::type &theAttr = this->getAttributeRef(attrName);                      \
-        if (!_obj)                                                                         \
-        {                                                                                  \
-            theAttr.reset();                                                               \
-        }                                                                                  \
-        BOOST_PP_SEQ_FOR_EACH(fwToolsSetOneAttrMacro, _, _attributes)                      \
-        else                                                                               \
-        {                                                                                  \
-            OSLM_FATAL( "Attribute '"<<attrName<<"' of object '"<< this->getClassname()    \
-                                     <<"' can not handle a object of type '"<<_obj->getClassname()<<"'"); \
-        }                                                                                  \
-    }                                                                                      \
-    /** @endcond **/
-
-
-
-#define fwToolsPrefixedAttributesMacro( _prefix, _attributes )        \
-    private:                                                          \
-        fwToolsDeclareAttributesMacro  ( _prefix, _attributes )       \
-        fwToolsRegisterAttributesMacro ( _prefix, _attributes )       \
-    public:                                                           \
-        fwToolsDeclareAttributesTypedefMacro ( _prefix, _attributes ) \
-        fwToolsGetterSetterAttributesMacro   ( _prefix, _attributes ) \
-        fwToolsSetAttributesMacro            ( _attributes )
-
-
-#define fwToolsAttributesMacro( _attributes )                              \
-    fwToolsPrefixedAttributesMacro( __FWTOOLS_MEMBER_PREFIX, _attributes )
-
-
-#endif //__FWTOOLS_MACROS_HPP__
diff --git a/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp b/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
index f02904a..fdb9018 100644
--- a/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
@@ -1,17 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwTools/Bookmarks.hpp"
-#include "fwTools/Failed.hpp"
-#include "fwTools/Object.hpp"
-
-#include <fwCore/Demangler.hpp>
 
-#include <assert.h>
-#include <boost/lexical_cast.hpp>
+#include "fwTools/Object.hpp"
 
 namespace fwTools
 {
diff --git a/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp b/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
index 81c72e4..60399e4 100644
--- a/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <string.h>
-
-#include <fwCore/base.hpp>
-
 #include "fwTools/TypeInfo.hpp"
 
+#include <fwCore/base.hpp>
 
+#include <string.h>
 
 namespace fwTools
 {
@@ -24,12 +22,14 @@ TypeInfo::TypeInfo()
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
 }
 
-TypeInfo::TypeInfo(const std::type_info& ti)
-    : pInfo_(&ti)
+TypeInfo::TypeInfo(const std::type_info& ti) :
+    pInfo_(&ti)
 {
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
 }
 
+//------------------------------------------------------------------------------
+
 bool TypeInfo::before(const TypeInfo& rhs) const
 {
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
@@ -37,27 +37,30 @@ bool TypeInfo::before(const TypeInfo& rhs) const
     return pInfo_->before(*rhs.pInfo_) != 0;
 }
 
+//------------------------------------------------------------------------------
+
 const std::type_info& TypeInfo::type_info() const
 {
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
     return *pInfo_;
 }
 
+//------------------------------------------------------------------------------
+
 const char* TypeInfo::name() const
 {
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
     return pInfo_->name();
 }
 
+//------------------------------------------------------------------------------
 
-
-TypeInfo &TypeInfo::operator=(const TypeInfo &rhs)
+TypeInfo& TypeInfo::operator=(const TypeInfo& rhs)
 {
     pInfo_ = rhs.pInfo_;
     return *this;
 }
 
-
 // Comparison operators
 
 bool operator==(const TypeInfo& lhs, const TypeInfo& rhs)
@@ -65,38 +68,43 @@ 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;
 }
 
+//------------------------------------------------------------------------------
 
 bool operator!=(const TypeInfo& lhs, const TypeInfo& rhs)
 {
     return !(lhs == 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;
 }
 
-
 } // end namespace fwTools
 
diff --git a/SrcLib/core/fwTools/src/fwTools/fwID.cpp b/SrcLib/core/fwTools/src/fwTools/fwID.cpp
index 0e6fbd3..c2b6c1e 100644
--- a/SrcLib/core/fwTools/src/fwTools/fwID.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/fwID.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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>
+#include "fwTools/fwID.hpp"
+
+#include "fwTools/Failed.hpp"
+#include "fwTools/Object.hpp"
 
 #include <fwCore/Demangler.hpp>
 
-#include "fwTools/fwID.hpp"
-#include "fwTools/Object.hpp"
-#include "fwTools/Failed.hpp"
+#include <boost/lexical_cast.hpp>
 
 namespace fwTools
 {
@@ -80,11 +80,11 @@ fwID::IDType fwID::getID( Policy policy) const
     ::fwCore::mt::ReadToWriteLock lock(m_idMutex);
     if ( m_id.empty() ) // no id set
     {
-        if ( policy==GENERATE )
+        if ( policy == GENERATE )
         {
             IDType newID = generate();
             ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            const_cast<fwID *>(this)->addIDInDictionary(newID);
+            const_cast<fwID*>(this)->addIDInDictionary(newID);
         }
         else if  ( policy == EMPTY )
         { /* nothing to do*/
@@ -118,7 +118,7 @@ fwID::IDType fwID::generate() const
 {
     ::fwCore::mt::ReadLock lock(s_dictionaryMutex);
     Dictionary::iterator it = m_dictionary.find(requestID);
-    if ( it!=m_dictionary.end() )
+    if ( it != m_dictionary.end() )
     {
         SLM_ASSERT(  "expired object in fwID::Dictionary for id=" + requestID,  !it->second.expired() );
         return it->second.lock();
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/io/fwCsvIO/CMakeLists.txt
similarity index 95%
copy from SrcLib/core/fwDataCamp/CMakeLists.txt
copy to SrcLib/io/fwCsvIO/CMakeLists.txt
index 1c29206..15cd4c1 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/io/fwCsvIO/CMakeLists.txt
@@ -1,2 +1 @@
 fwLoadProperties()
-
diff --git a/SrcLib/core/fwMedData/Properties.cmake b/SrcLib/io/fwCsvIO/Properties.cmake
similarity index 54%
copy from SrcLib/core/fwMedData/Properties.cmake
copy to SrcLib/io/fwCsvIO/Properties.cmake
index e1128ac..1126216 100644
--- a/SrcLib/core/fwMedData/Properties.cmake
+++ b/SrcLib/io/fwCsvIO/Properties.cmake
@@ -1,7 +1,9 @@
 
-set( NAME fwMedData )
+set( NAME fwCsvIO )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwData )
+set( DEPENDENCIES 
+    fwCore
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwCsvIO/include/fwCsvIO/CsvReader.hpp b/SrcLib/io/fwCsvIO/include/fwCsvIO/CsvReader.hpp
new file mode 100644
index 0000000..bba28bc
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/include/fwCsvIO/CsvReader.hpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCSVIO_CSVREADER_HPP__
+#define __FWCSVIO_CSVREADER_HPP__
+
+#include "fwCsvIO/config.hpp"
+
+#include <string>
+#include <vector>
+
+namespace fwCsvIO
+{
+
+/**
+ * @brief   CSV files reader. Read file with .csv fomat (the extension is not important)
+ * Reader to fill an std::Vector of strings with the content of a .csv file.
+ */
+class FWCSVIO_CLASS_API CsvReader
+{
+
+public:
+
+    typedef std::vector<std::string> CSVLineValuesType;
+    typedef std::vector<CSVLineValuesType> CSVFileValuesType;
+
+    typedef enum
+    {
+        COMMA     = ',',
+        SEMICOLON = ';'
+    } SeparatorType;
+
+    /// Constructor. Do nothing .
+    FWCSVIO_API CsvReader(const std::string& location, SeparatorType separatorType = SeparatorType::COMMA);
+
+    /// Destructor. Do nothing.
+    FWCSVIO_API virtual ~CsvReader();
+
+    /// Read the file with standard iostream API. Result vector is return empty if file could not be opened.
+    FWCSVIO_API CSVFileValuesType read() const;
+
+    /// Get the path of the file in the file system.
+    FWCSVIO_API std::string getLocation() const;
+
+    /// Set the path of the file in the file system.
+    FWCSVIO_API void setLocation(const std::string& location);
+
+private:
+
+    /// Contains the path of the csv formated file to be parsed.
+    std::string m_location;
+
+    /// Indicates the separator that will be used for file parsing.
+    SeparatorType m_separatorType;
+};
+
+} // namespace fwCsvIO
+
+#endif // __FWCSVIO_CSVREADER_HPP__
diff --git a/SrcLib/io/fwCsvIO/include/fwCsvIO/Namespace.hpp b/SrcLib/io/fwCsvIO/include/fwCsvIO/Namespace.hpp
new file mode 100644
index 0000000..cfcec0a
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/include/fwCsvIO/Namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCSVIO_NAMESPACE_HPP__
+#define __FWCSVIO_NAMESPACE_HPP__
+
+/**
+ * @brief       This namespace fwCsvIO contains reader for csv file.
+ */
+namespace fwCsvIO
+{
+}
+#endif /* __FWCSVIO_NAMESPACE_HPP__ */
diff --git a/SrcLib/io/fwCsvIO/src/fwCsvIO/CsvReader.cpp b/SrcLib/io/fwCsvIO/src/fwCsvIO/CsvReader.cpp
new file mode 100644
index 0000000..30ee9f1
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/src/fwCsvIO/CsvReader.cpp
@@ -0,0 +1,156 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwCsvIO/CsvReader.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <boost/filesystem.hpp>
+
+#include <fstream>
+
+namespace fwCsvIO
+{
+
+CsvReader::CsvReader(const std::string& location, SeparatorType separatorType ) :
+    m_location(location),
+    m_separatorType(separatorType)
+{
+    SLM_ASSERT("The file path is empty.", !location.empty());
+}
+
+//------------------------------------------------------------------------------
+
+CsvReader::~CsvReader()
+{
+}
+
+//------------------------------------------------------------------------------
+
+CsvReader::CSVFileValuesType CsvReader::read() const
+{
+    std::ifstream file;
+    // only the input is needed
+    file.open(m_location.c_str(), std::ios::in );
+
+    // result vector and line that will be pushed progressively to that vector
+    CSVFileValuesType resultVector;
+    CSVLineValuesType lineValues;
+
+    // in case of incorrect path, return empty vector.
+    if(!file.is_open())
+    {
+        file.close();
+        return resultVector;
+    }
+
+    // line currently read, and value currently being parsed
+    std::string readLine;
+    std::string value;
+
+    // whether we are currently parsing a quote or not, used when parsing quote escape character ' "" ' or in-value '\n'
+    bool isQuote = false;
+
+    // parse the whole file
+    while (!file.eof())
+    {
+        // parse it line by line
+        std::getline(file, readLine);
+
+        // either line is empty or the line is a comment (considering we are not in a quoted value)
+        if( (readLine.empty() || readLine[0] == '#') && !isQuote)
+        {
+            continue;
+        }
+
+        // parse the line character by character.
+        for(size_t i = 0; i < readLine.size(); i++)
+        {
+            // separator, value parsing is over, push it to the current line
+            if(readLine[i] == m_separatorType && !isQuote)
+            {
+                lineValues.push_back(value);
+                value.erase();
+
+            }
+            // if we find a double quote character and we are not in a quoted value already,
+            // either it is the beginning of a quote, either it is an escaped quote
+            else if(readLine[i] == '"' && !isQuote)
+            {
+                if(readLine[i+1] == '"')
+                {
+                    value += readLine[i];
+                    i++;
+                }
+                else
+                {
+                    isQuote = true;
+                }
+            }
+            // if the double quote is within a quoted value, either it is the end of the quoted value,
+            // either it is an escaped quote
+            else if(readLine[i] == '"' && isQuote)
+            {
+                if(readLine[i+1] == '"')
+                {
+                    value += readLine[i];
+                    i++;
+                }
+                else
+                {
+                    isQuote = false;
+                }
+            }
+            // if it is only a normal character add it to the currant value.
+            else
+            {
+                value += readLine[i];
+            }
+        }
+
+        // if line is over and this is not a quote, push the read values of this line to the result vector
+        // and clear current containers
+        if( !isQuote )
+        {
+            lineValues.push_back(value);
+            resultVector.push_back(lineValues);
+
+            lineValues.clear();
+            value.erase();
+        }
+        // if the line is over and this is a quote, add the end line character to our current value.
+        // DO NOT push any value to the lineVector.
+        else
+        {
+            value += '\n';
+        }
+    }
+
+    // reading is done file can be closed.
+    file.close();
+
+    return resultVector;
+}
+
+//------------------------------------------------------------------------------
+
+std::string CsvReader::getLocation() const
+{
+    return this->m_location;
+}
+
+//------------------------------------------------------------------------------
+
+void CsvReader::setLocation(const std::string& location)
+{
+    this->m_location = location;
+
+    SLM_ASSERT("The file path is empty.", !location.empty());
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwDataIO
diff --git a/SrcLib/core/fwDataCamp/test/CMakeLists.txt b/SrcLib/io/fwCsvIO/test/CMakeLists.txt
similarity index 61%
copy from SrcLib/core/fwDataCamp/test/CMakeLists.txt
copy to SrcLib/io/fwCsvIO/test/CMakeLists.txt
index dddc271..35a7eae 100644
--- a/SrcLib/core/fwDataCamp/test/CMakeLists.txt
+++ b/SrcLib/io/fwCsvIO/test/CMakeLists.txt
@@ -1,13 +1,13 @@
 fwLoadProperties()
+
 find_package(CppUnit)
-find_package(CAMP REQUIRED)
 
 fwInclude(
-    ${CAMP_INCLUDE_DIR}
     ${CPPUNIT_INCLUDE_DIR}
 )
 fwLink(
-    ${CAMP_LIBRARIES}
     ${CPPUNIT_LIBRARY}
 )
 
+
+
diff --git a/SrcLib/io/fwCsvIO/test/Properties.cmake b/SrcLib/io/fwCsvIO/test/Properties.cmake
new file mode 100644
index 0000000..f0b7f3f
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/test/Properties.cmake
@@ -0,0 +1,11 @@
+
+set( NAME fwCsvIOTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES 
+    fwCsvIO
+    fwTest
+    fwTools
+    )
+set( REQUIREMENTS  )
+
diff --git a/SrcLib/io/fwCsvIO/test/tu/include/CsvReaderTest.hpp b/SrcLib/io/fwCsvIO/test/tu/include/CsvReaderTest.hpp
new file mode 100644
index 0000000..2c40511
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/test/tu/include/CsvReaderTest.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCSVIO_UT_CSVREADERTEST_HPP__
+#define __FWCSVIO_UT_CSVREADERTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwCsvIO
+{
+
+namespace ut
+{
+
+
+/**
+ * @brief Test csvReader method to read CSV formated files and create vectors of strings.
+ * Note : Our tests are done considering that a csvFile cannot contain errors. (E.g. in case of two consecutive commas
+ * string is considered empty for example).
+ */
+class CsvReaderTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( CsvReaderTest );
+
+CPPUNIT_TEST( testParsing );
+
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    // interface
+    void setUp();
+
+    void tearDown();
+
+    void testParsing();
+
+protected:
+
+    /// string containing the path to the temporary file to test
+    std::string m_tmpCsvFilePath;
+
+};
+
+} // namespace ut
+
+} // namespace fwCsvIO
+
+#endif //__FWCSVIO_UT_CSVREADERTEST_HPP__
diff --git a/SrcLib/io/fwCsvIO/test/tu/src/CsvReaderTest.cpp b/SrcLib/io/fwCsvIO/test/tu/src/CsvReaderTest.cpp
new file mode 100644
index 0000000..41b3ffb
--- /dev/null
+++ b/SrcLib/io/fwCsvIO/test/tu/src/CsvReaderTest.cpp
@@ -0,0 +1,164 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016-2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "CsvReaderTest.hpp"
+
+#include <fwCsvIO/CsvReader.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <fstream>
+#include <vector>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCsvIO::ut::CsvReaderTest );
+
+namespace fwCsvIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void CsvReaderTest::setUp()
+{
+    // Set up context before running a test.
+    // Create a temporary file path for testing
+    m_tmpCsvFilePath = (::fwTools::System::getTemporaryFolder() / "TestFile.csv").string();
+
+    std::fstream file;
+
+    file.open(m_tmpCsvFilePath.c_str(), std::fstream::out );
+
+    // test if file created properly
+    CPPUNIT_ASSERT(file);
+
+    file.close();
+}
+
+//------------------------------------------------------------------------------
+
+void CsvReaderTest::tearDown()
+{
+    // Clean up after the test run.
+    bool deleteStatus = (std::remove(m_tmpCsvFilePath.c_str()) != 0);
+
+    // test if the file correctly removed
+    CPPUNIT_ASSERT(!deleteStatus);
+}
+
+//------------------------------------------------------------------------------
+
+void CsvReaderTest::testParsing()
+{
+    // create the CSVFileValuesType to test
+    CsvReader::CSVFileValuesType testVector;
+    CsvReader::CSVLineValuesType testVector1;
+    CsvReader::CSVLineValuesType testVector2;
+    CsvReader::CSVLineValuesType testVector3;
+
+    // we tried to create every ambigous case possible.
+    testVector1.push_back("");
+    testVector1.push_back("f4s");
+    testVector1.push_back("is");
+    testVector1.push_back("cool");
+    // This value needs to be added manually as there is no way to know where the double quotes were placed initially
+    testVector1.push_back("FrameWork For Software \n Production Line");
+    testVector1.push_back("");
+    testVector1.push_back("3.14159265358979323846264338327");
+    testVector1.push_back("");
+
+    testVector2.push_back("This is a String with \" quotes \".");
+    testVector2.push_back("Ajar JarJar in a Jar in an ajar jar.");
+    testVector2.push_back("42");
+
+    testVector3.push_back("The princess is in another castle. ");
+    testVector3.push_back("123456789");
+    testVector3.push_back("0 0 1 2 3 5 8 13 This is a \" fibonacci \" sequence ");
+
+    testVector.push_back(testVector1);
+    testVector.push_back(testVector2);
+    testVector.push_back(testVector3);
+
+    // open our test file
+    std::fstream file;
+
+    file.open(m_tmpCsvFilePath.c_str(), std::ios::out );
+
+    const size_t testVectorSize = testVector.size();
+
+    // Push values to our file
+    for(size_t i = 0; i < testVectorSize; i++)
+    {
+        const size_t tokenSize = testVector[i].size();
+
+        for(size_t j = 0; j < tokenSize; j++)
+        {
+            // this line has to be added manually.
+            if( i == 0 && j == 4 )
+            {
+                file<< "FrameWork For \"Software \n\" Production Line,";
+            }
+            else
+            {
+                std::string value = testVector[i][j];
+                size_t startPos   = 0;
+                while( (startPos = value.find( "\"", startPos ) ) != std::string::npos)
+                {
+                    value.replace(startPos, 1, "\"\"");
+                    startPos += 2;
+                }
+                while( (startPos = value.find( "\n", startPos ) ) != std::string::npos)
+                {
+                    value.replace(startPos, 1, "\"\"");
+                    startPos += 2;
+                }
+
+                file<<value;
+
+                if(j != testVector[i].size()-1)
+                {
+                    file<<",";
+                }
+            }
+        }
+
+        if(i != testVector.size()-1)
+        {
+            file<<"\n";
+        }
+    }
+
+    // pushing is done, we may close our file.
+    file.close();
+
+    // call our library method
+    ::fwCsvIO::CsvReader testReader(m_tmpCsvFilePath);
+
+    CsvReader::CSVFileValuesType resultVector = testReader.read();
+
+    // both vectors should have the same size
+    CPPUNIT_ASSERT_EQUAL(testVector.size(), resultVector.size());
+
+    // test our library method
+    for(size_t i = 0; i < testVectorSize; i++)
+    {
+        CPPUNIT_ASSERT_EQUAL(testVector[i].size(), resultVector[i].size());
+
+        const size_t tokenSize = testVector[i].size();
+
+        for(size_t j = 0; j < tokenSize; j++)
+        {
+            CPPUNIT_ASSERT_EQUAL(testVector[i][j],resultVector[i][j]);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+
+} //namespace fwCsvIO
diff --git a/SrcLib/io/fwDcmtkIO/Properties.cmake b/SrcLib/io/fwDcmtkIO/Properties.cmake
index 18aa8bc..6d07b12 100644
--- a/SrcLib/io/fwDcmtkIO/Properties.cmake
+++ b/SrcLib/io/fwDcmtkIO/Properties.cmake
@@ -20,3 +20,4 @@ set( DEPENDENCIES
     fwZip
     )
 set( REQUIREMENTS )
+set( USE_PCH_FROM_TARGET pchServices )
diff --git a/SrcLib/io/fwDicomIOFilter/Properties.cmake b/SrcLib/io/fwDicomIOFilter/Properties.cmake
index fe61aa8..4aa64c3 100644
--- a/SrcLib/io/fwDicomIOFilter/Properties.cmake
+++ b/SrcLib/io/fwDicomIOFilter/Properties.cmake
@@ -9,3 +9,4 @@ set( DEPENDENCIES
     fwMedData
     fwLog
 )
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp
index 5b8cbd5..a0f5c34 100644
--- a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,10 @@
 #include "fwDicomIOFilter/factory/new.hpp"
 #include "fwDicomIOFilter/registry/detail.hpp"
 
-#include <fwMedData/DicomSeries.hpp>
 #include <fwLog/Logger.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
 #include <fwTools/Object.hpp>
 
 namespace fwDicomIOFilter
@@ -22,8 +24,7 @@ namespace fwDicomIOFilter
 /**
  * @brief Base class for Dicom instance filter.
  */
-class FWDICOMIOFILTER_CLASS_API IFilter :   public ::fwTools::Object,
-                                            public ::fwTools::DynamicAttributes< ::fwDicomIOFilter::IFilter >
+class FWDICOMIOFILTER_CLASS_API IFilter :   public ::fwTools::Object
 {
 public:
 
@@ -99,5 +100,4 @@ protected:
 
 } // namespace fwDicomIOFilter
 
-
 #endif /* __FWDICOMIOFILTER_IFILTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp
index 3165ffe..31eddc6 100644
--- a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #include "fwDicomIOFilter/config.hpp"
 #include "fwDicomIOFilter/registry/detail.hpp"
 
-#include <fwTools/DynamicAttributes.hxx>
-#include <fwTools/macros.hpp>
-
-
 #include <string>
 
 namespace fwDicomIOFilter
@@ -24,7 +20,6 @@ class IFilter;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -41,17 +36,11 @@ 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;
 }
 
@@ -61,4 +50,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWDICOMIOFILTER_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/pch.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/pch.hpp
new file mode 100644
index 0000000..9023d50
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/pch.hpp
@@ -0,0 +1,31 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_PCH_HPP__
+#define __FWGDCMIO_PCH_HPP__
+
+// We need this PCH because of Windows.
+// These files need to be included first in each cpp, don't know why but this has been like this for ages...
+// The #ifdef is just a hack to prevents sheldon from reordering the includes
+#ifdef WIN32
+#include <gdcmSurfaceHelper.h>
+#include <gdcmUIDGenerator.h>
+#endif // WIN32
+
+#include <fwData/Image.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#ifndef WIN32
+#include <gdcmSurfaceHelper.h>
+#include <gdcmUIDGenerator.h>
+#endif // WIN32
+
+#endif // __FWGDCMIO_PCH_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp
index 0b601e4..81934f5 100644
--- a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,6 +12,8 @@
 
 #include <fwMedData/Series.hpp>
 
+#include <boost/filesystem/path.hpp>
+
 namespace fwGdcmIO
 {
 namespace writer
@@ -48,7 +50,6 @@ protected:
     /// Folder Path
     ::boost::filesystem::path m_folderPath;
 
-
 };
 
 } // namespace iod
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp
index 806b432..d0ccc8e 100644
--- a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,6 +11,8 @@
 #include "fwGdcmIO/container/DicomInstance.hpp"
 #include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
 
+#include <boost/filesystem/path.hpp>
+
 namespace fwGdcmIO
 {
 namespace writer
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp
index 562f81e..396c278 100644
--- a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,6 +11,8 @@
 #include "fwGdcmIO/container/DicomInstance.hpp"
 #include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
 
+#include <boost/filesystem/path.hpp>
+
 namespace fwGdcmIO
 {
 namespace writer
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp
index 3995844..6204233 100644
--- a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -29,6 +29,7 @@
 
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/trim.hpp>
+#include <boost/assign.hpp>
 #include <boost/math/special_functions/round.hpp>
 #include <boost/numeric/ublas/io.hpp>
 #include <boost/numeric/ublas/lu.hpp>
@@ -74,7 +75,7 @@ void Image::readImagePlaneModule()
 
     // Image Position (Patient) - Type 1
     const double* gdcmOrigin = gdcmImage.GetOrigin();
-    ::fwData::Image::OriginType origin(3,0);
+    ::fwData::Image::OriginType origin(3, 0);
     if ( gdcmOrigin != 0 )
     {
         std::copy( gdcmOrigin, gdcmOrigin+3, origin.begin() );
@@ -88,15 +89,15 @@ void Image::readImagePlaneModule()
 
     // Image's spacing
     const double* gdcmSpacing = gdcmImage.GetSpacing();
-    ::fwData::Image::SpacingType spacing (3,1);
+    ::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);
+    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"))
     {
@@ -136,7 +137,7 @@ void Image::readVOILUTModule()
     const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
 
     //Image's window center (double)
-    std::string windowCenter = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028,0x1050>(dataset);
+    std::string windowCenter = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028, 0x1050>(dataset);
     std::vector<std::string> splitedWindowCenters;
     if ( !windowCenter.empty() )
     {
@@ -147,7 +148,7 @@ void Image::readVOILUTModule()
     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::string windowWidth = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028, 0x1051>(dataset);
     std::vector<std::string> splitedWindowWidth;
     if ( !windowWidth.empty() )
     {
@@ -170,10 +171,10 @@ std::vector<double> getRescaleInterceptSlopeValue(::gdcm::ImageReader* imageRead
     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)))
+    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);
+        rescale[0] = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028, 0x1052, double>(dataset);
+        rescale[1] = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028, 0x1053, double>(dataset);
     }
 
     return rescale;
@@ -206,14 +207,14 @@ void Image::readImagePixelModule()
 
     // Compute final image type
     ::fwDicomTools::Image imageHelper(
-        samplesPerPixel,bitsAllocated,bitsStored, highBit, pixelRepresentation, rescaleSlope, rescaleIntercept);
+        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);
+    std::string photometricInterpretation = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028, 0x0004>(dataset);
+    std::string pixelPresentation         = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0008, 0x9205>(dataset);
 
     if(photometricInterpretation == "MONOCHROME2")
     {
@@ -262,7 +263,6 @@ void Image::readImagePixelModule()
     char* imageBuffer   = this->readImageBuffer(dimensions, bitsAllocated, targetPixelFormat.GetBitsAllocated(),
                                                 performRescale);
 
-
     // Correct image buffer according to the image orientation
     if(!m_cancelled && m_enableBufferRotation)
     {
@@ -363,7 +363,6 @@ char* Image::readImageBuffer(const std::vector<unsigned int>& dimensions, unsign
             throw ::fwGdcmIO::exception::Failed(ss.str());
         }
 
-
         // Rescale
         if(performRescale)
         {
@@ -397,7 +396,7 @@ char* Image::readImageBuffer(const std::vector<unsigned int>& dimensions, unsign
 
         // 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>(
+        const std::string sopInstanceUID       = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0008, 0x0018>(
             gdcmDatasetRoot);
         if(!sopInstanceUID.empty())
         {
@@ -497,30 +496,30 @@ char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned in
     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;
+    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))
+    if(!::boost::numeric::ublas::detail::expression_type_check(inverseMatrix, identityMatrix))
     {
         // Compute new image size
         VectorType sizeVector(4);
@@ -559,19 +558,19 @@ char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned in
                     // Compute old position
                     VectorType oldPosition = ::boost::numeric::ublas::prod(newPosition, matrix);
                     oldx =
-                        (oldSizeVector[0]>
+                        (oldSizeVector[0] >
                          0) ? static_cast<unsigned short>(oldPosition[0]) : static_cast<unsigned short>((
                                                                                                             dimensions.
                                                                                                             at(0)-1)+
                                                                                                         oldPosition[0]);
                     oldy =
-                        (oldSizeVector[1]>
+                        (oldSizeVector[1] >
                          0) ? static_cast<unsigned short>(oldPosition[1]) : static_cast<unsigned short>((
                                                                                                             dimensions.
                                                                                                             at(1)-1)+
                                                                                                         oldPosition[1]);
                     oldz =
-                        (oldSizeVector[2]>
+                        (oldSizeVector[2] >
                          0) ? static_cast<unsigned short>(oldPosition[2]) : static_cast<unsigned short>((
                                                                                                             dimensions.
                                                                                                             at(2)-1)+
@@ -603,8 +602,8 @@ char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned in
         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);
+        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]);
@@ -616,8 +615,8 @@ char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned in
         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);
+        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];
@@ -635,7 +634,7 @@ char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned in
 Image::MatrixType Image::computeInverseMatrix(MatrixType matrix)
 {
     // Create output matrix (identity)
-    Image::MatrixType output(matrix.size1(),matrix.size2());
+    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
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp
index 0b47527..4f94959 100644
--- a/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp
@@ -1,16 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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>
@@ -18,6 +13,10 @@
 #include <fwGdcmIO/reader/SeriesDB.hpp>
 #include <fwGdcmIO/writer/Series.hpp>
 
+#include <fwData/Image.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/Patient.hpp>
@@ -37,7 +36,6 @@
 #include <boost/filesystem/convenience.hpp>
 #include <boost/filesystem/path.hpp>
 
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::DicomAnonymizerTest );
 
@@ -146,63 +144,71 @@ void DicomAnonymizerTest::testDICOMFolder(const ::boost::filesystem::path& srcPa
         ::gdcm::DataSet& dataset = gdcmFile.GetDataSet();
 
         std::string data;
-        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x9161>(dataset);    //Concatenation UID
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        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
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008, 0x1195>(dataset);    //Transaction UID
         m_uidContainer.insert(data);
-        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040,0xA124>(dataset);    //UID
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040, 0xA124>(dataset);    //UID
         m_uidContainer.insert(data);
     }
     m_uidContainer.erase("");
@@ -258,7 +264,7 @@ std::string getDummyValue(const ::gdcm::Tag& tag)
         case ::gdcm::VR::CS:
         {
             //Patient’s Sex
-            if(tag == ::gdcm::Tag(0x0010,0x0040))
+            if(tag == ::gdcm::Tag(0x0010, 0x0040))
             {
                 return "O";
             }
@@ -377,7 +383,7 @@ 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);
+    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)
@@ -387,9 +393,10 @@ void processTag(const ::gdcm::DataSet& dataset, const std::string& actionCode,
     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());
+        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
+    //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")
@@ -398,11 +405,11 @@ void processTag(const ::gdcm::DataSet& dataset, const std::string& actionCode,
                                                                                              ELEMENT)).GetVR() ==
            ::gdcm::VR::SQ)
         {
-            CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)) || dataStr.empty());
+            CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP, ELEMENT)) || dataStr.empty());
         }
         else
         {
-            CPPUNIT_ASSERT_EQUAL(getDummyValue(::gdcm::Tag(GROUP,ELEMENT)), dataStr);
+            CPPUNIT_ASSERT_EQUAL(getDummyValue(::gdcm::Tag(GROUP, ELEMENT)), dataStr);
         }
     }
     //K – keep (unchanged for non-sequence attributes, cleaned for sequences)
@@ -412,10 +419,11 @@ void processTag(const ::gdcm::DataSet& dataset, const std::string& actionCode,
                                                                                              ELEMENT)).GetVR() ==
            ::gdcm::VR::SQ)
         {
-            CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)) || dataStr.empty());
+            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
+    //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...");
@@ -438,249 +446,255 @@ void DicomAnonymizerTest::testAnonymizedFile(const std::string& filename)
     ::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<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, 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<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<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
+    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
 
 }
 
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp
index 3b4e1c3..677ea43 100644
--- a/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp
@@ -1,19 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwDataCamp/visitor/CompareObjects.hpp>
+
 #include <fwMedData/DicomSeries.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
@@ -37,6 +35,8 @@ namespace fwGdcmIO
 namespace ut
 {
 
+//------------------------------------------------------------------------------
+
 void DicomSeriesWriterTest::setUp()
 {
     // Set up context before running a test.
@@ -46,7 +46,6 @@ void DicomSeriesWriterTest::setUp()
     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);
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp
index 6c59b58..f7f3c2d 100644
--- a/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp
@@ -1,16 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwGdcmIO/reader/SeriesDB.hpp>
+#include <fwGdcmIO/writer/Series.hpp>
+#include <fwGdcmIO/writer/SeriesDB.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>
@@ -21,10 +24,6 @@
 #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>
@@ -55,10 +54,12 @@ 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);
+    std::transform(spacing.begin(), spacing.end(), spacing.begin(), tolerance);
     image->setSpacing(spacing);
 }
 
diff --git a/SrcLib/io/fwItkIO/Properties.cmake b/SrcLib/io/fwItkIO/Properties.cmake
index ce2e158..6d305f2 100644
--- a/SrcLib/io/fwItkIO/Properties.cmake
+++ b/SrcLib/io/fwItkIO/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwCore fwData fwDataIO fwTools )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
index 3827b63..56df11f 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,27 @@
 
 #include <fwTools/DynamicType.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 )
 {
     SLM_ASSERT("_dataImage not instanced", _dataImage);
 
-
     // Add by arnaud
     ::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::SpacingType _vSpacing(dim, 1);
+    ::fwData::Image::OriginType _vOrigin(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];
@@ -63,9 +63,8 @@ void dataImageFactory( typename ITKIMAGE::Pointer itkImage, ::fwData::Image::spt
                                _dataImage->getType(), _vSize, 1 );
     }
 
-
     // Post Condition correct PixelType
-    SLM_ASSERT("Sorry, pixel type is not correct", _dataImage->getType()!= fwTools::Type() );
+    SLM_ASSERT("Sorry, pixel type is not correct", _dataImage->getType() != fwTools::Type() );
 }
 
 //------------------------------------------------------------------------------
@@ -74,7 +73,7 @@ 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;
 }
 
@@ -101,7 +100,7 @@ typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::csptr imageDa
 
     // 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];
     }
@@ -116,7 +115,7 @@ typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::csptr imageDa
     itk::ImageRegion< ITKIMAGE::ImageDimension > itkRegion;
 
     unsigned long nbpixels = 1;
-    for (::boost::uint8_t d = 0; d<ITKIMAGE::ImageDimension; ++d)
+    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]) );
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
index 989c44d..844b11a 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,17 @@
 #ifndef __FWITKIO_ITKPP_HXX__
 #define __FWITKIO_ITKPP_HXX__
 
-#include <fwTools/DynamicType.hpp>
+#include "fwItkIO/itk.hpp"
 
-#include <assert.h>
+#include <fwTools/DynamicType.hpp>
 
 #include <itkCastImageFilter.h>
 
-#include "fwItkIO/itk.hpp"
-
 namespace fwItkIO
 {
 
+//------------------------------------------------------------------------------
+
 template< class PIXELTYPE, int VDimension, class ScannerType >
 typename ScannerType::Pointer  itkppScannerFactory( ::fwData::Image::sptr imageData)
 {
diff --git a/SrcLib/io/fwPacsIO/Properties.cmake b/SrcLib/io/fwPacsIO/Properties.cmake
index 253a4b9..012fed2 100644
--- a/SrcLib/io/fwPacsIO/Properties.cmake
+++ b/SrcLib/io/fwPacsIO/Properties.cmake
@@ -12,3 +12,4 @@ set( DEPENDENCIES
     fwDcmtkTools
     )
 set( REQUIREMENTS )
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp
index fa3e66f..fe6ffbe 100644
--- a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,18 @@
 #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>
 
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/scu.h>
+
 namespace fwPacsIO
 {
 
@@ -98,7 +97,6 @@ public:
      */
     FWPACSIO_API OFList< QRResponse* > findSeriesByUID(const std::string& uid);
 
-
     /**
      * @brief Find SOPInstanceUID of the specified instance
      * @param[in] seriesInstanceUID Series instance UID
@@ -171,7 +169,6 @@ protected:
      */
     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);
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp
index d7298c3..b783a36 100644
--- a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __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/config/osconfig.h>
 #include <dcmtk/dcmnet/scp.h>
 
 namespace fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp b/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp
index 4a027ed..96b1e1f 100644
--- a/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp
+++ b/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp
@@ -1,25 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 <fwDcmtkIO/helper/DicomSearch.hpp>
+
 #include <fwTest/Data.hpp>
 #include <fwTest/Exception.hpp>
 
 #include <fwThread/Worker.hpp>
 
-#include <fwTools/System.hpp>
-
-#include <boost/chrono/chrono.hpp>
+#include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
-#include <boost/thread/thread.hpp>
 
 #include <dcmtk/config/osconfig.h>
 
@@ -117,7 +114,6 @@ void SeriesEnquirerTest::pushSeries()
     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());
diff --git a/SrcLib/io/fwVtkIO/Properties.cmake b/SrcLib/io/fwVtkIO/Properties.cmake
index f7484ac..a729edc 100644
--- a/SrcLib/io/fwVtkIO/Properties.cmake
+++ b/SrcLib/io/fwVtkIO/Properties.cmake
@@ -13,4 +13,4 @@ set( DEPENDENCIES
     fwJobs
 )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
index bae6c0e..1f8edec 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,11 @@
 #ifndef __FWVTKIO_VTK_HPP__
 #define __FWVTKIO_VTK_HPP__
 
+#include "fwVtkIO/config.hpp"
 
 #include <fwData/Image.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 
-#include "fwVtkIO/config.hpp"
-
-
 // forward declaration
 class vtkPolyData;
 class vtkImageData;
@@ -30,9 +28,8 @@ struct TypeTranslator
     typedef std::map< ::fwTools::Type, int> fwToolsToVtkMap;
     typedef std::map< int, ::fwTools::Type> VtkTofwToolsMap;
 
-    static fwToolsToVtkMap::mapped_type translate( const fwToolsToVtkMap::key_type &key );
-
-    static VtkTofwToolsMap::mapped_type translate( const VtkTofwToolsMap::key_type &key );
+    FWVTKIO_API static fwToolsToVtkMap::mapped_type translate( const fwToolsToVtkMap::key_type& key );
+    FWVTKIO_API static VtkTofwToolsMap::mapped_type translate( const VtkTofwToolsMap::key_type& key );
 
     static const fwToolsToVtkMap s_toVtk;
     static const VtkTofwToolsMap s_fromVtk;
@@ -57,7 +54,7 @@ FWVTKIO_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)
  *
  */
-FWVTKIO_API void toVTKImage( ::fwData::Image::csptr _data,  vtkImageData *dst);
+FWVTKIO_API void toVTKImage( ::fwData::Image::csptr _data,  vtkImageData* dst);
 
 /*!
  * @brief Convert a vtkImageData* to a ::fwData::Image::sptr.
@@ -75,7 +72,7 @@ FWVTKIO_API void fromVTKImage( vtkImageData* _source, ::fwData::Image::sptr _des
  * @param[in] _pDataImage ::fwData::Image::sptr.
  * @param[out] _pImageImport vtkImageImport*.
  */
-FWVTKIO_API void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fwData::Image::csptr _pDataImage );
+FWVTKIO_API void configureVTKImageImport( ::vtkImageImport* _pImageImport, ::fwData::Image::csptr _pDataImage );
 
 /*!
  * @brief Convert a ::fwData::TransformationMatrix3D::sptr to a vtkMatrix4x4*.
@@ -83,7 +80,7 @@ FWVTKIO_API void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fw
  * @param[in] _transfoMatrix ::fwData::TransformationMatrix3D::sptr.
  * @return vtkPolyData*.
  */
-FWVTKIO_API vtkMatrix4x4 *  toVTKMatrix(  ::fwData::TransformationMatrix3D::sptr _transfoMatrix );
+FWVTKIO_API vtkMatrix4x4*  toVTKMatrix(  ::fwData::TransformationMatrix3D::sptr _transfoMatrix );
 
 /*!
  * @brief Convert a vtkMatrix4x4* to a ::fwData::TransformationMatrix3D::sptr.
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
index d65620e..34827c8 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
@@ -1,53 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
-#include <cstring>
-#include <functional>
-#include <numeric>
-#include <stdexcept>
+#include "fwVtkIO/vtk.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/ObjectLock.hpp>
+
+#include <fwDataTools/helper/Image.hpp>
+#include <fwDataTools/helper/ImageGetter.hpp>
+
+#include <fwMath/MeshFunctions.hpp>
 
 #include <boost/assign/list_of.hpp>
 #include <boost/cast.hpp>
 
-#include <vtkImageImport.h>
-#include <vtkSetGet.h>
-#include <vtkType.h>
-
-// for mesh
 #include <vtkCell.h>
 #include <vtkCellType.h>
-#include <vtkPoints.h>
-#include <vtkPolyData.h>
-#include <vtkUnstructuredGrid.h>
-#include <vtkPolyDataWriter.h>
+#include <vtkDataArray.h>
+#include <vtkDataSetAttributes.h>
 #include <vtkImageData.h>
-#include <vtkImageImport.h>
 #include <vtkImageExport.h>
-#include <vtkMatrix4x4.h>
-#include <vtkPolyDataNormals.h>
+#include <vtkImageImport.h>
 #include <vtkLookupTable.h>
-
-#include <vtkDataSetAttributes.h>
-#include <vtkDataArray.h>
+#include <vtkMatrix4x4.h>
 #include <vtkPointData.h>
+#include <vtkPoints.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataNormals.h>
+#include <vtkPolyDataWriter.h>
+#include <vtkSetGet.h>
 #include <vtkSmartPointer.h>
+#include <vtkType.h>
+#include <vtkUnstructuredGrid.h>
 
-#include <fwMath/MeshFunctions.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/ObjectLock.hpp>
-
-#include <fwDataTools/helper/Image.hpp>
-#include <fwDataTools/helper/ImageGetter.hpp>
-
-#include "fwVtkIO/vtk.hpp"
-
+#include <cstring>
+#include <functional>
+#include <numeric>
+#include <stdexcept>
 
 namespace fwVtkIO
 {
 
+// ------------------------------------------------------------------------------
 
 TypeTranslator::fwToolsToVtkMap::mapped_type TypeTranslator::translate(
     const TypeTranslator::fwToolsToVtkMap::key_type& key )
@@ -57,6 +53,8 @@ TypeTranslator::fwToolsToVtkMap::mapped_type TypeTranslator::translate(
     return it->second;
 }
 
+// ------------------------------------------------------------------------------
+
 TypeTranslator::VtkTofwToolsMap::mapped_type TypeTranslator::translate(
     const TypeTranslator::VtkTofwToolsMap::key_type& key )
 {
@@ -65,9 +63,6 @@ TypeTranslator::VtkTofwToolsMap::mapped_type TypeTranslator::translate(
     return it->second;
 }
 
-
-
-
 const TypeTranslator::fwToolsToVtkMap TypeTranslator::s_toVtk
     = boost::assign::map_list_of
       // char and signed char are treated as the same type.
@@ -90,9 +85,6 @@ const TypeTranslator::fwToolsToVtkMap TypeTranslator::s_toVtk
 #endif
     ;
 
-
-
-
 const TypeTranslator::VtkTofwToolsMap TypeTranslator::s_fromVtk
     = boost::assign::map_list_of
 
@@ -126,8 +118,7 @@ const TypeTranslator::VtkTofwToolsMap TypeTranslator::s_fromVtk
 #endif
     ;
 
-
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 void toVTKImage( ::fwData::Image::csptr data,  vtkImageData* dst)
 {
@@ -140,8 +131,7 @@ void toVTKImage( ::fwData::Image::csptr data,  vtkImageData* dst)
     dst->ShallowCopy(importer->GetOutput());
 }
 
-//-----------------------------------------------------------------------------
-
+// -----------------------------------------------------------------------------
 
 template< typename IMAGETYPE >
 void* newBuffer(size_t size)
@@ -153,16 +143,16 @@ void* newBuffer(size_t size)
     }
     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() );
+        OSLM_ERROR("No enough memory to allocate an image of type "
+                   << fwTools::makeDynamicType<IMAGETYPE>().string()
+                   << " and of size "<< size << "." << std::endl
+                   << e.what() );
         throw;
     }
     return destBuffer;
 }
 
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 template< typename IMAGETYPE >
 void fromRGBBuffer( void* input, size_t size, void*& destBuffer)
@@ -175,7 +165,7 @@ void fromRGBBuffer( void* input, size_t size, void*& destBuffer)
     IMAGETYPE* destBufferTyped = (IMAGETYPE*)destBuffer;
     IMAGETYPE* inputTyped      = (IMAGETYPE*)input;
     IMAGETYPE* finalPtr        = ((IMAGETYPE*)destBuffer) + size;
-    IMAGETYPE valR, valG,valB;
+    IMAGETYPE valR, valG, valB;
 
     while (destBufferTyped < finalPtr)
     {
@@ -186,8 +176,7 @@ void fromRGBBuffer( void* input, size_t size, void*& destBuffer)
     }
 }
 
-
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 template< typename IMAGETYPE >
 void fromRGBBufferColor( void* input, size_t size, void*& destBuffer)
@@ -207,8 +196,7 @@ void fromRGBBufferColor( void* input, size_t size, void*& destBuffer)
     }
 }
 
-//-----------------------------------------------------------------------------
-
+// -----------------------------------------------------------------------------
 
 void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
 {
@@ -253,56 +241,33 @@ void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
         destination->setOrigin( ::fwData::Image::OriginType(source->GetOrigin(), source->GetOrigin()+dim) );
     }
 
-
-    size_t size = std::accumulate(source->GetDimensions(), source->GetDimensions()+dim, 3, std::multiplies<size_t>() );
-    void* input = source->GetScalarPointer();
+    const int nbComponents = source->GetNumberOfScalarComponents();
+    const size_t size      =
+        std::accumulate(source->GetDimensions(), source->GetDimensions()+dim, std::max(3,
+                                                                                       nbComponents),
+                        std::multiplies<size_t>() );
+    const void* input = source->GetScalarPointer();
 
     if (size != 0)
     {
         void* destBuffer;
-        int nbBytePerPixel = source->GetScalarSize();
-        int nbComponents   = source->GetNumberOfScalarComponents();
+        const int nbBytePerPixel = source->GetScalarSize();
         OSLM_TRACE("image size : " << size << " - nbBytePerPixel : " << nbBytePerPixel );
 
-        destination->setNumberOfComponents(3);
-        if (nbComponents == 3 && nbBytePerPixel == 2)
-        {
-            SLM_TRACE ("RGB 16bits");
-
-            destination->setType( "uint16" );
-            destination->allocate();
-            ::fwData::ObjectLock lock(destination);
-            destBuffer = imageHelper.getBuffer();
-            SLM_ASSERT("Image allocation error", destBuffer != NULL);
-            fromRGBBufferColor< unsigned short >(input, size, destBuffer);
-        }
-        else if (nbComponents == 3 && nbBytePerPixel == 1)
-        {
-            SLM_TRACE ("RGB 8bits");
-
-            destination->setType( "uint8" );
-            destination->allocate();
-            ::fwData::ObjectLock lock(destination);
-            destBuffer = imageHelper.getBuffer();
-            SLM_ASSERT("Image allocation error", destBuffer != NULL);
-            fromRGBBufferColor< unsigned char >(input, size, destBuffer);
-        }
-        else
-        {
-            SLM_TRACE ("Luminance image");
-            destination->setType( TypeTranslator::translate( source->GetScalarType() ) );
-            destination->setNumberOfComponents(nbComponents);
-            destination->allocate();
-            ::fwData::ObjectLock lock(destination);
-            destBuffer = imageHelper.getBuffer();
-            size_t sizeInBytes = destination->getSizeInBytes();
-            std::memcpy(destBuffer, input, sizeInBytes);
-        }
+        OSLM_TRACE(nbComponents << " components, " << TypeTranslator::translate( source->GetScalarType() ));
+        destination->setType( TypeTranslator::translate( source->GetScalarType() ) );
+        destination->setNumberOfComponents(nbComponents);
+        destination->allocate();
+        ::fwData::ObjectLock lock(destination);
+        destBuffer = imageHelper.getBuffer();
+        const size_t sizeInBytes = destination->getSizeInBytes();
+        std::memcpy(destBuffer, input, sizeInBytes);
+
     }
 
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void configureVTKImageImport( ::vtkImageImport* _pImageImport, ::fwData::Image::csptr _pDataImage )
 {
@@ -333,14 +298,14 @@ void configureVTKImageImport( ::vtkImageImport* _pImageImport, ::fwData::Image::
     _pImageImport->SetDataScalarType( TypeTranslator::translate(_pDataImage->getType()) );
 }
 
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 vtkMatrix4x4*  toVTKMatrix( ::fwData::TransformationMatrix3D::sptr _transfoMatrix )
 {
     vtkMatrix4x4* matrix = vtkMatrix4x4 ::New();
-    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++)
         {
             matrix->SetElement(l, c, _transfoMatrix->getCoefficient(l, c));
         }
@@ -348,22 +313,22 @@ vtkMatrix4x4*  toVTKMatrix( ::fwData::TransformationMatrix3D::sptr _transfoMatri
     return matrix;
 }
 
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 bool fromVTKMatrix( vtkMatrix4x4* _matrix, ::fwData::TransformationMatrix3D::sptr _transfoMatrix)
 {
     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));
+            _transfoMatrix->setCoefficient(l, c, _matrix->GetElement(l, c));
         }
     }
     return res;
 }
 
-//-----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
 
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
index 30489ae..b9d48c1 100644
--- a/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
+++ b/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
@@ -1,11 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "ImageTest.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 <fwData/Image.hpp>
 
 #include <fwDataTools/helper/Image.hpp>
@@ -16,25 +24,18 @@
 
 #include <fwTools/System.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 <boost/assign/list_of.hpp>
+#include <boost/assign/std/vector.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
 
 #include <vtkGenericDataObjectReader.h>
 #include <vtkImageData.h>
+#include <vtkPointData.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 );
 
@@ -76,6 +77,13 @@ static const ::fwData::Image::OriginType bostonTeapotOrigin   = list_of(1.1)(2.2
                               static_cast< ::fwData::Image::SizeType::value_type >(size[2]) );                              \
     }
 
+#define COMPARE_IMAGE_FULL_ATTRS_MACRO(expSize, expSpacing, expOrigin, expNbComponents, size, spacing, origin, \
+                                       nbComponents)                                                                                        \
+    {  \
+        COMPARE_IMAGE_ATTRS_MACRO(expSize, expSpacing, expOrigin, size, spacing, origin) \
+        CPPUNIT_ASSERT_EQUAL( static_cast< size_t >(expNbComponents), \
+                              static_cast< size_t >( nbComponents) );  \
+    }
 
 #define WRITER_TEST(writerclass, readerclass, imagetype, filename)                                                                 \
     {                                                                                                                                  \
@@ -112,22 +120,22 @@ static const ::fwData::Image::OriginType bostonTeapotOrigin   = list_of(1.1)(2.2
             )                                                                                                                      \
     }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::setUp()
 {
     // Set up context before running a test.
-    srand(time(NULL));
+    srand(static_cast<unsigned int>(time(NULL)));
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::tearDown()
 {
     // Clean up after the test run.
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::testImageToVtk()
 {
@@ -193,8 +201,7 @@ void ImageTest::testImageToVtk()
 
 }
 
-//------------------------------------------------------------------------------
-
+// ------------------------------------------------------------------------------
 
 void ImageTest::testFromVtk()
 {
@@ -237,6 +244,40 @@ void ImageTest::testFromVtk()
         CPPUNIT_ASSERT( std::equal(ptr, ptr + image->getSizeInBytes(), vtkPtr) );                                      \
     }
 
+    #define IMAGE_FROM_VTK_GEN_TEST(nbComponents, type)                                                                   \
+    {                                                                                                                  \
+        vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();                              \
+        \
+        CPPUNIT_ASSERT(vtkImage);  \
+        vtkImage->SetDimensions(64, 64, 1); \
+        vtkImage->SetSpacing(1.0, 1.0, 0.0); \
+        int dataType = ::fwVtkIO::TypeTranslator::translate(::fwTools::Type::create(type)); \
+        vtkImage->AllocateScalars(dataType, nbComponents);     \
+        \
+        ::fwData::Image::sptr image = ::fwData::Image::New();                                                          \
+        ::fwVtkIO::fromVTKImage(vtkImage, image);                                                                      \
+        \
+        ::fwDataTools::helper::Image imageHelper(image);                                                                   \
+        \
+        COMPARE_IMAGE_FULL_ATTRS_MACRO(                                                                                     \
+            vtkImage->GetDimensions(),                                                                             \
+            vtkImage->GetSpacing(),                                                                                \
+            vtkImage->GetOrigin(),                                                                                  \
+            vtkImage->GetPointData()->GetScalars()->GetNumberOfComponents(),                                                                      \
+                \
+            image->getSize(),                                                                                      \
+            image->getSpacing(),                                                                                   \
+            image->getOrigin(),                                                                                     \
+            image->getNumberOfComponents()                                                                          \
+            );  \
+        CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" type "> Failed ", ::fwTools::Type(type), image->getType() );    \
+        \
+        char* vtkPtr = static_cast<char*>(vtkImage->GetScalarPointer());                                               \
+        char* ptr    = static_cast<char*>(imageHelper.getBuffer());                                                       \
+        \
+        CPPUNIT_ASSERT( std::equal(ptr, ptr + image->getSizeInBytes(), vtkPtr) );           \
+    }
+
 #define GENERATED_IMAGE_FROM_VTK_TEST(type)                        \
     IMAGE_FROM_VTK_TEST("fw4spl/image/vtk/img-" type ".vtk", type)
 
@@ -256,9 +297,11 @@ void ImageTest::testFromVtk()
 
     GENERATED_IMAGE_FROM_VTK_TEST("float" );
     GENERATED_IMAGE_FROM_VTK_TEST("double");
+
+    IMAGE_FROM_VTK_GEN_TEST(4, "uint8");
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::mhdReaderTest()
 {
@@ -285,7 +328,7 @@ void ImageTest::mhdReaderTest()
 
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::mhdWriterTest()
 {
@@ -321,14 +364,12 @@ void ImageTest::mhdWriterTest()
     ::boost::filesystem::remove(testFile);
     ::boost::filesystem::remove(testZRawFile);
 
-
-
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"int8", "imageTest.mhd");
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"uint8", "imageTest.mhd");
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"int16", "imageTest.mhd");
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"uint16", "imageTest.mhd");
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"int32", "imageTest.mhd");
-    WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"uint32", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "int8", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "uint8", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "int16", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "uint16", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "int32", "imageTest.mhd");
+    WRITER_TEST(::fwVtkIO::MetaImageWriter, ::fwVtkIO::MetaImageReader, "uint32", "imageTest.mhd");
     // WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"int64", "imageTest.mhd");
     // WRITER_TEST(::fwVtkIO::MetaImageWriter,::fwVtkIO::MetaImageReader,"uint64", "imageTest.mhd");
 
@@ -336,7 +377,7 @@ void ImageTest::mhdWriterTest()
     ::boost::filesystem::remove(zFile);
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::vtiReaderTest()
 {
@@ -362,26 +403,24 @@ void ImageTest::vtiReaderTest()
         image->getOrigin()
         );
 
-
-
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::vtiWriterTest()
 {
 
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"int8", "imageTest.vti");
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"uint8", "imageTest.vti");
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"int16", "imageTest.vti");
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"uint16", "imageTest.vti");
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"int32", "imageTest.vti");
-    WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"uint32", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "int8", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "uint8", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "int16", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "uint16", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "int32", "imageTest.vti");
+    WRITER_TEST(::fwVtkIO::VtiImageWriter, ::fwVtkIO::VtiImageReader, "uint32", "imageTest.vti");
     // WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"int64", "imageTest.vti");
     // WRITER_TEST(::fwVtkIO::VtiImageWriter,::fwVtkIO::VtiImageReader,"uint64", "imageTest.vti");
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::vtkReaderTest()
 {
@@ -398,13 +437,13 @@ void ImageTest::vtkReaderTest()
     reader->read();
 
     ::fwData::Image::SizeType vtkSize;
-    vtkSize += 230,170,58;
+    vtkSize += 230, 170, 58;
 
     ::fwData::Image::SpacingType vtkSpacing;
     vtkSpacing += 1.732, 1.732, 3.2;
 
     ::fwData::Image::OriginType vtkOrigin;
-    vtkOrigin += 34.64,86.6,56;
+    vtkOrigin += 34.64, 86.6, 56;
 
     COMPARE_IMAGE_ATTRS_MACRO(
         vtkSize,
@@ -416,7 +455,6 @@ void ImageTest::vtkReaderTest()
         image->getOrigin()
         );
 
-
 #define VTK_READER_TEST(imagetype)                                                                                      \
     {                                                                                                                   \
         const ::boost::filesystem::path testFile(::fwTest::Data::dir() / "fw4spl/image/vtk/img-" imagetype ".vtk");     \
@@ -449,7 +487,6 @@ void ImageTest::vtkReaderTest()
             );                                                                                                          \
     }
 
-
     VTK_READER_TEST("int8"  );
     VTK_READER_TEST("uint8" );
     VTK_READER_TEST("int16" );
@@ -462,21 +499,21 @@ void ImageTest::vtkReaderTest()
     VTK_READER_TEST("double");
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 void ImageTest::vtkWriterTest()
 {
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"int8", "imageTest.vtk");
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"uint8", "imageTest.vtk");
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"int16", "imageTest.vtk");
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"uint16", "imageTest.vtk");
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"int32", "imageTest.vtk");
-    WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"uint32", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "int8", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "uint8", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "int16", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "uint16", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "int32", "imageTest.vtk");
+    WRITER_TEST(::fwVtkIO::ImageWriter, ::fwVtkIO::ImageReader, "uint32", "imageTest.vtk");
     // WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"int64", "imageTest.vtk");
     // WRITER_TEST(::fwVtkIO::ImageWriter,::fwVtkIO::ImageReader,"uint64", "imageTest.vtk");
 }
 
-//------------------------------------------------------------------------------
+// ------------------------------------------------------------------------------
 
 } // namespace ut
 } // namespace fwVtkIO
diff --git a/SrcLib/io/vtkGdcmIO/Properties.cmake b/SrcLib/io/vtkGdcmIO/Properties.cmake
index 0543006..506a36a 100644
--- a/SrcLib/io/vtkGdcmIO/Properties.cmake
+++ b/SrcLib/io/vtkGdcmIO/Properties.cmake
@@ -12,5 +12,4 @@ set( DEPENDENCIES
     fwVtkIO
     fwJobs
 )
-set( REQUIREMENTS  )
-
+set( REQUIREMENTS )
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp b/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
index da39e82..1ac51a7 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
@@ -1,29 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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/convenience.hpp>
-
-#include <fwTools/System.hpp>
+#include "ImageSeriesWriterTest.hpp"
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include <vtkGdcmIO/ImageSeriesWriter.hpp>
+#include <vtkGdcmIO/SeriesDBReader.hpp>
 
-#include <fwData/Object.hpp>
 #include <fwData/Image.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
 #include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
 
-#include <fwTest/generator/SeriesDB.hpp>
 #include <fwTest/generator/Image.hpp>
+#include <fwTest/generator/SeriesDB.hpp>
 
-#include <vtkGdcmIO/ImageSeriesWriter.hpp>
-#include <vtkGdcmIO/SeriesDBReader.hpp>
+#include <fwTools/System.hpp>
 
-#include "ImageSeriesWriterTest.hpp"
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::vtkGdcmIO::ut::ImageSeriesWriterTest );
diff --git a/SrcLib/patch/fwMDSemanticPatch/Properties.cmake b/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
index 4e09dce..47173a7 100644
--- a/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
+++ b/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwAtoms fwAtomsPatch fwCore fwTools fwMedData)
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions
index 86002d3..0dc9772 100644
--- a/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions
@@ -38,10 +38,12 @@
         "::fwData::location::Folder": "1",
         "::fwData::location::SingleFile": "1",
         "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::AttachmentSeries": "1",
         "::fwMedData::DicomSeries": "1",
         "::fwMedData::Equipment": "1",
         "::fwMedData::ImageSeries": "1",
         "::fwMedData::ModelSeries": "1",
+        "::fwMedData::NavigationSeries": "1",
         "::fwMedData::Patient": "1",
         "::fwMedData::Series": "1",
         "::fwMedData::SeriesDB": "1",
diff --git a/SrcLib/patch/fwStructuralPatch/Properties.cmake b/SrcLib/patch/fwStructuralPatch/Properties.cmake
index 1700008..4bd47a5 100644
--- a/SrcLib/patch/fwStructuralPatch/Properties.cmake
+++ b/SrcLib/patch/fwStructuralPatch/Properties.cmake
@@ -4,4 +4,4 @@ set( VERSION 0.1 )
 set( TYPE LIBRARY )
 set( DEPENDENCIES fwAtoms fwAtomsPatch fwTools fwCore )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/pch/pchCore/CMakeLists.txt
similarity index 95%
copy from SrcLib/core/fwDataCamp/CMakeLists.txt
copy to SrcLib/pch/pchCore/CMakeLists.txt
index 1c29206..15cd4c1 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/pch/pchCore/CMakeLists.txt
@@ -1,2 +1 @@
 fwLoadProperties()
-
diff --git a/SrcLib/pch/pchCore/Properties.cmake b/SrcLib/pch/pchCore/Properties.cmake
new file mode 100644
index 0000000..175cdac
--- /dev/null
+++ b/SrcLib/pch/pchCore/Properties.cmake
@@ -0,0 +1,6 @@
+
+set( NAME pchCore )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES fwCore )
+set( REQUIREMENTS )
diff --git a/SrcLib/pch/pchCore/include/pchCore/pch.hpp b/SrcLib/pch/pchCore/include/pchCore/pch.hpp
new file mode 100644
index 0000000..76fddca
--- /dev/null
+++ b/SrcLib/pch/pchCore/include/pchCore/pch.hpp
@@ -0,0 +1,41 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PCHCORE_PCH_HPP__
+#define __PCHCORE_PCH_HPP__
+
+#include <fwCore/Demangler.hpp>
+#include <fwCore/LogicStamp.hpp>
+#include <fwCore/TimeStamp.hpp>
+#include <fwCore/base.hpp>
+#include <fwCore/util/FactoryRegistry.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/graph/named_graph.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/mpl/accumulate.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/copy.hpp>
+#include <boost/mpl/empty.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/placeholders.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/transform.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/type_traits.hpp>
+
+#include <cstdint>
+#include <exception>
+#include <functional>
+#include <map>
+#include <string>
+#include <typeinfo>
+#include <unordered_map>
+#include <vector>
+
+#endif // __PCHCORE_PCH_HPP__
diff --git a/SrcLib/pch/pchCore/src/pchCore/pch.cpp b/SrcLib/pch/pchCore/src/pchCore/pch.cpp
new file mode 100644
index 0000000..d36d54b
--- /dev/null
+++ b/SrcLib/pch/pchCore/src/pchCore/pch.cpp
@@ -0,0 +1,11 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "pchCore/pch.hpp"
+
+// Empty source file
+// This is only to get a source file compiled, otherwise CMake would consider this target as an utility target
+// And the pch would not be generated properly
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/pch/pchData/CMakeLists.txt
similarity index 95%
copy from SrcLib/core/fwDataCamp/CMakeLists.txt
copy to SrcLib/pch/pchData/CMakeLists.txt
index 1c29206..15cd4c1 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/pch/pchData/CMakeLists.txt
@@ -1,2 +1 @@
 fwLoadProperties()
-
diff --git a/SrcLib/pch/pchData/Properties.cmake b/SrcLib/pch/pchData/Properties.cmake
new file mode 100644
index 0000000..2e66f64
--- /dev/null
+++ b/SrcLib/pch/pchData/Properties.cmake
@@ -0,0 +1,6 @@
+
+set( NAME pchData )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES fwCom fwData )
+set( REQUIREMENTS )
diff --git a/SrcLib/pch/pchData/include/pchData/pch.hpp b/SrcLib/pch/pchData/include/pchData/pch.hpp
new file mode 100644
index 0000000..b020d58
--- /dev/null
+++ b/SrcLib/pch/pchData/include/pchData/pch.hpp
@@ -0,0 +1,22 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PCHDATA_PCH_HPP__
+#define __PCHDATA_PCH_HPP__
+
+#ifndef _WIN32
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#endif // _WIN32
+
+#include <fwData/Image.hpp>
+#include <fwData/Object.hpp>
+
+#endif // __PCHDATA_PCH_HPP__
diff --git a/SrcLib/pch/pchData/src/pchData/pch.cpp b/SrcLib/pch/pchData/src/pchData/pch.cpp
new file mode 100644
index 0000000..9bb283f
--- /dev/null
+++ b/SrcLib/pch/pchData/src/pchData/pch.cpp
@@ -0,0 +1,11 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "pchData/pch.hpp"
+
+// Empty source file
+// This is only to get a source file compiled, otherwise CMake would consider this target as an utility target
+// And the pch would not be generated properly
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/pch/pchServices/CMakeLists.txt
similarity index 95%
copy from SrcLib/core/fwDataCamp/CMakeLists.txt
copy to SrcLib/pch/pchServices/CMakeLists.txt
index 1c29206..15cd4c1 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/pch/pchServices/CMakeLists.txt
@@ -1,2 +1 @@
 fwLoadProperties()
-
diff --git a/SrcLib/pch/pchServices/Properties.cmake b/SrcLib/pch/pchServices/Properties.cmake
new file mode 100644
index 0000000..914e07f
--- /dev/null
+++ b/SrcLib/pch/pchServices/Properties.cmake
@@ -0,0 +1,6 @@
+
+set( NAME pchServices )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES fwServices)
+set( REQUIREMENTS )
diff --git a/SrcLib/pch/pchServices/include/pchServices/pch.hpp b/SrcLib/pch/pchServices/include/pchServices/pch.hpp
new file mode 100644
index 0000000..d6daa17
--- /dev/null
+++ b/SrcLib/pch/pchServices/include/pchServices/pch.hpp
@@ -0,0 +1,27 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PCHSERVICES_PCH_HPP__
+#define __PCHSERVICES_PCH_HPP__
+
+// Cause an internal compiler error on windows...
+#ifndef _WIN32
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#endif // _WIN32
+
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/tokenizer.hpp>
+
+#endif // __PCHSERVICES_PCH_HPP__
diff --git a/SrcLib/pch/pchServices/src/pchServices/pch.cpp b/SrcLib/pch/pchServices/src/pchServices/pch.cpp
new file mode 100644
index 0000000..8cdcc06
--- /dev/null
+++ b/SrcLib/pch/pchServices/src/pchServices/pch.cpp
@@ -0,0 +1,11 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "pchServices/pch.hpp"
+
+// Empty source file
+// This is only to get a source file compiled, otherwise CMake would consider this target as an utility target
+// And the pch would not be generated properly
diff --git a/SrcLib/tests/fwTest/Properties.cmake b/SrcLib/tests/fwTest/Properties.cmake
index 72a815e..af7df4b 100644
--- a/SrcLib/tests/fwTest/Properties.cmake
+++ b/SrcLib/tests/fwTest/Properties.cmake
@@ -12,4 +12,4 @@ set( DEPENDENCIES
     fwTools
 )
 set( REQUIREMENTS  )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake b/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake
index 536083a..c7fb4c1 100644
--- a/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake
+++ b/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake
@@ -12,4 +12,4 @@ set( DEPENDENCIES
     fwDcmtkTools
     )
 set( REQUIREMENTS )
-
+set( USE_PCH_FROM_TARGET pchData )
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
index 4c44927..d04610f 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,24 @@
 #ifndef __FWRENDERVTK_NAMESPACE_HPP__
 #define __FWRENDERVTK_NAMESPACE_HPP__
 
-/**
- * @brief       The namespace fwRenderVTK contains classes for rendering with VTK.
- * @namespace   fwRenderVTK
- *
- * @date        2009-2010.
- *
- */
+/// The namespace fwRenderVTK contains classes for rendering with VTK.
 namespace fwRenderVTK
 {
+
+/// Contains fwRenderVTK::factory utilities
+namespace factory
+{
+}
+
+/// Contains fwRenderVTK::registry details
+namespace registry
+{
+}
+
+/// The namespace fwRenderVTK::vtk provides pickers and interactors for the generic scene .
+namespace vtk
+{
+}
+
 }
 #endif /* __FWRENDERVTK_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp
index 39d5df2..7bc8247 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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,6 @@
 #ifndef __FWRENDERVTK_SRENDER_HPP__
 #define __FWRENDERVTK_SRENDER_HPP__
 
-#include "fwRenderVTK/IVtkRenderWindowInteractorManager.hpp"
 #include "fwRenderVTK/config.hpp"
 
 #include <fwCom/helper/SigSlotConnection.hpp>
@@ -20,8 +19,6 @@
 
 #include <fwServices/helper/Config.hpp>
 
-#include <fwThread/Timer.hpp>
-
 #include <map>
 
 class vtkRenderWindow;
@@ -30,17 +27,22 @@ class vtkAbstractPropPicker;
 class vtkObject;
 class vtkTransform;
 
+// Forward declarations
 namespace fwData
 {
-
 class TransformationMatrix3D;
+}
 
+namespace fwThread
+{
+class Timer;
 }
 
 namespace fwRenderVTK
 {
 
 class IVtkAdaptorService;
+class IVtkRenderWindowInteractorManager;
 
 /**
  * @brief The generic scene service shows adaptors in a 3D VTK scene.
@@ -48,7 +50,7 @@ class IVtkAdaptorService;
 class FWRENDERVTK_CLASS_API SRender : public ::fwRender::IRender
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SRender)(::fwRender::IRender) );
+    fwCoreServiceClassDefinitionsMacro( (SRender)(::fwRender::IRender) );
 
     typedef std::string RendererIdType;
     typedef std::string PickerIdType;
@@ -80,15 +82,19 @@ public:
     FWRENDERVTK_API vtkObject* getVtkObject(const VtkObjectIdType& objectId) const;
 
     /// Returns the adaptor with the given id
-    FWRENDERVTK_API SPTR (IVtkAdaptorService) getAdaptor(const AdaptorIdType &adaptorId) const;
+    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;
@@ -172,7 +178,8 @@ protected:
      *  - \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 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
@@ -228,15 +235,14 @@ private:
     ConfigurationType m_sceneConfiguration;
 
     /// @brief VTK Interactor window manager
-    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
-
+    SPTR( ::fwRenderVTK::IVtkRenderWindowInteractorManager ) m_interactorManager;
 
     class SceneAdaptor
     {
 
     public:
 
-        SPTR (IVtkAdaptorService) getService() const
+        SPTR(IVtkAdaptorService) getService() const
         {
             return m_service.lock();
         }
@@ -282,7 +288,7 @@ private:
     bool m_offScreen; ///< if true, scene is render in off screen
 
     /// Timer used for the update
-    ::fwThread::Timer::sptr m_timer;
+    SPTR( ::fwThread::Timer ) m_timer;
 
     void startContext();
     void stopContext();
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp
deleted file mode 100644
index 85406b3..0000000
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** 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_FACTORY_NAMESPACE_HPP__
-#define __FWRENDERVTK_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwRenderVTK
-{
-
-/**
- * @brief       Contains fwRenderVTK::factory utilities
- * @namespace   fwRenderVTK::factory
- *
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace fwRenderVTK
-
-#endif /* __FWRENDERVTK_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp
index a14c197..18c0086 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-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 __FWRENDERVTK_FACTORY_NEW_HPP__
 #define __FWRENDERVTK_FACTORY_NEW_HPP__
 
-#include <string>
-
-
-#include <fwTools/macros.hpp>
-
 #include "fwRenderVTK/config.hpp"
 #include "fwRenderVTK/registry/detail.hpp"
 
+#include <string>
+
 namespace fwRenderVTK
 {
 
@@ -23,7 +20,6 @@ class IVtkRenderWindowInteractorManager;
 namespace factory
 {
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New();
 
 /**
@@ -40,11 +36,9 @@ Key()
 }
 };
 
-
 FWRENDERVTK_API SPTR( ::fwRenderVTK::IVtkRenderWindowInteractorManager ) New(
     const ::fwRenderVTK::registry::KeyType & classname );
 
-
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
     SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
@@ -57,4 +51,3 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 #endif /* __FWRENDERVTK_FACTORY_NEW_HPP__ */
 
-
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/pch.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/pch.hpp
new file mode 100644
index 0000000..f508a78
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/pch.hpp
@@ -0,0 +1,48 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2017.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_PCH_HPP__
+#define __FWRENDERVTK_PCH_HPP__
+
+// Cause an internal compiler error on windows...
+#ifndef _WIN32
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#endif // _WIN32
+
+#include <fwData/Image.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+
+#include <vtkActor.h>
+#include <vtkCellPicker.h>
+#include <vtkCommand.h>
+#include <vtkMatrix4x4.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
+#include <vtkSmartPointer.h>
+#include <vtkTransform.h>
+
+#endif // __FWRENDERVTK_PCH_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp
deleted file mode 100644
index 0c89529..0000000
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** 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_REGISTRY_NAMESPACE_HPP__
-#define __FWRENDERVTK_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwRenderVTK
-{
-
-/**
- * @brief       Contains fwRenderVTK::registry details
- * @namespace   fwRenderVTK::registry
- *
- * @date        2009-2012
- *
- */
-namespace registry
-{
-} // namespace registry
-
-} // namespace fwRenderVTK
-
-#endif /* __FWRENDERVTK_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp
deleted file mode 100644
index b073bd4..0000000
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** 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_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
- */
-namespace vtk
-{
-
-}
-}
-#endif /* __FWRENDERVTK_VTK_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp
index f9d2842..cb3d648 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * FW4SPL - Copyright (C) IRCAD, 2009-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/OffScreenInteractorManager.hpp"
 
-#include <vtkRenderer.h>
+#include <fwRenderVTK/registry/macros.hpp>
+
+#include <vtkObjectFactory.h>
 #include <vtkRenderWindow.h>
 #include <vtkRenderWindowInteractor.h>
-#include <vtkObjectFactory.h>
-
-#include <fwRenderVTK/registry/macros.hpp>
+#include <vtkRenderer.h>
 
 //-----------------------------------------------------------------------------
 
@@ -29,13 +29,12 @@ namespace fwRenderVTK
  *          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();
+    static vtkOffscreenRenderWindowInteractor* New();
     vtkTypeMacro(vtkOffscreenRenderWindowInteractor,vtkRenderWindowInteractor)
 
 protected:
@@ -69,7 +68,7 @@ OffScreenInteractorManager::~OffScreenInteractorManager()
 
 void OffScreenInteractorManager::installInteractor( ::fwGui::container::fwContainer::sptr _parent )
 {
-    OSLM_FATAL("This interactor doens't need container, use installInteractor(width, height).");
+    SLM_FATAL("This interactor doesn't need container, use installInteractor(width, height).");
 }
 
 //-----------------------------------------------------------------------------
@@ -94,7 +93,7 @@ void OffScreenInteractorManager::uninstallInteractor()
 
 //-----------------------------------------------------------------------------
 
-::vtkRenderWindowInteractor * OffScreenInteractorManager::getInteractor()
+::vtkRenderWindowInteractor* OffScreenInteractorManager::getInteractor()
 {
     return m_interactor;
 }
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp
index b8a49ec..654c198 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2017.
  * 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 "fwRenderVTK/SRender.hpp"
 
 #include "fwRenderVTK/IVtkAdaptorService.hpp"
+#include "fwRenderVTK/IVtkRenderWindowInteractorManager.hpp"
 #include "fwRenderVTK/OffScreenInteractorManager.hpp"
 #include "fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp"
 
@@ -27,6 +28,8 @@
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Add.hpp>
 
+#include <fwThread/Timer.hpp>
+
 #include <fwTools/fwID.hpp>
 
 #include <fwVtkIO/vtk.hpp>
@@ -49,7 +52,6 @@ fwServicesRegisterMacro( ::fwRender::IRender, ::fwRenderVTK::SRender, ::fwData::
 
 using namespace fwServices;
 
-
 namespace fwRenderVTK
 {
 const ::fwCom::Signals::SignalKeyType SRender::s_DROPPED_SIG     = "dropped";
@@ -99,9 +101,9 @@ void SRender::configureRenderer( ConfigurationType conf )
 
 //vtk depth peeling not available on android (Offscreen rendering issues)
 #ifndef ANDROID
-        m_renderers[id]->SetUseDepthPeeling     ( 1  );
+        m_renderers[id]->SetUseDepthPeeling( 1  );
         m_renderers[id]->SetMaximumNumberOfPeels( 8  );
-        m_renderers[id]->SetOcclusionRatio      ( 0. );
+        m_renderers[id]->SetOcclusionRatio( 0. );
 #endif
 
         if(conf->hasAttribute("layer") )
@@ -145,7 +147,7 @@ void SRender::configurePicker( ConfigurationType conf )
     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]);
+        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]);
@@ -200,7 +202,7 @@ void SRender::configureObject( ConfigurationType conf )
 
     if ( m_sceneAdaptors.count(id) == 0 && object )
     {
-        OSLM_TRACE ("Adding service : IVtkAdaptorService " << adaptor << " on "<< objectId );
+        OSLM_TRACE("Adding service : IVtkAdaptorService " << adaptor << " on "<< objectId );
         SceneAdaptor adaptee;
         adaptee.m_config = *(conf->begin());
         if (!uid.empty())
@@ -240,10 +242,10 @@ void SRender::configureObject( ConfigurationType conf )
     {
         SceneAdaptor& adaptee = m_sceneAdaptors[id];
         SLM_ASSERT("Adaptor service expired !", adaptee.getService() );
-        OSLM_ASSERT( adaptee.getService()->getID() <<  " is not started ",adaptee.getService()->isStarted());
+        OSLM_ASSERT( adaptee.getService()->getID() <<  " is not started ", adaptee.getService()->isStarted());
         if (object)
         {
-            OSLM_TRACE ("Swapping IVtkAdaptorService " << adaptor << " on "<< objectId );
+            OSLM_TRACE("Swapping IVtkAdaptorService " << adaptor << " on "<< objectId );
             if(adaptee.getService()->getObject() != object)
             {
                 adaptee.getService()->swap( ::fwData::Object::constCast(object) );
@@ -265,7 +267,7 @@ void SRender::configureObject( ConfigurationType conf )
     }
     else
     {
-        OSLM_TRACE ( "'"<< objectId << "' inexistent, passing by '" << adaptor << "'");
+        OSLM_TRACE( "'"<< objectId << "' inexistent, passing by '" << adaptor << "'");
     }
 }
 
@@ -350,7 +352,7 @@ void SRender::configuring() throw(fwTools::Failed)
     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());
+    SLM_ASSERT("Missing 'scene' configuration.", !vectConfig.empty());
     m_sceneConfiguration = vectConfig.at(0);
 
     m_offScreenImageKey = m_sceneConfiguration->getAttributeValue("offScreen");
@@ -625,7 +627,7 @@ void SRender::configureObjects(::fwData::Composite::ContainerType objects)
 
     for( ::fwData::Composite::ContainerType::value_type objectId :  objects)
     {
-        std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor","objectId",objectId.first);
+        std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor", "objectId", objectId.first);
         for( ConfigurationType cfg :  confVec )
         {
             this->configureObject(cfg);
@@ -681,7 +683,7 @@ void SRender::swapping(const IService::KeyType& key) throw(::fwTools::Failed)
         ::fwServices::helper::Config::disconnectProxies(key, m_proxyMap);
     }
 
-    std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor","objectId", key);
+    std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor", "objectId", key);
     for( ConfigurationType cfg : confVec )
     {
         this->configureObject(cfg);
@@ -855,7 +857,7 @@ vtkObject* SRender::getVtkObject(const VtkObjectIdType& objectId) const
 
 //-----------------------------------------------------------------------------
 
-SPTR (IVtkAdaptorService) SRender::getAdaptor(const SRender::AdaptorIdType& adaptorId) const
+SPTR(IVtkAdaptorService) SRender::getAdaptor(const SRender::AdaptorIdType& adaptorId) const
 {
     IVtkAdaptorService::sptr adaptor;
     SceneAdaptorsMapType::const_iterator it = m_sceneAdaptors.find(adaptorId);

-- 
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