From f2aa5d3be9db60a0653e0ce787cdcb5d2f260de8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9line=20=20TREBEAU?= <celine.trebeau@pasteur.fr>
Date: Tue, 5 Apr 2022 10:44:39 +0200
Subject: [PATCH] Release

---
 .gitignore                                    |   4 +
 LICENSE.txt                                   |   3 +-
 pom.xml                                       |  12 +-
 .../java/fr/pasteur/ida/zellige/Main.java     |  74 ++-
 .../zellige/ReferenceSurfaceExtraction.java   | 108 +++-
 .../pasteur/ida/zellige/command/Zellige.java  |  28 ++
 .../ida/zellige/command/ZelligeCommand.java   | 256 ----------
 .../zellige/command/ZelligeCommandGui.java    |  54 --
 .../ida/zellige/element/Coordinate.java       |  28 ++
 .../pasteur/ida/zellige/element/Pixels.java   |  28 ++
 .../ida/zellige/element/Projection.java       |  29 ++
 .../ida/zellige/element/ReferenceSurface.java |  29 ++
 .../pasteur/ida/zellige/element/Surface.java  |  28 ++
 .../ida/zellige/element/ose/AbstractOSE.java  |  28 ++
 .../ida/zellige/element/ose/OSEList.java      |  28 ++
 .../ida/zellige/element/ose/OSEListArray.java |  28 ++
 .../element/ose/OSEStartingStatus.java        |  32 +-
 .../ida/zellige/element/ose/OseXZ.java        |  28 ++
 .../ida/zellige/element/ose/OseYZ.java        |  28 ++
 .../element/surfaceLine/SurfaceLine.java      |  42 +-
 .../element/surfaceLine/SurfaceLineX.java     |  79 ++-
 .../element/surfaceLine/SurfaceLineY.java     |  66 ++-
 .../ida/zellige/gui/CheckBoxDisplay.java      |  52 ++
 .../ida/zellige/gui/ClassifiedImages.java     |  63 +++
 .../zellige/gui/ConstructionController.java   | 214 +++++++-
 .../ida/zellige/gui/DisplayController.java    |  28 ++
 .../pasteur/ida/zellige/gui/FileCombobox.java |  38 --
 .../ida/zellige/gui/ImageFXDisplay.java       |  32 +-
 .../pasteur/ida/zellige/gui/LogAppender.java  |  59 +++
 .../pasteur/ida/zellige/gui/MainAppFrame.java |  35 +-
 .../ida/zellige/gui/MainController.java       | 470 ++++++++++++------
 .../ida/zellige/gui/ParameterSlider.java      |  48 +-
 .../zellige/gui/ParameterSliderDouble.java    |  34 +-
 .../zellige/gui/ParameterSliderInteger.java   |  28 ++
 .../ida/zellige/gui/ProjectionController.java | 339 +++++++++++--
 .../ida/zellige/gui/SelectionController.java  | 317 +++++++++---
 .../fr/pasteur/ida/zellige/gui/StepPanel.java |  28 ++
 .../ida/zellige/gui/ZSlicesSlider.java        |  28 ++
 .../gui/exception/NoA3DStackException.java    |  28 ++
 .../gui/exception/NoInputException.java       |  30 +-
 .../gui/exception/NotANumberException.java    |  28 ++
 .../ida/zellige/gui/selection/Container.java  |  17 -
 .../zellige/gui/selection/IslandSearch.fxml   |  26 -
 .../zellige/gui/selection/IslandSearchP.java  |  18 -
 .../ida/zellige/gui/task/AbstractTask.java    |  28 ++
 .../gui/task/AmplitudeThresholdingTask.java   |  60 +++
 .../gui/task/CheckParameterValueTask.java     |  62 ---
 .../task/ComputeClassificationImagesTask.java |  64 +++
 .../ComputeWithNewAmplitudeValueTask.java     |  37 --
 .../gui/task/ComputeWithNewOtsuValueTask.java |  37 --
 .../gui/task/ConstructionCompletionTask.java  |  30 +-
 .../gui/task/CreateExtractionTask.java        |  47 --
 .../gui/task/DisplayDatasetChoicesTask.java   |  28 ++
 .../zellige/gui/task/ImageFXDisplayTask.java  |  37 +-
 .../gui/task/InterClassificationTask.java     |  61 +++
 .../zellige/gui/task/IslandSearchTask.java    |  63 +++
 .../gui/task/NewClassificationTask.java       |  48 --
 .../gui/task/OtsuThresholdingTask.java        |  62 +++
 .../zellige/gui/task/PretreatmentTask.java    |  61 +++
 .../ida/zellige/gui/task/ProjectionTask.java  |  65 ---
 .../gui/task/RunFirstConstructionTask.java    |  49 +-
 .../gui/task/RunPostTreatmentTask.java        |  37 --
 .../gui/task/RunSecondConstructionTask.java   |  51 +-
 .../gui/task/SetCurrentDatasetTask.java       |  28 ++
 .../ida/zellige/gui/task/SmoothingTask.java   |  61 +++
 .../fr/pasteur/ida/zellige/steps/Utils.java   |  28 ++
 .../construction/ConstructionCompletion.java  |  32 +-
 .../steps/construction/Interpolation.java     |  28 ++
 .../FirstRoundConstructionException.java      |  31 +-
 .../exception/NoSurfaceFoundException.java    |  28 ++
 .../SecondRoundConstructionException.java     |  30 +-
 .../rounds/ConstructionParameters.java        |  28 ++
 .../rounds/ConstructionRound.java             |  28 ++
 .../rounds/FirstRoundConstruction.java        |  30 +-
 .../rounds/SecondRoundConstruction.java       |  36 +-
 .../rounds/ose/OseConstruction.java           |  32 +-
 .../rounds/ose/OseConstructionXZ.java         |  30 +-
 .../rounds/ose/OseConstructionYZ.java         |  32 +-
 .../rounds/surface/SurfaceConstruction.java   |  28 ++
 .../rounds/surface/SurfacesConstruction.java  |  28 ++
 .../steps/projection/DisplayParameters.java   |  28 ++
 .../NoPossibleDisplayException.java           |  28 ++
 .../projection/ProjectionParameters.java      |  28 ++
 .../ReferenceSurfaceProjection.java           | 130 ++---
 .../zellige/steps/selection/Selection.java    |  32 +-
 .../AmplitudeClassification.java              |  34 +-
 .../classification/Classification.java        |  38 +-
 .../ClassificationParameters.java             |  30 +-
 .../selection/classification/HistogramZ.java  |  30 +-
 .../steps/selection/classification/Otsu.java  |  28 ++
 .../classification/OtsuClassification.java    |  32 +-
 .../selection/classification/Threshold.java   |  28 ++
 .../exception/DataValidationException.java    |  28 ++
 .../exception/EmptyOutputException.java       |  28 ++
 .../exception/NoClassificationException.java  |  28 ++
 .../postTreatment/PostTreatment.java          |  83 +++-
 .../PostTreatmentParameters.java              |  28 ++
 .../postTreatment/islandSearch/Island.java    |  28 ++
 .../islandSearch/IslandSearch.java            |  28 ++
 .../postTreatment/islandSearch/Sand.java      |  28 ++
 .../postTreatment/islandSearch/World.java     |  28 ++
 .../selection/pretreatment/Pretreatment.java  |  43 +-
 .../pretreatment/PretreatmentParameters.java  |  28 ++
 .../steps/selection/util/Derivative.java      |  28 ++
 .../selection/util/ExtremaDetection.java      |  32 +-
 .../selection/util/ExtremaDetection2D.java    |  28 ++
 .../zellige/utils/jzy3D/All_GT_Display.java   |  33 +-
 .../utils/jzy3D/HM_GT_DifferenceDisplay.java  |  28 ++
 .../zellige/utils/jzy3D/HM_GT_Display.java    |  32 +-
 ...M_black_GT_distanceDisplay_realImages.java |  35 +-
 ...lack_GT_distanceDisplay_realImages_2D.java |  35 +-
 .../zellige/utils/jzy3D/HMvsGT_Display.java   |  28 ++
 .../utils/jzy3D/HeightMapArrayWriter.java     |  36 +-
 .../utils/jzy3D/LocalMaximumsDisplay.java     |  32 +-
 .../ida/zellige/utils/jzy3D/OSEDisplay.java   |  38 +-
 .../zellige/utils/jzy3D/OSEListDisplay.java   |  34 +-
 .../jzy3D/SelectedPixelsArrayWriter.java      |  28 ++
 .../zellige/utils/jzy3D/SurfaceDisplay.java   |  35 +-
 .../ida/zellige/utils/test/CSVWriter.java     |  34 +-
 .../utils/test/DistanceImageWriter.java       |  34 +-
 .../utils/test/GroundTruthConversion.java     |  28 ++
 .../utils/test/ParameterSweepFiles.java       |  33 +-
 .../test/RMSEAndCoverageComputation.java      |  36 +-
 .../ida/zellige/utils/test/ZParameters.java   |  63 ++-
 .../utils/test/ZelligePipelineAnalyse.java    |  28 ++
 ...DifferentReferenceTestedSizeException.java |  28 ++
 .../exception/NotAnHeightMapException.java    |  28 ++
 .../Construction.fxml                         | 154 +++---
 .../Display.fxml                              |  17 +-
 .../fr.pasteur.ida.zellige.gui.view/Main.fxml |  70 ++-
 .../ParameterSlider.fxml                      |  30 +-
 .../Projection.fxml                           |  67 +--
 .../Selection.fxml                            | 157 +++---
 .../StepPanel.fxml                            |  12 +-
 .../ZSlicesSlider.fxml                        |   8 +-
 .../theme1.css                                |  30 +-
 .../theme2.css                                |  33 +-
 src/main/resources/gui.properties             |  30 +-
 src/main/resources/logback.xml                |  48 ++
 .../behavior/DoubleParameterSweep.java        |  28 ++
 .../behavior/OneSurfaceConstructionTest.java  |  30 +-
 .../ida/zellige/behavior/ParameterSweep.java  |  30 +-
 .../behavior/ParameterSweepCochlee2.java      |  28 ++
 .../behavior/ParameterSweepCulture.java       |  28 ++
 .../behavior/ParameterSweepMouche.java        |  28 ++
 .../behavior/ParameterSweepOrganoid.java      |  28 ++
 .../behavior/ParameterSweepPhantom.java       |  28 ++
 .../ida/zellige/behavior/PipelineTest.java    |  28 ++
 .../behavior/StartingOSE_SameSurfaceTest.java |  39 +-
 .../SurfaceConstructionBehaviorTest.java      |  28 ++
 .../SurfaceLineConstructionBehaviorTest.java  |  28 ++
 .../pasteur/ida/zellige/behavior/Utils.java   |  28 ++
 .../ida/zellige/element/PixelsTest.java       |  30 +-
 .../ida/zellige/element/SurfaceTest.java      |  30 +-
 .../ClassificationParametersTest.java         |  28 ++
 .../PixelSelectionParametersTest.java         |  28 ++
 .../PretreatmentParametersTest.java           |  28 ++
 .../parameters/ProjectionParametersTest.java  |  28 ++
 .../PixelClassificationTest.java              |  30 +-
 .../islandSearch/IslandTest.java              |  30 +-
 .../pixelSelection/islandSearch/SandTest.java |  30 +-
 .../islandSearch/WorldTest.java               |  35 +-
 .../postTreatment/PostTreatmentTest.java      |  30 +-
 .../pretreatment/PreTreatmentTest.java        |  28 ++
 .../util/ExtremaDetectionTest.java            |  42 +-
 .../utils/LocalExtremaDetectionTest.java      |  30 +-
 .../utils/RMSEAndCoverageComputationTest.java |  28 ++
 167 files changed, 5891 insertions(+), 1702 deletions(-)
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommandGui.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/CheckBoxDisplay.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/ClassifiedImages.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/FileCombobox.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/LogAppender.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/selection/Container.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearch.fxml
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearchP.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/AmplitudeThresholdingTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/CheckParameterValueTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeClassificationImagesTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewAmplitudeValueTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewOtsuValueTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/CreateExtractionTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/InterClassificationTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/IslandSearchTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/NewClassificationTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/OtsuThresholdingTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/PretreatmentTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/ProjectionTask.java
 delete mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/RunPostTreatmentTask.java
 create mode 100644 src/main/java/fr/pasteur/ida/zellige/gui/task/SmoothingTask.java
 create mode 100644 src/main/resources/logback.xml

diff --git a/.gitignore b/.gitignore
index cfc34f0a..6a9a6425 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,7 @@ doc/
 /**/*.plantuml
 uml/
 target/
+.classpath
+.project
+.settings/
+
diff --git a/LICENSE.txt b/LICENSE.txt
index 51db6d20..2bfccc5a 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2018 - 2021, Céline Trébeau, Jean-Yves Tinevez
+Copyright (c) 2020 - 2022, Institut Pasteur
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
@@ -22,4 +22,3 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/pom.xml b/pom.xml
index b2933c0d..c777eaa5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,19 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
 
     <parent>
         <groupId>org.scijava</groupId>
         <artifactId>pom-scijava</artifactId>
-        <version>29.2.1</version>
+        <version>31.1.0</version>
     </parent>
 
     <groupId>org.example</groupId>
     <artifactId>zellige-core</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.1-SNAPSHOT</version>
 
 
     <name>Zellige-core</name>
@@ -162,10 +160,6 @@
             <groupId>net.imglib2</groupId>
             <artifactId>imglib2-realtransform</artifactId>
         </dependency>
-        <dependency>
-            <groupId>net.imglib2</groupId>
-            <artifactId>imglib2-ui</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>io.scif</groupId>
diff --git a/src/main/java/fr/pasteur/ida/zellige/Main.java b/src/main/java/fr/pasteur/ida/zellige/Main.java
index b48a91a5..59cc04cc 100644
--- a/src/main/java/fr/pasteur/ida/zellige/Main.java
+++ b/src/main/java/fr/pasteur/ida/zellige/Main.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige;
 
 
@@ -14,6 +42,8 @@ import io.scif.img.SCIFIOImgPlus;
 import net.imglib2.img.Img;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.numeric.RealType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.awt.*;
 
@@ -24,7 +54,7 @@ import java.awt.*;
 public class Main
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( Main.class );
     public static < T extends RealType< T > & NativeType< T > > void main( String[] args ) throws Exception
     {
         // Launch ImageJ.
@@ -34,7 +64,7 @@ public class Main
         // Input of the image.
         final String imagePath =// "C:\\Users\\ctrebeau\\Desktop\\Zellige analysis\\files\\SNR\\snr_000\\multiSurfaces\\phantoms_snr0.mat.tif";
                 args[ 0 ]; /* The image path goes here !!!! */
-        System.out.println( imagePath );
+        LOGGER.debug( imagePath );
         /* JY version for opening files. */
         final SCIFIOImgPlus< ? > imgPlus = IO.openImgs( imagePath ).get( 0 );
 
@@ -65,24 +95,24 @@ public class Main
 
 
         /* Print parameters.*/
-        System.out.println( "Input image : " + imagePath );
-        System.out.println( "filter : " + filter );
-        System.out.println( "filter parameter : " + filterParameter );
-        System.out.println( "amplitude  : " + amplitude );
-        System.out.println( "threshold  : " + otsu );
-        System.out.println( "connexity : " + connexity );
-        System.out.println( "island size : " + islandSize );
-        System.out.println( "sigmaXY : " + sigmaXY );
-        System.out.println( "sigmaZ : " + sigmaZ );
-        System.out.println( "starting os size1 : " + startingOsSize1 );
-        System.out.println( "overlap1 :" + overlap1 );
-        System.out.println( "connexityRate1  :" + connexityRate1 );
-        System.out.println( "starting os size2 : " + startingOsSize2 );
-        System.out.println( "overlap2 :" + overlap2 );
-        System.out.println( "connexityRate2  :" + connexityRate2 );
-        System.out.println( "surface Minimum size factor : " + surfaceMinSizeFactor );
-        System.out.println( "delta : " + delta );
-        System.out.println( System.lineSeparator() );
+        LOGGER.debug( "Input image : " + imagePath );
+        LOGGER.debug( "filter : " + filter );
+        LOGGER.debug( "filter parameter : " + filterParameter );
+        LOGGER.debug( "amplitude  : " + amplitude );
+        LOGGER.debug( "threshold  : " + otsu );
+        LOGGER.debug( "connexity : " + connexity );
+        LOGGER.debug( "island size : " + islandSize );
+        LOGGER.debug( "sigmaXY : " + sigmaXY );
+        LOGGER.debug( "sigmaZ : " + sigmaZ );
+        LOGGER.debug( "starting os size1 : " + startingOsSize1 );
+        LOGGER.debug( "overlap1 :" + overlap1 );
+        LOGGER.debug( "connexityRate1  :" + connexityRate1 );
+        LOGGER.debug( "starting os size2 : " + startingOsSize2 );
+        LOGGER.debug( "overlap2 :" + overlap2 );
+        LOGGER.debug( "connexityRate2  :" + connexityRate2 );
+        LOGGER.debug( "surface Minimum size factor : " + surfaceMinSizeFactor );
+        LOGGER.debug( "delta : " + delta );
+        LOGGER.debug( System.lineSeparator() );
         /* End of  Print parameters.*/
 
         PretreatmentParameters pretreatmentParameters = new PretreatmentParameters( filter, filterParameter );
@@ -121,13 +151,13 @@ public class Main
                 }
                 catch ( Exception e )
                 {
-                    System.out.println( e.getMessage() );
+                    LOGGER.debug( e.getMessage() );
                 }
             }
         }
         else
         {
-            System.out.println( " This image has to be a z-stack ! " );
+            LOGGER.debug( " This image has to be a z-stack ! " );
         }
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/ReferenceSurfaceExtraction.java b/src/main/java/fr/pasteur/ida/zellige/ReferenceSurfaceExtraction.java
index e094ffe9..eb5afa19 100644
--- a/src/main/java/fr/pasteur/ida/zellige/ReferenceSurfaceExtraction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/ReferenceSurfaceExtraction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -53,8 +81,9 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
     private final double filterParameter = 2;
     private Img< FloatType > pretreatedImg;
     private Img< FloatType > amplitudeImg;
-
     private Img< FloatType > otsuImg;
+    ArrayList< Surface > firstRoundSurfaces;
+    private Img< BitType > ISImage;
     //    private FloatType otsuValue;
     private Pixels[][] maximums;
     private final static double adequacy = 1;
@@ -104,7 +133,7 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
 
     public void runAmplitudeClassification( int userThreshold )
     {
-        LOGGER.info( "Amplitude threshold value after user ={}", userThreshold );
+        LOGGER.debug( "Amplitude threshold value after user ={}", userThreshold );
         selectedAmplitude = AmplitudeClassification.applyThreshold( amplitudeImg, userThreshold );
     }
 
@@ -116,28 +145,52 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
     public void runInterClassification()
     {
         selectionOutput = Classification.interClassification( selectedAmplitude, selectedAmplitude.factory(), selectedOtsu );
-        System.out.println( "The selected output has been changed" );
+        LOGGER.debug( "The selected output has been changed" );
+    }
+
+    public void runIslandSearch( int islandSize )
+    {
+        ISImage = PostTreatment.runIslandSearch( selectionOutput, islandSize );
     }
 
-    public void runPostTreatment( PostTreatmentParameters postTreatmentParameters ) throws DataValidationException
+    public void runSmoothing( int sigmaXY, int sigmaZ ) throws DataValidationException
     {
-        maximums = PostTreatment.run( selectionOutput, postTreatmentParameters );
+        maximums = PostTreatment.runSmoothing( ISImage, sigmaXY, sigmaZ );
+    }
+
+    public void runPostTreatment( double sigmaXY, double sigmaZ, int islandSize ) throws DataValidationException
+    {
+        runIslandSearch( islandSize );
+        runSmoothing( ( int ) sigmaXY, ( int ) sigmaZ );
+//        maximums = PostTreatment.run( selectionOutput, postTreatmentParameters );
     }
 
 
     public void select( PretreatmentParameters pretreatmentParameters, ClassificationParameters classificationParameters, PostTreatmentParameters postTreatmentParameters ) throws NoClassificationException, EmptyOutputException, DataValidationException
     {
         /* First step : Pixel selection */
-        LOGGER.info( "Running selection..." );
+        LOGGER.debug( "Running selection..." );
         maximums = Selection.run( input, pretreatmentParameters, classificationParameters, postTreatmentParameters );
-//        displayMaximums( maximums );
-//        writeSelectedPixels( maximums, "Phantom" );
     }
 
+    public void constructFirstRoundSurfaces( double startingSizeThreshold, int overlap, double connexityRate, double surfaceMinSizeFactor ) throws NoSurfaceFoundException
+    {
+        FirstRoundConstruction step1 = new FirstRoundConstruction( maximums, startingSizeThreshold, overlap, connexityRate, surfaceMinSizeFactor );
+        step1.process();
+        firstRoundSurfaces = step1.getSurfaces();
+    }
+
+    public void constructSecondRoundSurfacesAndCompletion( double startingSizeThreshold, int overlap, double connexityRate, double surfaceMinSizeFactor ) throws NoSurfaceFoundException
+    {
+        SecondRoundConstruction step2 = new SecondRoundConstruction( firstRoundSurfaces, startingSizeThreshold, overlap, connexityRate, surfaceMinSizeFactor );
+        step2.process();
+        ArrayList< Surface > finalSurfaces = step2.getSurfaces();
+        referenceSurfaces.addAll( ConstructionCompletion.run( input, factory, finalSurfaces ) );
+    }
 
     public void construct( ConstructionParameters[] constructionParameters ) throws NoSurfaceFoundException
     {
-        LOGGER.info( "Running construction..." );
+        LOGGER.debug( "Running construction..." );
         /*  First round construction*/
         FirstRoundConstruction step1 = new FirstRoundConstruction( maximums, constructionParameters[ 0 ] );
         step1.process();
@@ -149,7 +202,7 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
         FS_finalizedSurfaces = tempSurfaces.size();
         FS_OSConstructionProcessingTime = step1.getOSConstructionProcessingTime();
         FS_SurfaceConstructionProcessingTime = step1.getConstructionProcessingTime();
-        System.out.println( "first round surfaces = " + tempSurfaces.size() );
+        LOGGER.debug( "first round surfaces = " + tempSurfaces.size() );
         /* Second round construction */
         SecondRoundConstruction step2 =
                 new SecondRoundConstruction( tempSurfaces, constructionParameters[ 1 ] );
@@ -168,10 +221,9 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
 
     }
 
-
     public void project( ProjectionParameters projectionParameters, DisplayParameters displayParameters ) throws NoPossibleDisplayException
     {
-        LOGGER.info( "Running projection..." );
+        LOGGER.debug( "Running projection..." );
         for ( ReferenceSurface< T > referenceSurface : referenceSurfaces )
         {
             referenceSurface.init();
@@ -179,6 +231,38 @@ public class ReferenceSurfaceExtraction< T extends RealType< T > & NativeType< T
         }
     }
 
+    public void project( int delta, String projectionType, boolean projectionDisplay,
+                         boolean rawHeightMapDisplay,
+                         boolean extractedHeightMapDisplay,
+                         boolean reduced3DSpaceDisplay,
+                         boolean segmentedSurfaceDisplay,
+                         boolean segmentedSurfaceMaskDisplay, int delta2 ) throws NoPossibleDisplayException
+    {
+        LOGGER.debug( "Running projection..." );
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces )
+        {
+            referenceSurface.init();
+            ReferenceSurfaceProjection.run( referenceSurface, delta, projectionType,
+                    projectionDisplay,
+                    rawHeightMapDisplay,
+                    extractedHeightMapDisplay,
+                    reduced3DSpaceDisplay,
+                    segmentedSurfaceDisplay,
+                    segmentedSurfaceMaskDisplay, delta2 );
+        }
+    }
+
+
+    public boolean iSisDone()
+    {
+        return ISImage != null;
+    }
+
+    public void resetIS()
+    {
+        ISImage = null;
+    }
+
 
     public void setMaximums( Pixels[][] maximums )
     {
diff --git a/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java b/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
index 2d26a67d..2d4471f7 100644
--- a/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
+++ b/src/main/java/fr/pasteur/ida/zellige/command/Zellige.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.command;
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java b/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java
deleted file mode 100644
index ac863a1a..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommand.java
+++ /dev/null
@@ -1,256 +0,0 @@
-package fr.pasteur.ida.zellige.command;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import fr.pasteur.ida.zellige.steps.construction.exception.NoSurfaceFoundException;
-import fr.pasteur.ida.zellige.steps.construction.rounds.ConstructionParameters;
-import fr.pasteur.ida.zellige.steps.projection.DisplayParameters;
-import fr.pasteur.ida.zellige.steps.projection.NoPossibleDisplayException;
-import fr.pasteur.ida.zellige.steps.projection.ProjectionParameters;
-import fr.pasteur.ida.zellige.steps.selection.classification.ClassificationParameters;
-import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
-import fr.pasteur.ida.zellige.steps.selection.exception.EmptyOutputException;
-import fr.pasteur.ida.zellige.steps.selection.exception.NoClassificationException;
-import fr.pasteur.ida.zellige.steps.selection.postTreatment.PostTreatmentParameters;
-import fr.pasteur.ida.zellige.steps.selection.pretreatment.PretreatmentParameters;
-import ij.IJ;
-import net.imagej.Dataset;
-import net.imagej.ImageJ;
-import net.imagej.ImgPlus;
-import net.imagej.display.ImageDisplayService;
-import net.imagej.ops.OpService;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import net.imglib2.util.Util;
-import org.scijava.command.ContextCommand;
-import org.scijava.log.LogService;
-import org.scijava.plugin.Parameter;
-import org.scijava.plugin.Plugin;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileSystems;
-
-@Plugin( type = ZelligeCommand.class, name = "Zellige", menuPath = "Plugins > Process > Zellige" )
-public class ZelligeCommand< T extends RealType< T > & NativeType< T > > extends ContextCommand
-{
-
-    @Parameter
-    protected OpService ops;
-    @Parameter
-    private ImageDisplayService imageDisplayService;
-    @Parameter
-    private LogService logService;
-
-    @Parameter( label = "Amplitude threshold", min = "0", max = "255", stepSize = "1" )
-    private int amplitude = 5;
-
-    @Parameter( label = "Otsu threshold", min = "0", max = "255", stepSize = "1" )
-    private int otsu = 5;
-
-    @Parameter( label = "XY blur radius", min = "0", max = "10" )
-    private int sigmaXY = 1;
-
-    @Parameter( label = "Z blur radius", min = "0", max = "10" )
-    private int sigmaZ = 1;
-
-    @Parameter( label = "Min Island size", min = "0", max = "50", stepSize = "5" )
-    private int islandSize = 5;
-
-    @Parameter( label = "Island connectivity", min = "4", max = "8", stepSize = "4" )
-    private int connexity = 4;
-
-    @Parameter( label = "1st round Starting OSE size", min = "0", max = "1", stepSize = "0.1" )
-    private double startingOsSize1 = 0.8;
-
-    @Parameter( label = "1st round overlap ", min = "0", max = "50" )
-    private int overlap1 = 10;
-
-    @Parameter( label = "1st round matching rate", min = "0.5", max = "1", stepSize = "0.05" )
-    private double connexityRate1 = 0.8;
-
-    @Parameter( label = "2nd round Starting OSE size", min = "0", max = "1", stepSize = "0.1" )
-    private double startingOsSize2 = 0.1;
-
-    @Parameter( label = "2nd round overlap", min = "0", max = "50", stepSize = "5" )
-    private int overlap2 = 10;
-
-    @Parameter( label = "2nd round matching rate", min = "0.5", max = "1", stepSize = "0.05" )
-    private double connexityRate2 = 0.9;
-
-    @Parameter( label = "Min surface size (rel to XY image size)", min = "0.05", max = "1", stepSize = "0.1" )
-    private double surfaceMinSizeFactor;
-
-    @Parameter( label = "Projection width (deltaZ)", min = "0" )
-    private int delta;
-
-
-    public static void main( String[] args ) throws IOException
-    {
-        String currentFolder = FileSystems.getDefault()
-                .getPath( "" )
-                .toAbsolutePath()
-                .toString();
-        String imageFilePath = "doc/Cochlée1.tif";
-
-        // Launch ImageJ.
-        ImageJ ij = new ImageJ();
-        ij.launch( args );
-
-        // Load the image.
-        Object obj = ij.io().open( new File( currentFolder, imageFilePath ).getAbsolutePath() );
-
-        // Display it.
-        ij.ui().show( obj );
-
-
-        ij.command().run( ZelligeCommand.class, true );
-    }
-
-    @Override
-    public void run()
-    {
-        /*
-         * Get current dataset.
-         */
-
-        Dataset dataset = imageDisplayService.getActiveDataset();
-        if ( null == dataset )
-        {
-            logService.error( "Please open an image before running Zellige." );
-            return;
-        }
-        /*
-         * Wrap it into an ImgLib2 'Plus' image.
-         */
-        @SuppressWarnings( "unchecked" )
-        ImgPlus< T > img = ( ImgPlus< T > ) dataset.getImgPlus();
-
-        long[] dims = new long[ dataset.numDimensions() ];
-        dataset.dimensions( dims );
-
-        IJ.log( "Zellige received the image: " + img.getName() );
-        IJ.log( "Size: " + Util.printInterval( img ) );
-        IJ.log( "Type: " + img.firstElement().getClass().toGenericString() );
-        IJ.log( "Dimensionality: " + img.numDimensions() + "D" );
-        for ( int d = 0; d < img.numDimensions(); d++ )
-        {
-            IJ.log( " - dimension " + d + ": [" + img.axis( d ).type() + "], 1 unit = " + img.averageScale( d ) + " " + img.axis( d ).unit() );
-        }
-
-
-        // Fixed parameters for now...
-        String filter = "GaussianBlur";
-        double filterParameter = 2;
-        IJ.log( "Input image : " + dataset.getName() );
-        IJ.log( "filter : " + filter );
-        IJ.log( "filter parameter : " + filterParameter );
-        IJ.log( "amplitude  : " + amplitude );
-        IJ.log( "threshold  : " + otsu );
-        IJ.log( "connexity : " + connexity );
-        IJ.log( "island size : " + islandSize );
-        IJ.log( "sigmaXY : " + sigmaXY );
-        IJ.log( "sigmaZ : " + sigmaZ );
-        IJ.log( "starting os size1 : " + startingOsSize1 );
-        IJ.log( "overlap1 :" + overlap1 );
-        IJ.log( "connexityRate1  :" + connexityRate1 );
-        IJ.log( "starting os size2 : " + startingOsSize2 );
-        IJ.log( "overlap2 :" + overlap2 );
-        IJ.log( "connexityRate2  :" + connexityRate2 );
-        IJ.log( "surface Minimum size factor : " + surfaceMinSizeFactor );
-        IJ.log( "delta : " + delta );
-        PretreatmentParameters pretreatmentParameters = null;
-        try
-        {
-            pretreatmentParameters = new PretreatmentParameters( filter, filterParameter );
-        }
-        catch ( DataValidationException e )
-        {
-            e.printStackTrace();
-        }
-        ClassificationParameters classificationParameters = null;
-        try
-        {
-            classificationParameters = new ClassificationParameters( amplitude, otsu );
-        }
-        catch ( DataValidationException e )
-        {
-            e.printStackTrace();
-        }
-        PostTreatmentParameters postTreatmentParameters = null;
-        try
-        {
-            postTreatmentParameters = new PostTreatmentParameters( sigmaXY, sigmaZ, islandSize, connexity );
-        }
-        catch ( DataValidationException e )
-        {
-            e.printStackTrace();
-        }
-        ProjectionParameters projectionParameters = null;// no other method implemented yet.
-        try
-        {
-            projectionParameters = new ProjectionParameters( delta, "MIP" );
-        }
-        catch ( DataValidationException e )
-        {
-            e.printStackTrace();
-        }
-        ConstructionParameters[] constructionParameters = new ConstructionParameters[]{
-                new ConstructionParameters( startingOsSize1, overlap1, connexityRate1, surfaceMinSizeFactor ),
-                new ConstructionParameters( startingOsSize2, overlap2, connexityRate2, surfaceMinSizeFactor ) };
-
-
-        DisplayParameters displayParameters = new DisplayParameters(
-                true,
-                false,
-                false,
-                true,
-                false, true );
-
-
-        if ( img.numDimensions() == 3 )// Is it a stack ?
-        {
-            ReferenceSurfaceExtraction< T > rse = new ReferenceSurfaceExtraction<>
-                    ( img, img.factory() );
-            try
-            {
-                rse.select( pretreatmentParameters, classificationParameters, postTreatmentParameters );
-            }
-            catch ( NoClassificationException | EmptyOutputException | DataValidationException e )
-            {
-                e.printStackTrace();
-            }
-            try
-            {
-                rse.construct( constructionParameters );
-            }
-            catch ( NoSurfaceFoundException e )
-            {
-                e.printStackTrace();
-            }
-
-
-            try
-            {
-                rse.project( projectionParameters, displayParameters );
-                IJ.log( " Number of surfaces found : " + rse.getReferenceSurfaces().size() );
-            }
-            catch ( NoPossibleDisplayException e )
-            {
-                e.printStackTrace();
-            }
-
-        }
-        else
-        {
-            System.out.println( " This image has to be a z-stack ! " );
-        }
-
-
-    }
-
-}
-
-
-
-
-
diff --git a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommandGui.java b/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommandGui.java
deleted file mode 100644
index 0c1cc1de..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/command/ZelligeCommandGui.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package fr.pasteur.ida.zellige.command;
-
-import net.imagej.ImageJ;
-import net.imagej.display.ImageDisplayService;
-import net.imagej.ops.OpService;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.scijava.command.ContextCommand;
-import org.scijava.log.LogService;
-import org.scijava.plugin.Parameter;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileSystems;
-
-//@Plugin( type = ZelligeCommandGui.class, name = "Zellige", menuPath = "Plugins > Process > Zellige" )
-public class ZelligeCommandGui< T extends RealType< T > & NativeType< T > > extends ContextCommand
-{
-
-    @Parameter
-    protected OpService ops;
-    @Parameter
-    private ImageDisplayService imageDisplayService;
-    @Parameter
-    private LogService logService;
-
-    public static void main( String[] args ) throws IOException
-    {
-        String currentFolder = FileSystems.getDefault()
-                .getPath( "" )
-                .toAbsolutePath()
-                .toString();
-        String imageFilePath = "doc/Cochlée1.tif";
-
-        // Launch ImageJ.
-        ImageJ ij = new ImageJ();
-        ij.launch( args );
-
-        // Load the image.
-        Object obj = ij.io().open( new File( currentFolder, imageFilePath ).getAbsolutePath() );
-
-        // Display it.
-        ij.ui().show( obj );
-
-
-        ij.command().run( ZelligeCommandGui.class, true );
-    }
-
-    @Override
-    public void run()
-    {
-
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/Coordinate.java b/src/main/java/fr/pasteur/ida/zellige/element/Coordinate.java
index 834f14c8..43a74d8e 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/Coordinate.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/Coordinate.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 /**
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/Pixels.java b/src/main/java/fr/pasteur/ida/zellige/element/Pixels.java
index 3417cb20..6237d12a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/Pixels.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/Pixels.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import java.util.ArrayList;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/Projection.java b/src/main/java/fr/pasteur/ida/zellige/element/Projection.java
index 1a7b9ce4..633db906 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/Projection.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/Projection.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import net.imglib2.img.Img;
@@ -13,6 +41,7 @@ public class Projection< T extends RealType< T > & NativeType< T > >
     private Img< T > segmentedSurface;
     private Img< T > reduced3DSpace;
     private Img< BitType > segmentedSurfaceMask;
+    private int index;
 
 
     public Img< T > getSegmentedSurface()
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ReferenceSurface.java b/src/main/java/fr/pasteur/ida/zellige/element/ReferenceSurface.java
index 8ca4cfc5..f6ef54cd 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ReferenceSurface.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ReferenceSurface.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import net.imglib2.RandomAccessibleInterval;
@@ -22,6 +50,7 @@ public class ReferenceSurface< T extends RealType< T > & NativeType< T > >
         this.input = input;
         this.factory = factory;
         this.zMap = zMap;
+        this.projection = new Projection<>();
         this.index = index;
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/Surface.java b/src/main/java/fr/pasteur/ida/zellige/element/Surface.java
index b99ebd67..541781e9 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/Surface.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/Surface.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import fr.pasteur.ida.zellige.element.surfaceLine.SurfaceLine;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/AbstractOSE.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/AbstractOSE.java
index 32325503..eaf9c1fc 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/AbstractOSE.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/AbstractOSE.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEList.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEList.java
index 4bdcb78a..b13cbc7b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEList.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEList.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 import java.util.ArrayList;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEListArray.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEListArray.java
index 88cd2644..c58ebc0b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEListArray.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEListArray.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 public class OSEListArray
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEStartingStatus.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEStartingStatus.java
index 12d85f2b..9e66e997 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEStartingStatus.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/OSEStartingStatus.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 import org.slf4j.Logger;
@@ -17,12 +45,12 @@ public class OSEStartingStatus extends TreeMap< Integer, Integer >//TODO an arra
     public OSEStartingStatus( double userThreshold )
     {
         this.userThreshold = userThreshold;
-        LOGGER.info( "OSE starting threshold = {}", userThreshold );
+        LOGGER.debug( "OSE starting threshold = {}", userThreshold );
     }
 
     public  void setStartingStatus()
     {
-        LOGGER.info( "OS count= {}", OSCount );
+        LOGGER.debug( "OS count= {}", OSCount );
         int size = ( int ) ( this.size() * userThreshold );
         if (this.size() != 0)
         {
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/OseXZ.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/OseXZ.java
index d2d948c9..b1ec087e 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/OseXZ.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/OseXZ.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/ose/OseYZ.java b/src/main/java/fr/pasteur/ida/zellige/element/ose/OseYZ.java
index 101175ab..ac47c6b7 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/ose/OseYZ.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/ose/OseYZ.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLine.java b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLine.java
index c5521358..e2720c45 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLine.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLine.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.surfaceLine;
 
 import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
@@ -78,15 +106,10 @@ public abstract class SurfaceLine
         }
         else if ( ( double ) match / ( double ) k >= connexity && k >= overlap )
         {
-//            System.out.println("percent = " + ( double ) match / ( double ) k);
-//            System.out.println("k = " + k);
-//            os.setVisited();
             return surfaceLine;
         }
         else
         {
-//            System.out.println("* percent = " + ( double ) match / ( double ) k);
-//            System.out.println("* k = " + k);
             return null;
         }
     }
@@ -111,10 +134,6 @@ public abstract class SurfaceLine
 
     public boolean isInAdequacyWith( SurfaceLine surfaceLine)
     {
-//        if ( surfaceLine != null )
-//        {
-//            System.out.println("is in adequacy ? " + overlappingRate( surfaceLine ));
-//        }
         return ( surfaceLine == null ) || overlappingRate( surfaceLine ) < ReferenceSurfaceExtraction.getAdequacy();
 
     }
@@ -183,7 +202,7 @@ public abstract class SurfaceLine
     public void merge( SurfaceLine other )
     {
         double o = overlappingRate( other );
-//        System.out.println("overlap = " + o);
+//        LOGGER.debug("overlap = " + o);
 //        if (o < 0.30)
         for ( int i = 0; i <= this.dimension.length - 1; i++ )
         {
@@ -257,9 +276,6 @@ public abstract class SurfaceLine
             }
 //        }
 //        else
-//        {
-//            System.out.println(" sup to 3");
-//        }
         return false;
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineX.java b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineX.java
index 5b3e1442..29fd5b65 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineX.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineX.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.surfaceLine;
 
 import fr.pasteur.ida.zellige.element.ose.AbstractOSE;
@@ -6,17 +34,6 @@ public class SurfaceLineX extends SurfaceLine
 {
 
 
-    /**
-     * Constructor.
-     *
-     * @param os - a list of Coordinates to fill the pixel array.
-     */
-//    public SurfaceLineX( int length, OSE os )
-//    {
-//        super( length, os );
-//        this.setLine( os.get( 0 ).getY() );
-//    }
-
     /**
      * @param length the size of the {@link SurfaceLine}
      * @param os     - a list of Coordinates to fill the pixel array.
@@ -41,40 +58,6 @@ public class SurfaceLineX extends SurfaceLine
      * @param matched - the minimum number of matching coordinates.
      * @return - a new SurfaceLine if there is a match, null otherwise.
      */
-//    @Override
-//    public SurfaceLine match( AbstractOSE os, int j, double percent, int matched )
-//    {
-//        SurfaceLineX surfaceLine = new SurfaceLineX(this.getLength(), this.getLine() + j );
-//        int match = 0;
-//        int k = 0;
-//        for ( int i = 0; i <= os.size() - 1; i++ )
-//        {
-//            int x = os.get( i ).getX();
-//            Coordinate coordinate = os.get( i );
-//            if ( this.get( x ) != null )
-//            {
-//                k++;
-//                if ( isAMatch( this.get( x ), coordinate ) )
-//                {
-//                    match++;
-//                }
-//            }
-//            surfaceLine.set( x, coordinate );
-//        }
-//        if ( k == 0 || match == 0 )
-//        {
-//            return null;
-//        }
-//        else if ( ( double ) match / ( double ) k >= percent && k >= matched )
-//        {
-//            os.setVisited();
-//            return surfaceLine;
-//        }
-//        else
-//        {
-//            return null;
-//        }
-//    }
 
     /**
      * Constructor.
@@ -87,12 +70,6 @@ public class SurfaceLineX extends SurfaceLine
         super(length,  line );
     }
 
-//    public SurfaceLineX( OSE os, int size )
-//    {
-//        super( os , size);
-//        this.setLine( os.get( 0 ).getY() );
-//    }
-
     public SurfaceLineX( AbstractOSE os, int size )
     {
         super( os , size);
diff --git a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineY.java b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineY.java
index 7aededb1..2966f628 100644
--- a/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineY.java
+++ b/src/main/java/fr/pasteur/ida/zellige/element/surfaceLine/SurfaceLineY.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element.surfaceLine;
 
 import fr.pasteur.ida.zellige.element.ose.AbstractOSE;
@@ -38,44 +66,6 @@ public class SurfaceLineY extends SurfaceLine
      * @param connexity - the minimum percentage of match between the OS and the current instance.
      * @return - a new SurfaceLine if there is a match, null otherwise.
      */
-//    public SurfaceLine match( AbstractOSE os, int j, double percent, int matched )
-//    {
-//        SurfaceLineY surfaceLine = new SurfaceLineY(this.getLength(), this.getLine() + j );
-//        int match = 0;
-//        int k = 0;
-//        for ( int i = 0; i <= os.size() - 1; i++ )
-//        {
-//            int y = os.get( i ).getY();
-//            Coordinate coordinate = os.get( i );
-//            if ( this.get( y ) != null )
-//            {
-//                k++;
-//                if ( isAMatch( this.get( y ), coordinate ) )
-//                {
-//                    match++;
-//                }
-//            }
-//            surfaceLine.set( y, coordinate );
-//        }
-//        if ( k == 0 || match == 0 )
-//        {
-//            return null;
-//        }
-//        else if ( ( double ) match / ( double ) k >= percent && k >= matched )
-//        {
-////            System.out.println("percent = " + ( double ) match / ( double ) k);
-////            System.out.println("k = " + k);
-//            os.setVisited();
-//            return surfaceLine;
-//        }
-//        else
-//        {
-////            System.out.println("* percent = " + ( double ) match / ( double ) k);
-////            System.out.println("* k = " + k);
-//            return null;
-//        }
-//    }
-
 
 
     public SurfaceLine match( AbstractOSE os, int direction, int overlap, double connexity )
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/CheckBoxDisplay.java b/src/main/java/fr/pasteur/ida/zellige/gui/CheckBoxDisplay.java
new file mode 100644
index 00000000..ecc08c3c
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/CheckBoxDisplay.java
@@ -0,0 +1,52 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui;
+
+import javafx.scene.control.CheckBox;
+
+public class CheckBoxDisplay extends CheckBox
+{
+
+    private boolean notDisplayed = true;
+
+    public boolean isNotDisplayed()
+    {
+        return notDisplayed;
+    }
+
+    public void disable()
+    {
+        notDisplayed = false;
+    }
+
+    public void enable()
+    {
+        notDisplayed = true;
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ClassifiedImages.java b/src/main/java/fr/pasteur/ida/zellige/gui/ClassifiedImages.java
new file mode 100644
index 00000000..3e9d1863
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ClassifiedImages.java
@@ -0,0 +1,63 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui;
+
+import net.imglib2.img.Img;
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+
+public class ClassifiedImages< T extends RealType< T > & NativeType< T > >
+{
+    private Img< T > amplitudeImg;
+    private Img< T > otsuImg;
+
+    public Img< T > getOtsuImg()
+    {
+        return otsuImg;
+    }
+
+    public void setOtsuImg( Img< T > otsuImg )
+    {
+        this.otsuImg = otsuImg;
+    }
+
+    public Img< T > getAmplitudeImg()
+    {
+        return amplitudeImg;
+    }
+
+    public void setAmplitudeImg( Img< T > amplitudeImg )
+    {
+        this.amplitudeImg = amplitudeImg;
+
+    }
+
+
+
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java b/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
index a12299d0..1414654e 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ConstructionController.java
@@ -1,44 +1,207 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
+import fr.pasteur.ida.zellige.element.Pixels;
+import fr.pasteur.ida.zellige.element.ReferenceSurface;
+import fr.pasteur.ida.zellige.element.Surface;
+import fr.pasteur.ida.zellige.gui.task.AbstractTask;
+import fr.pasteur.ida.zellige.gui.task.ConstructionCompletionTask;
+import fr.pasteur.ida.zellige.gui.task.RunFirstConstructionTask;
+import fr.pasteur.ida.zellige.gui.task.RunSecondConstructionTask;
+import fr.pasteur.ida.zellige.steps.construction.exception.FirstRoundConstructionException;
+import fr.pasteur.ida.zellige.steps.construction.exception.SecondRoundConstructionException;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.value.ChangeListener;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import net.imglib2.RandomAccessibleInterval;
+import net.imglib2.img.ImgFactory;
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.ResourceBundle;
 
-public class ConstructionController implements Initializable
+public class ConstructionController< T extends RealType< T > & NativeType< T > > implements Initializable
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( ConstructionController.class );
+    SimpleObjectProperty< ArrayList< Surface > > firstRoundSurfaces = new SimpleObjectProperty<>();
+    SimpleObjectProperty< ArrayList< Surface > > secondRoundSurfaces = new SimpleObjectProperty<>();
+    SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfaces = new SimpleObjectProperty<>();
+    private RandomAccessibleInterval< T > input;
+    private ImgFactory< T > factory;
+    SimpleObjectProperty< Pixels[][] > maximums = new SimpleObjectProperty<>();
+    private final SimpleBooleanProperty changedParameters = new SimpleBooleanProperty();
+
     @FXML
     private ParameterSliderDouble c1;
-
     @FXML
     private ParameterSliderDouble c2;
-
     @FXML
     private ParameterSliderInteger r1;
-
     @FXML
     private ParameterSliderInteger r2;
-
     @FXML
     private ParameterSliderDouble st1;
-
     @FXML
     private ParameterSliderDouble st2;
-
     @FXML
     private ParameterSliderDouble surfaceSize;
-    public ConstructionController()
-    {
 
-    }
 
     @Override
     public void initialize( URL url, ResourceBundle resourceBundle )
     {
+        /* Component */
+        ChangeListener< ? super Number > firstRoundListener = ( observable, oldValue, newValue ) ->
+        {
+            firstRoundSurfaces.setValue( null );
+            changedParameters.setValue( true );
+        };
+        c1.sliderProperty().addListener( firstRoundListener );
+        r1.sliderProperty().addListener( firstRoundListener );
+        st1.sliderProperty().addListener( firstRoundListener );
+        surfaceSize.sliderProperty().addListener( firstRoundListener );
+        ChangeListener< ? super Number > secondRoundListener = ( observable, oldValue, newValue ) ->
+        {
+            changedParameters.setValue( true );
+            secondRoundSurfaces.setValue( null );
+        };
+        c2.sliderProperty().addListener( secondRoundListener );
+        r2.sliderProperty().addListener( secondRoundListener );
+        st2.sliderProperty().addListener( secondRoundListener );
+        surfaceSize.sliderProperty().addListener( secondRoundListener );
+
+        /* Properties*/
+        maximums.addListener( ( observable, oldValue, newValue ) ->
+        {
+            if ( newValue != null )
+            {
+                LOGGER.debug( "Max is not null" );
+                firstRound();
+            }
+            else
+            {
+                LOGGER.debug( "MAX is NULL" );
+                firstRoundSurfaces.setValue( null );
+            }
+        } );
+        firstRoundSurfaces.addListener( ( observableValue, surfaces, t1 ) ->
+        {
+            if ( t1 == null )
+            {
+                LOGGER.debug( "FIRST_ROUND_SURFACE  is NULL" );
+                secondRoundSurfaces.setValue( null );
+            }
+            else
+            {
+                secondRound();
+            }
+        } );
+        secondRoundSurfaces.addListener( ( observableValue, surfaces, t1 ) ->
+        {
+            if ( t1 == null )
+            {
+                LOGGER.debug( "SECOND_ROUND_SURFACE  is NULL" );
+                referenceSurfaces.setValue( null );
+            }
+            else
+            {
+                constructionCompletion();
+            }
+        } );
+
+    }
+
+    private void firstRound()
+    {
+        LOGGER.info( "Computing first round construction..." );
+        AbstractTask< ArrayList< Surface > > firstRoundTask = new RunFirstConstructionTask( maximums.getValue(), getSt1(), getR1(), getC1(), getSurfaceSize() );
+        firstRoundTask.setOnSucceeded( workerStateEvent ->
+        {
+            firstRoundSurfaces.setValue( firstRoundTask.getValue() );
+            if ( firstRoundTask.getValue() == null )
+            {
+                LOGGER.info( "" ); //TODO write right message
+                MainController.showError( new FirstRoundConstructionException() );
+            }
+        } );
+
+        LOGGER.info( "First round construction done." );
+        firstRoundTask.start();
+    }
+
+    private void secondRound()
+    {
+        LOGGER.info( "Computing second round construction..." );
+        AbstractTask< ArrayList< Surface > > secondRoundTask = new RunSecondConstructionTask( firstRoundSurfaces.getValue(), getSt2(), getR2(), getC2(), getSurfaceSize() );
+        secondRoundTask.setOnSucceeded( workerStateEvent ->
+        {
+            secondRoundSurfaces.setValue( secondRoundTask.getValue() );
+            if ( secondRoundTask.getValue() == null )
+            {
+                LOGGER.info( "" ); //TODO write right message
+                MainController.showError( new SecondRoundConstructionException() );
+            }
+        } );
+        LOGGER.info( "Second round construction done." );
+        secondRoundTask.start();
+    }
+
+    private void constructionCompletion()
+    {
+        AbstractTask< ArrayList< ReferenceSurface< T > > > constructionCompletionTask = new ConstructionCompletionTask<>( input, factory, secondRoundSurfaces.getValue() );
+        constructionCompletionTask.setOnSucceeded( workerStateEvent ->
+                referenceSurfaces.setValue( constructionCompletionTask.getValue() ) );
+        constructionCompletionTask.start();
+    }
 
+
+    public void runConstruction()
+    {
+        LOGGER.debug( "Run construction" );
+        if ( firstRoundSurfacesProperty().getValue() == null )
+        {
+            firstRound();
+        }
+        else if ( secondRoundSurfaces.getValue() == null )
+        {
+            secondRound();
+        }
     }
 
+
     public double getC1()
     {
         return c1.getSlider().getValue();
@@ -73,4 +236,35 @@ public class ConstructionController implements Initializable
     {
         return surfaceSize.getSlider().getValue();
     }
+
+    public RandomAccessibleInterval< T > getInput()
+    {
+        return input;
+    }
+
+    public void setInput( RandomAccessibleInterval< T > input )
+    {
+        this.input = input;
+    }
+
+
+    public void setFactory( ImgFactory< T > factory )
+    {
+        this.factory = factory;
+    }
+
+    public SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfacesProperty()
+    {
+        return referenceSurfaces;
+    }
+
+    public SimpleObjectProperty< ArrayList< Surface > > firstRoundSurfacesProperty()
+    {
+        return firstRoundSurfaces;
+    }
+
+    public SimpleBooleanProperty changedParametersProperty()
+    {
+        return changedParameters;
+    }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/DisplayController.java b/src/main/java/fr/pasteur/ida/zellige/gui/DisplayController.java
index 782c99c4..d239a7d5 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/DisplayController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/DisplayController.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.fxml.FXML;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/FileCombobox.java b/src/main/java/fr/pasteur/ida/zellige/gui/FileCombobox.java
deleted file mode 100644
index f427c2b5..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/FileCombobox.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package fr.pasteur.ida.zellige.gui;
-
-import javafx.scene.control.ComboBox;
-import net.imagej.Dataset;
-
-public class FileCombobox extends ComboBox< Dataset >
-{
-
-    public void setBehavior()
-    {
-        /* Control of the file comboBox*/
-//      setOnMousePressed( event ->
-//    setAndDisplayDatasetChoices() );
-//
-//        activeDataset.getSelectionModel().selectedItemProperty().addListener( ( observableValue, oldValue, newValue ) ->
-//    {
-//        LOGGER.debug( "selectedItemProperty : old value = {}, new value = {} " , oldValue, newValue);
-//        int index = activeDataset.getSelectionModel().getSelectedIndex();
-//        if ( oldValue == null && newValue != null )
-//        {
-//            LOGGER.debug( "case 1" );
-//            Dataset dataset = datasets.get(index);
-//            selectAndLoadNewImage( dataset );
-//        }
-//        else if ( oldValue != null && newValue != null && !oldValue.equals( newValue ))
-//        {
-//            LOGGER.debug( "case 2" );
-//            Dataset dataset = datasets.get(index);
-//            selectAndLoadNewImage( dataset );
-//        }
-//        else if (oldValue == null )
-//        {
-//            LOGGER.debug("case 3");
-//            showError( new NoInputException() );
-//        }
-//    } );
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ImageFXDisplay.java b/src/main/java/fr/pasteur/ida/zellige/gui/ImageFXDisplay.java
index fabbfa8e..744bb682 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ImageFXDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ImageFXDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.scene.image.ImageView;
@@ -85,11 +113,11 @@ public class ImageFXDisplay
     {
         if ( width >= height )
         {
-            imageView.setFitWidth( 280 );
+            imageView.setFitWidth( 254 );
         }
         else
         {
-            imageView.setFitHeight( 280 );
+            imageView.setFitHeight( 254 );
         }
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/LogAppender.java b/src/main/java/fr/pasteur/ida/zellige/gui/LogAppender.java
new file mode 100644
index 00000000..c8c4477d
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/LogAppender.java
@@ -0,0 +1,59 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.AppenderBase;
+import javafx.beans.property.SimpleStringProperty;
+
+public class LogAppender extends AppenderBase< ILoggingEvent >
+{
+    private final static SimpleStringProperty logMessage = new SimpleStringProperty();
+
+    public static String getLogMessage()
+    {
+        return logMessage.get();
+    }
+
+    public static SimpleStringProperty logMsgProperty()
+    {
+        return logMessage;
+    }
+
+    @Override
+    protected void append( ILoggingEvent iLoggingEvent )
+    {
+        String level = iLoggingEvent.getLevel().toString();
+        if ( level.equals( Level.INFO.toString() ) )
+        {
+            logMessage.setValue( iLoggingEvent.getFormattedMessage() );
+        }
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java b/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
index e1fb9fcf..f0058a2a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/MainAppFrame.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
@@ -5,7 +33,7 @@ import javafx.application.Platform;
 import javafx.embed.swing.JFXPanel;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Scene;
-import javafx.scene.layout.AnchorPane;
+import javafx.scene.layout.VBox;
 import net.imagej.ImageJ;
 import net.imagej.display.ImageDisplayService;
 import net.imglib2.type.NativeType;
@@ -46,8 +74,6 @@ public class MainAppFrame extends JFrame
         this.fxPanel = new JFXPanel();
         this.add( this.fxPanel );
         this.setVisible( true );
-        LOGGER.info( "JFRAME" );
-
         // The call to runLater() avoid a mix between JavaFX thread and Swing
         // thread.
         Platform.runLater( this::initFX );
@@ -61,7 +87,7 @@ public class MainAppFrame extends JFrame
             ResourceBundle bundle = ResourceBundle.getBundle( "gui" );// access to properties f
             FXMLLoader loader = new FXMLLoader( MainAppFrame.class.getClassLoader().getResource( "fr.pasteur.ida.zellige.gui.view/Main.fxml" ), bundle );
 
-            AnchorPane rootLayout = loader.load();
+            VBox rootLayout = loader.load();
 
             // Get the controller and add an ImageJ context to it.
             MainController< T > controller = loader.getController();
@@ -82,7 +108,6 @@ public class MainAppFrame extends JFrame
         }
     }
 
-
     public LogService getLogService()
     {
         return logService;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java b/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
index ee21be33..971797c4 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/MainController.java
@@ -1,16 +1,47 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import fr.pasteur.ida.zellige.element.Pixels;
-import fr.pasteur.ida.zellige.element.ReferenceSurface;
-import fr.pasteur.ida.zellige.element.Surface;
+import fr.pasteur.ida.zellige.gui.exception.NoA3DStackException;
 import fr.pasteur.ida.zellige.gui.exception.NoInputException;
-import fr.pasteur.ida.zellige.gui.task.*;
+import fr.pasteur.ida.zellige.gui.task.AbstractTask;
+import fr.pasteur.ida.zellige.gui.task.ComputeClassificationImagesTask;
+import fr.pasteur.ida.zellige.gui.task.DisplayDatasetChoicesTask;
+import fr.pasteur.ida.zellige.gui.task.PretreatmentTask;
 import fr.pasteur.ida.zellige.steps.construction.exception.NoSurfaceFoundException;
 import fr.pasteur.ida.zellige.steps.projection.NoPossibleDisplayException;
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
 import fr.pasteur.ida.zellige.steps.selection.exception.EmptyOutputException;
 import fr.pasteur.ida.zellige.steps.selection.exception.NoClassificationException;
+import javafx.application.Platform;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleObjectProperty;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
@@ -18,57 +49,96 @@ import javafx.fxml.Initializable;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
 import javafx.scene.control.ComboBox;
-import javafx.scene.text.Font;
-import javafx.scene.text.FontWeight;
+import javafx.scene.control.Label;
 import net.imagej.Dataset;
 import net.imagej.ImgPlus;
+import net.imglib2.img.Img;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.numeric.RealType;
-import net.imglib2.util.Util;
+import net.imglib2.type.numeric.real.FloatType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.ResourceBundle;
 
 public class MainController< T extends RealType< T > & NativeType< T > > implements Initializable
 {
+
     private final static Logger LOGGER = LoggerFactory.getLogger( MainController.class );
+    private final SimpleObjectProperty< Dataset > currentDataset = new SimpleObjectProperty<>();
+    private final SimpleObjectProperty< ClassifiedImages< FloatType > > images = new SimpleObjectProperty<>();
+    private final SimpleObjectProperty< Img< FloatType > > pretreatedImg = new SimpleObjectProperty<>();
 
     @FXML
-    ComboBox< Dataset > activeDataset;
-
+    ComboBox< Dataset > activeDatasets;
+    private final SimpleBooleanProperty changedParameters = new SimpleBooleanProperty();
     @FXML
     private Button runButton;
-
     @FXML
-    private ConstructionController constructionController;
+    private ConstructionController< T > constructionController;
 
     @FXML
-    private ProjectionController projectionController;
-
+    private Label logInfo;
+    private MainAppFrame mainAppFrame;
     @FXML
-    private SelectionController< T > selectionController;
+    private ProjectionController< T > projectionController;
+    @FXML
+    private SelectionController selectionController;
+
 
-    private ReferenceSurfaceExtraction< T > extraction;
+    @Override
+    public void initialize( URL url, ResourceBundle resourceBundle )
+    {
+        /* Control of the files comboBox*/
+        activeDatasets.setOnMousePressed( event ->
+                setAndDisplayDatasetChoices() );// Update of the list of opened Fiji images
 
-    private Dataset currentDataset;
+        activeDatasets.getSelectionModel().selectedItemProperty().addListener( ( observableValue, oldValue, newValue ) ->
+        {
 
-    private MainAppFrame mainAppFrame;
+            LOGGER.debug( "selectedItemProperty : old value = {}, new value = {} ", oldValue, newValue );
 
-    private Pixels[][] pixels;
+            if ( newValue != null )
+            {
+                setCurrentDataset( newValue );
+            }
+        } );
+        currentDataset.addListener( ( observableValue, dataset, t1 ) ->
+        {
+            if ( t1 != null )
+            {
+                selectionController.disableParameters();
+                runPretreatment( currentDataset.getValue() );
+            }
+            else
+            {
+                pretreatedImg.setValue( null );
+                LOGGER.debug( "PRETREATED_IMAGE is NULL" );
+            }
+        } );
 
+        pretreatedImg.addListener( ( observable, oldValue, newValue ) ->
+        {
+            if ( newValue != null )
+            {
+                computeClassifiedImages();
+            }
+            else
+            {
+                images.setValue( null );
+                LOGGER.debug( "IMAGES is NULL" );
+            }
+        } );
 
-    @Override
-    public void initialize( URL url, ResourceBundle resourceBundle )
-    {
         // run button initialization
         runButton.setOnAction( actionEvent ->
         {
             try
             {
-                run();
+                runButton.setDisable( true );
+                changedParameters.setValue( false );
+                run2();
             }
             catch ( DataValidationException | EmptyOutputException | NoClassificationException | NoSurfaceFoundException | NoPossibleDisplayException e )
             {
@@ -76,32 +146,37 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
             }
         } );
 
-        /* Control of the files comboBox*/
-        activeDataset.setStyle( "-fx-font: 13px \"System\";" );
-        activeDataset.setOnMousePressed( event ->
-                setAndDisplayDatasetChoices() );// the list of open Fiji images is updated
+        /* Binding properties*/
+        selectionController.pretreatedImg.bind( pretreatedImg );
+        selectionController.imagesProperty().bind( images );
+        constructionController.maximums.bind( selectionController.max );
+        projectionController.referenceSurfacesProperty().bind( constructionController.referenceSurfacesProperty() );
+        changedParameters.bindBidirectional( selectionController.changedParametersProperty() );
+        selectionController.changedParametersProperty().bindBidirectional( constructionController.changedParametersProperty() );
+        constructionController.changedParametersProperty().bindBidirectional( projectionController.changedParametersProperty() );
 
-        activeDataset.getSelectionModel().selectedItemProperty().addListener( ( observableValue, oldValue, newValue ) ->
+        changedParameters.addListener( ( observable, oldValue, newValue ) ->
         {
-            LOGGER.debug( "selectedItemProperty : old value = {}, new value = {} ", oldValue, newValue );
-            if ( oldValue == null && newValue != null )
+            LOGGER.debug( "Parameter change" );
+            if ( newValue )
             {
-                LOGGER.debug( "case 1" );
-                selectAndLoadNewImage( activeDataset.getSelectionModel().getSelectedItem() );
-            }
-            else if ( oldValue != null && newValue != null && ! oldValue.equals( newValue ) )
-            {
-                LOGGER.debug( "case 2" );
-                selectAndLoadNewImage( newValue );
+                LOGGER.debug( "Active button" );
+                runButton.setDisable( false );
+
             }
-            activeDataset.getEditor().setFont( Font.font( "Symbol", FontWeight.EXTRA_BOLD, 9 ) );
         } );
 
-
+        // Update of the program status using LOG.INFO outputs
+        LogAppender.logMsgProperty().addListener( ( observable, oldValue, newValue ) ->
+                Platform.runLater(
+                        () ->
+                                logInfo.setText( LogAppender.getLogMessage() ) ) );
     }
 
+
     public void initExtraction() throws DataValidationException
     {
+
         LOGGER.debug( "Init Extraction" );
         Dataset dataset = mainAppFrame.getImage().getActiveDataset();
         if ( dataset == null )
@@ -109,167 +184,234 @@ public class MainController< T extends RealType< T > & NativeType< T > > impleme
             showError( new NoInputException() );
             return;
         }
-//        datasets.add( dataset );
-        activeDataset.getItems().add( dataset );
+        activeDatasets.getItems().add( dataset );
         LOGGER.debug( "Init Extraction completed" );
     }
 
-    public void run() throws DataValidationException, EmptyOutputException, NoClassificationException, NoSurfaceFoundException, NoPossibleDisplayException
+    //    public void run() throws DataValidationException, EmptyOutputException, NoClassificationException, NoSurfaceFoundException, NoPossibleDisplayException
+//    {
+//        long[] dims = new long[ currentDataset.numDimensions() ];
+//        currentDataset.dimensions( dims );
+//        mainAppFrame.getLogService().info( "Zellige received the image: " + currentDataset.getName() );
+//        mainAppFrame.getLogService().info( "Size: " + Util.printInterval( currentDataset ) );
+//        mainAppFrame.getLogService().info( "Type: " + currentDataset.firstElement().getClass().toGenericString() );
+//        mainAppFrame.getLogService().info( "Dimensionality: " + currentDataset.numDimensions() + "D" );
+//        for ( int d = 0; d < currentDataset.numDimensions(); d++ )
+//        {
+//            mainAppFrame.getLogService().info( " - dimension " + d + ": [" + currentDataset.axis( d ).type() + "], 1 unit = " + currentDataset.averageScale( d ) + " " + currentDataset.axis( d ).unit() );
+//        }
+//        // Fixed parameters
+//        String filter = "GaussianBlur";
+//        double filterParameter = 2;
+//        // End of fixed parameters
+//        int connexity = 4;
+//
+//        double startingOsSize1 = constructionController.getSt1();
+//        int overlap1 = constructionController.getR1();
+//        double connexityRate1 = constructionController.getC1();
+//        double startingOsSize2 = constructionController.getSt2();
+//        int overlap2 = constructionController.getR2();
+//        double connexityRate2 = constructionController.getC2();
+//        double surfaceMinSizeFactor = constructionController.getSurfaceSize();
+//        int delta = projectionController.getDelta();
+//        String method = projectionController.getMethod();
+//        /* Print parameters.*/
+//        mainAppFrame.getLogService().info( "Input : " + currentDataset.getName() );
+//        mainAppFrame.getLogService().info( "filter : " + filter );
+//        mainAppFrame.getLogService().info( "filterParameter : " + filterParameter );
+//        mainAppFrame.getLogService().info( "amplitude  : " + getAmplitude() );
+//        mainAppFrame.getLogService().info( "threshold  : " + getOtsu() );
+//        mainAppFrame.getLogService().info( "connexity : " + connexity );
+//        mainAppFrame.getLogService().info( "islandSize : " + getIsland() );
+//        mainAppFrame.getLogService().info( "sigmaXY : " + getSigmaXY() );
+//        mainAppFrame.getLogService().info( "sigmaZ : " + getSigmaZ() );
+//        mainAppFrame.getLogService().info( "startingOsSize1 : " + startingOsSize1 );
+//        mainAppFrame.getLogService().info( "overlap1 : " + overlap1 );
+//        mainAppFrame.getLogService().info( "connexityRate1  : " + connexityRate1 );
+//        mainAppFrame.getLogService().info( "startingOsSize2 : " + startingOsSize2 );
+//        mainAppFrame.getLogService().info( "overlap2 : " + overlap2 );
+//        mainAppFrame.getLogService().info( "connexityRate2  : " + connexityRate2 );
+//        mainAppFrame.getLogService().info( "surfaceMinimumSizeFactor : " + surfaceMinSizeFactor );
+//        mainAppFrame.getLogService().info( "delta : " + delta + "\n" );
+//        /* End of  Print parameters.*/
+//
+//        SimpleObjectProperty<Pixels[][]> pixelsProperty = new SimpleObjectProperty<>();
+//        fromIslandSearch();
+////        AbstractTask< Pixels[][] > runPostTreatmentTask = new RunPostTreatmentTask<>( extraction, getSigmaXY(), getSigmaZ(), getIsland(), connexity );
+////        runPostTreatmentTask.setOnSucceeded( workerStateEvent ->
+////        {
+////            AbstractTask< ArrayList< Surface > > runFirstConstructionTask = new RunFirstConstructionTask(
+////                    runPostTreatmentTask.getValue(),
+////                    startingOsSize1,
+////                    overlap1,
+////                    connexityRate1,
+////                    surfaceMinSizeFactor );
+////            runFirstConstructionTask.setOnSucceeded( workerStateEvent2 ->
+////            {
+////                AbstractTask< ArrayList< Surface > > runSecondConstructionTask = new RunSecondConstructionTask(
+////                        runFirstConstructionTask.getValue(),
+////                        startingOsSize2,
+////                        overlap2,
+////                        connexityRate2,
+////                        surfaceMinSizeFactor );
+////                runSecondConstructionTask.setOnSucceeded( workerStateEvent3 ->
+////                {
+////                    ImgPlus< T > input = ( ImgPlus< T > ) currentDataset.getImgPlus();
+////                    AbstractTask< ArrayList< ReferenceSurface< T > > > constructionCompletionTask = new ConstructionCompletionTask<>( input, input.factory(), runSecondConstructionTask.getValue() );
+////                    constructionCompletionTask.setOnSucceeded( workerStateEvent4 ->
+////                    {
+////                        extraction.getReferenceSurfaces().addAll( constructionCompletionTask.getValue() );
+////                        AbstractTask< Void > projectionTask = new ProjectionTask<>( constructionCompletionTask.getValue(), delta, method,
+////                                projectionController.getProjection(),
+////                                projectionController.getRawHeightmap(),
+////                                projectionController.getExtractedHeightMap(),
+////                                projectionController.getReduced3DSpace(),
+////                                projectionController.getSegmentedSurface(),
+////                                projectionController.getSegmentedSurfaceMask(),
+////                                projectionController.getDelta2() );
+////                        projectionTask.start();
+////                    } );
+////                    constructionCompletionTask.start();
+////                } );
+////                runSecondConstructionTask.start();
+////
+////            } );
+////            runFirstConstructionTask.start();
+////        } );
+////        runPostTreatmentTask.start();
+//
+//    }
+
+    public void run2() throws DataValidationException, EmptyOutputException, NoClassificationException, NoSurfaceFoundException, NoPossibleDisplayException
     {
-        long[] dims = new long[ currentDataset.numDimensions() ];
-        currentDataset.dimensions( dims );
-        mainAppFrame.getLogService().info( "Zellige received the image: " + currentDataset.getName() );
-        mainAppFrame.getLogService().info( "Size: " + Util.printInterval( currentDataset ) );
-        mainAppFrame.getLogService().info( "Type: " + currentDataset.firstElement().getClass().toGenericString() );
-        mainAppFrame.getLogService().info( "Dimensionality: " + currentDataset.numDimensions() + "D" );
-        for ( int d = 0; d < currentDataset.numDimensions(); d++ )
+
+        if ( selectionController.max.getValue() != null )
         {
-            mainAppFrame.getLogService().info( " - dimension " + d + ": [" + currentDataset.axis( d ).type() + "], 1 unit = " + currentDataset.averageScale( d ) + " " + currentDataset.axis( d ).unit() );
+            if ( constructionController.referenceSurfaces.getValue() != null )
+            {
+                projectionController.runProjection();
+            }
+            else
+            {
+                constructionController.runConstruction();
+            }
         }
-        // Fixed parameters
-        String filter = "GaussianBlur";
-        double filterParameter = 2;
-        // End of fixed parameters
-        int connexity = 4;
-
-        double startingOsSize1 = constructionController.getSt1();
-        int overlap1 = constructionController.getR1();
-        double connexityRate1 = constructionController.getC1();
-        double startingOsSize2 = constructionController.getSt2();
-        int overlap2 = constructionController.getR2();
-        double connexityRate2 = constructionController.getC2();
-        double surfaceMinSizeFactor = constructionController.getSurfaceSize();
-        int delta = projectionController.getDelta();
-        String method = projectionController.getMethod();
-        /* Print parameters.*/
-        mainAppFrame.getLogService().info( "Input : " + currentDataset.getName() );
-        mainAppFrame.getLogService().info( "filter : " + filter );
-        mainAppFrame.getLogService().info( "filterParameter : " + filterParameter );
-        mainAppFrame.getLogService().info( "amplitude  : " + getAmplitude() );
-        mainAppFrame.getLogService().info( "threshold  : " + getOtsu() );
-        mainAppFrame.getLogService().info( "connexity : " + connexity );
-        mainAppFrame.getLogService().info( "islandSize : " + getIsland() );
-        mainAppFrame.getLogService().info( "sigmaXY : " + getSigmaXY() );
-        mainAppFrame.getLogService().info( "sigmaZ : " + getSigmaZ() );
-        mainAppFrame.getLogService().info( "startingOsSize1 : " + startingOsSize1 );
-        mainAppFrame.getLogService().info( "overlap1 : " + overlap1 );
-        mainAppFrame.getLogService().info( "connexityRate1  : " + connexityRate1 );
-        mainAppFrame.getLogService().info( "startingOsSize2 : " + startingOsSize2 );
-        mainAppFrame.getLogService().info( "overlap2 : " + overlap2 );
-        mainAppFrame.getLogService().info( "connexityRate2  : " + connexityRate2 );
-        mainAppFrame.getLogService().info( "surfaceMinimumSizeFactor : " + surfaceMinSizeFactor );
-        mainAppFrame.getLogService().info( "delta : " + delta + "\n" );
-        /* End of  Print parameters.*/
-
-
-        AbstractTask< Pixels[][] > runPostTreatmentTask = new RunPostTreatmentTask<>( extraction, getSigmaXY(), getSigmaZ(), getIsland(), connexity );
-        runPostTreatmentTask.setOnSucceeded( workerStateEvent ->
+        else
         {
-            AbstractTask< ArrayList< Surface > > runFirstConstructionTask = new RunFirstConstructionTask(
-                    runPostTreatmentTask.getValue(),
-                    startingOsSize1,
-                    overlap1,
-                    connexityRate1,
-                    surfaceMinSizeFactor );
-            runFirstConstructionTask.setOnSucceeded( workerStateEvent2 ->
-            {
-                AbstractTask< ArrayList< Surface > > runSecondConstructionTask = new RunSecondConstructionTask(
-                        runFirstConstructionTask.getValue(),
-                        startingOsSize2,
-                        overlap2,
-                        connexityRate2,
-                        surfaceMinSizeFactor );
-                runSecondConstructionTask.setOnSucceeded( workerStateEvent3 ->
-                {
-                    ImgPlus< T > input = ( ImgPlus< T > ) currentDataset.getImgPlus();
-                    AbstractTask< ArrayList< ReferenceSurface< T > > > constructionCompletionTask = new ConstructionCompletionTask<>( input, input.factory(), runSecondConstructionTask.getValue() );
-                    constructionCompletionTask.setOnSucceeded( workerStateEvent4 ->
-                    {
-                        extraction.getReferenceSurfaces().addAll( constructionCompletionTask.getValue() );
-                        AbstractTask< Void > projectionTask = new ProjectionTask<>( constructionCompletionTask.getValue(), delta, method,
-                                projectionController.getProjection(),
-                                projectionController.getRawHeightmap(),
-                                projectionController.getExtractedHeightMap(),
-                                projectionController.getReduced3DSpace(),
-                                projectionController.getSegmentedSurface(),
-                                projectionController.getSegmentedSurfaceMask(),
-                                projectionController.getDelta2() );
-                        projectionTask.start();
-                    } );
-                    constructionCompletionTask.start();
-                } );
-                runSecondConstructionTask.start();
-
-            } );
-            runFirstConstructionTask.start();
-        } );
-        runPostTreatmentTask.start();
-
+            selectionController.runPixelSelection();
+        }
+        LOGGER.debug( "###########################################---NEW RUN---###########################################" );
     }
 
-    private void showError( Exception exception )
+/*          LOG INFO
+//        long[] dims = new long[ currentDataset.numDimensions() ];
+//        currentDataset.dimensions( dims );
+//        mainAppFrame.getLogService().info( "Zellige received the image: " + currentDataset.getName() );
+//        mainAppFrame.getLogService().info( "Size: " + Util.printInterval( currentDataset ) );
+//        mainAppFrame.getLogService().info( "Type: " + currentDataset.firstElement().getClass().toGenericString() );
+//        mainAppFrame.getLogService().info( "Dimensionality: " + currentDataset.numDimensions() + "D" );
+//        for ( int d = 0; d < currentDataset.numDimensions(); d++ )
+//        {
+//            mainAppFrame.getLogService().info( " - dimension " + d + ": [" + currentDataset.axis( d ).type() + "], 1 unit = " + currentDataset.averageScale( d ) + " " + currentDataset.axis( d ).unit() );
+//        }
+//        // Fixed parameters
+//        String filter = "GaussianBlur";
+//        double filterParameter = 2;
+//        // End of fixed parameters.
+//        int connexity = 4;
+//
+//        double startingOsSize1 = constructionController.getSt1();
+//        int overlap1 = constructionController.getR1();
+//        double connexityRate1 = constructionController.getC1();
+//        double startingOsSize2 = constructionController.getSt2();
+//        int overlap2 = constructionController.getR2();
+//        double connexityRate2 = constructionController.getC2();
+//        double surfaceMinSizeFactor = constructionController.getSurfaceSize();
+//        int delta = projectionController.getDelta();
+//        String method = projectionController.getMethod();
+//        /* Print parameters.*/
+
+/*       mainAppFrame.getLogService().info( "Input : " + currentDataset.getName() );
+//        mainAppFrame.getLogService().info( "filter : " + filter );
+//        mainAppFrame.getLogService().info( "filterParameter : " + filterParameter );
+//        mainAppFrame.getLogService().info( "amplitude  : " + getAmplitude() );
+//        mainAppFrame.getLogService().info( "threshold  : " + getOtsu() );
+//        mainAppFrame.getLogService().info( "connexity : " + connexity );
+//        mainAppFrame.getLogService().info( "islandSize : " + getIsland() );
+//        mainAppFrame.getLogService().info( "sigmaXY : " + getSigmaXY() );
+//        mainAppFrame.getLogService().info( "sigmaZ : " + getSigmaZ() );
+//        mainAppFrame.getLogService().info( "startingOsSize1 : " + startingOsSize1 );
+//        mainAppFrame.getLogService().info( "overlap1 : " + overlap1 );
+//        mainAppFrame.getLogService().info( "connexityRate1  : " + connexityRate1 );
+//        mainAppFrame.getLogService().info( "startingOsSize2 : " + startingOsSize2 );
+//        mainAppFrame.getLogService().info( "overlap2 : " + overlap2 );
+//        mainAppFrame.getLogService().info( "connexityRate2  : " + connexityRate2 );
+//        mainAppFrame.getLogService().info( "surfaceMinimumSizeFactor : " + surfaceMinSizeFactor );
+//        mainAppFrame.getLogService().info( "delta : " + delta + "\n" );
+//        /* End of  Print parameters.*/
+
+
+    private void runPretreatment( Dataset dataset )
     {
-        Alert alert = new Alert( Alert.AlertType.ERROR );
-        alert.setTitle( "Error alert" );
-        alert.setHeaderText( exception.getMessage() );
-        alert.showAndWait();
+        AbstractTask< Img< FloatType > > task = new PretreatmentTask<>( dataset );
+        task.setOnSucceeded( workerStateEvent ->
+                pretreatedImg.setValue( task.getValue() ) );
+        task.start();
     }
 
     public void setAndDisplayDatasetChoices()
     {
-        AbstractTask< ArrayList< Dataset > > displayTask = new DisplayDatasetChoicesTask( mainAppFrame.getImage() );
+        DisplayDatasetChoicesTask displayTask = new DisplayDatasetChoicesTask( mainAppFrame.getImage() );
         displayTask.setOnSucceeded( workerStateEvent ->
         {
             LOGGER.debug( "Datasets displayed successfully" );
             ObservableList< Dataset > list = FXCollections.observableArrayList( displayTask.getValue() );
-            activeDataset.setItems( list );
+            activeDatasets.setItems( list );
             LOGGER.debug( "item selected : list size = " + list.size() );
             if ( list.isEmpty() )
             {
+                currentDataset.setValue( null );
+                LOGGER.debug( "CURRENT_DATASET is NULL" );
                 showError( new NoInputException() );
             }
         } );
         displayTask.start();
-
     }
 
-    public void selectAndLoadNewImage( Dataset dataset )
+    public void setCurrentDataset( Dataset dataset )
     {
-        AbstractTask< Dataset > setCurrentDatasetTask = new SetCurrentDatasetTask( dataset );
-        setCurrentDatasetTask.setOnSucceeded( workerStateEvent ->
+        if ( dataset != currentDataset.getValue() )
         {
-            this.currentDataset = setCurrentDatasetTask.getValue();
-            LOGGER.debug( "Dataset setting successful" );
-            if ( currentDataset != null )
+            if ( dataset.numDimensions() != 3 )
             {
-                selectionController.disableSliders();
-                AbstractTask< ReferenceSurfaceExtraction< T > > startExtraction = new CreateExtractionTask<>( currentDataset, getAmplitude(), getOtsu() );
-                startExtraction.setOnSucceeded( workerStateEvent2 ->
-                {
-                    this.extraction = startExtraction.getValue();
-                    LOGGER.debug( "Input image loaded" );
-                    activeDataset.getSelectionModel().select( currentDataset );
-                    selectionController.set( this.extraction );
-                    selectionController.displayClassification();
-                    selectionController.enableParameters();
-                    activeDataset.setDisable( false );
-                } );
-                startExtraction.start();
+                LOGGER.debug( "show error!!!" );
+                showError( new NoA3DStackException() );
             }
             else
             {
-                LOGGER.debug( "show error!!!" );
-                showError( new NoInputException() );
+                currentDataset.setValue( dataset );
+                Img< T > input = ( ImgPlus< T > ) dataset.getImgPlus();
+                constructionController.setInput( input );
+                constructionController.setFactory( input.factory() );
             }
-        } );
-        if ( dataset != currentDataset )
-        {
-            selectionController.disableSliders();
-            activeDataset.setDisable( true );
-            setCurrentDatasetTask.start();
         }
     }
 
+    public void computeClassifiedImages()
+    {
+        ComputeClassificationImagesTask classifiedImagesTask = new ComputeClassificationImagesTask( pretreatedImg.getValue() );
+        classifiedImagesTask.setOnSucceeded( workerStateEvent -> images.set( classifiedImagesTask.getValue() ) );
+        classifiedImagesTask.start();
+    }
+
+    public static void showError( Exception exception )
+    {
+        Alert alert = new Alert( Alert.AlertType.ERROR );
+        alert.setTitle( "Error alert" );
+        alert.setHeaderText( exception.getMessage() );
+        alert.showAndWait();
+    }
+
     public void setMainApp( MainAppFrame mainAppFrame )
     {
         this.mainAppFrame = mainAppFrame;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
index a561753c..63cba688 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSlider.java
@@ -1,6 +1,35 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.beans.NamedArg;
+import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.StringProperty;
 import javafx.css.PseudoClass;
 import javafx.fxml.FXML;
@@ -26,9 +55,10 @@ public abstract class ParameterSlider extends GridPane
     @FXML
     private TextField textField;
     private StringProperty userValue;
+    private DoubleProperty sliderProperty;
     private Number previousValue = 1;
-    private String interval;
-    private PseudoClass errorClass = PseudoClass.getPseudoClass( "error" );
+    private final String interval;
+    private final PseudoClass errorClass = PseudoClass.getPseudoClass( "error" );
 
     public ParameterSlider( @NamedArg( "name" ) String name,
                             @NamedArg( "min" ) double min,
@@ -88,7 +118,6 @@ public abstract class ParameterSlider extends GridPane
     {
         this.userValueProperty().addListener( event ->
         {
-            System.out.println( "Changed" );
             this.getTextField().pseudoClassStateChanged(
                     this.getErrorClass(), ! this.getTextField().getText().matches( this.getInterval() )
             );
@@ -100,7 +129,7 @@ public abstract class ParameterSlider extends GridPane
 
     public boolean hasChanged( Number newValue )
     {
-        if ( ! getSlider().isValueChanging() && previousValue != newValue )
+        if ( ! getSlider().isValueChanging() && ! previousValue.equals( newValue ) )
         {
             previousValue = newValue;
             return true;
@@ -152,6 +181,17 @@ public abstract class ParameterSlider extends GridPane
         return slider;
     }
 
+    public double getSliderProperty()
+    {
+        return sliderProperty.get();
+    }
+
+    public DoubleProperty sliderProperty()
+    {
+        return getSlider().valueProperty();
+    }
+
+
     public void setSlider( Slider slider )
     {
         this.slider = slider;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderDouble.java b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderDouble.java
index 4d1f6ac3..33be7c2c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderDouble.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderDouble.java
@@ -1,14 +1,44 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.beans.NamedArg;
 import javafx.beans.binding.Bindings;
 import javafx.util.StringConverter;
 import org.apache.commons.math3.util.Precision;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ParameterSliderDouble extends ParameterSlider
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( ParameterSliderDouble.class );
     public ParameterSliderDouble( @NamedArg( "name" ) String name,
                                   @NamedArg( "min" ) double min,
                                   @NamedArg( "max" ) double max,
@@ -30,7 +60,7 @@ public class ParameterSliderDouble extends ParameterSlider
             @Override
             public String toString( Number number )
             {
-                System.out.println( Precision.round( number.doubleValue(), 1 ) );
+                LOGGER.debug( String.valueOf( Precision.round( number.doubleValue(), 1 ) ) );
                 return String.valueOf( Precision.round( number.doubleValue(), 1 ) );
             }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderInteger.java b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderInteger.java
index 8674d64b..566a098f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderInteger.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ParameterSliderInteger.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.beans.NamedArg;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ProjectionController.java b/src/main/java/fr/pasteur/ida/zellige/gui/ProjectionController.java
index a3dbfcbf..25a3ae2c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ProjectionController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ProjectionController.java
@@ -1,105 +1,366 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
+import fr.pasteur.ida.zellige.element.Projection;
+import fr.pasteur.ida.zellige.element.ReferenceSurface;
+import fr.pasteur.ida.zellige.steps.projection.ReferenceSurfaceProjection;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleObjectProperty;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
-import javafx.scene.control.CheckBox;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.Spinner;
 import javafx.scene.control.SpinnerValueFactory;
+import net.imglib2.img.Img;
+import net.imglib2.img.display.imagej.ImageJFunctions;
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+import net.imglib2.type.numeric.integer.UnsignedShortType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.ResourceBundle;
 
-public class ProjectionController implements Initializable
+public class ProjectionController< T extends RealType< T > & NativeType< T > > implements Initializable
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( ProjectionController.class );
+    SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfaces = new SimpleObjectProperty<>();
+    SimpleBooleanProperty delta1Functions = new SimpleBooleanProperty( false );
+    SimpleBooleanProperty delta2Functions = new SimpleBooleanProperty( false );
+    private final SimpleBooleanProperty changedParameters = new SimpleBooleanProperty();
     @FXML
-    private Spinner< Integer > deltaSpinner;
-
+    private Spinner< Integer > delta1;
     @FXML
     private ComboBox< String > methodComboBox;
-
     @FXML
-    private CheckBox extractedHeightMap;
-
+    private CheckBoxDisplay extractedHeightMap;
     @FXML
-    private CheckBox segmentedSurface;
-
+    private CheckBoxDisplay segmentedSurface;
     @FXML
-    private CheckBox reduced3DSpace;
-
+    private CheckBoxDisplay reduced3DSpace;
     @FXML
-    private CheckBox segmentedSurfaceMask;
-
+    private CheckBoxDisplay segmentedSurfaceMask;
     @FXML
-    private CheckBox projection;
-
+    private CheckBoxDisplay projection;
     @FXML
-    private CheckBox rawHeightMap;
-
+    private CheckBoxDisplay rawHeightMap;
     @FXML
     private Spinner< Integer > delta2;
 
     @Override
     public void initialize( URL url, ResourceBundle resourceBundle )
     {
-        SpinnerValueFactory< Integer > valueFactory =//TODO spinner start at 0
+        /* Components*/
+        SpinnerValueFactory< Integer > valueFactory =
                 new SpinnerValueFactory.IntegerSpinnerValueFactory( 1, 30, 0 );
-        deltaSpinner.setValueFactory( valueFactory );
+        delta1.setValueFactory( valueFactory );
         ObservableList< String > list = FXCollections.observableArrayList( "MIP", "Mean" );
         methodComboBox.setItems( list );
         methodComboBox.getSelectionModel().selectFirst();
-        SpinnerValueFactory< Integer > valueFactory2 =//TODO spinner start at 0
+        SpinnerValueFactory< Integer > valueFactory2 =
                 new SpinnerValueFactory.IntegerSpinnerValueFactory( 1, 30, 0 );
         delta2.setValueFactory( valueFactory2 );
+
+        delta1.valueProperty().addListener( ( observableValue, integer, t1 ) ->
+        {
+            delta1Functions.setValue( false );
+            resetDisplayMode();
+            changedParameters.setValue( true );
+        } );
+
+        delta2.valueProperty().addListener( ( observableValue, integer, t1 ) ->
+        {
+            delta2Functions.setValue( false );
+            segmentedSurfaceMask.enable();
+            changedParameters.setValue( true );
+        } );
+
+
+        projection.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta1Functions.getValue() && t1 && projection.isNotDisplayed() )
+            {
+
+                showProjections();
+            }
+        } );
+
+        rawHeightMap.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta1Functions.getValue() && t1 && rawHeightMap.isNotDisplayed() )
+            {
+                showRawHeightMap();
+
+            }
+        } );
+        extractedHeightMap.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta1Functions.getValue() && t1 && extractedHeightMap.isNotDisplayed() )
+            {
+
+                showExtractedHeightMaps();
+            }
+        } );
+        reduced3DSpace.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta1Functions.getValue() && t1 && reduced3DSpace.isNotDisplayed() )
+            {
+
+                showReduced3DSpace();
+            }
+        } );
+        segmentedSurface.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta1Functions.getValue() && t1 && segmentedSurface.isNotDisplayed() )
+            {
+
+                showSegmentedSurface();
+            }
+        } );
+        segmentedSurfaceMask.selectedProperty().addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( delta2Functions.getValue() && t1 && segmentedSurfaceMask.isNotDisplayed() )
+            {
+
+                showSegmentedSurfaceMask();
+            }
+        } );
+
+        /* Properties*/
+        referenceSurfaces.addListener( ( observableValue, referenceSurfaces1, t1 ) ->
+        {
+            if ( t1 == null )
+            {
+                delta1Functions.setValue( false );
+                LOGGER.debug( "REFERENCE_SURFACES  is NULL" );
+
+
+            }
+            else
+            {
+                LOGGER.info( "Extraction of {} surfaces", referenceSurfaces.getValue().size() );
+                LOGGER.debug( "Compute output delta1" );
+                setOutputDelta1();
+                resetDisplayMode();
+            }
+        } );
+
+        delta1Functions.addListener( ( observableValue, aBoolean, t1 ) ->
+        {
+            if ( ! t1 )
+            {
+                LOGGER.debug( "DELTA1_FUNCTIONS is NULL" );
+                delta2Functions.setValue( false );
+            }
+            else
+            {
+                LOGGER.debug( "Compute output delta2" );
+                setOutputDelta2();
+            }
+        } );
+
+        delta2Functions.addListener( ( observable, oldValue, newValue ) ->
+        {
+            if ( newValue )
+            {
+                showOutput();
+            }
+            else
+            {
+                LOGGER.debug( "DELTA2_FUNCTIONS is NULL" );
+            }
+        } );
     }
 
+    private void showSegmentedSurfaceMask()
+    {
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(), "Surface_mask_" + referenceSurface.getIndex() );
+        }
+    }
 
-    public String getMethod()
+    private void showSegmentedSurface()
     {
-        return methodComboBox.getValue();
+
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(), "Segmented_surface_" + referenceSurface.getIndex() );
+        }
     }
 
-    public int getDelta()
+    private void showReduced3DSpace()
     {
-        return deltaSpinner.getValue();
+
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(), "Reduced_3D_space_" + referenceSurface.getIndex() );
+        }
     }
 
-    public int getDelta2()
+    private void showExtractedHeightMaps()
     {
-        return delta2.getValue();
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted_HM_" + referenceSurface.getIndex() );
+        }
     }
 
-    public Boolean getSegmentedSurface()
+    private void showRawHeightMap()
     {
-        return segmentedSurface.isSelected();
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getzMap(), "Raw_HM_" + referenceSurface.getIndex() );
+        }
     }
 
-    public Boolean getReduced3DSpace()
+    private void showProjections()
     {
-        return reduced3DSpace.isSelected();
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            ImageJFunctions.show( referenceSurface.getProjection().get(), "Projection_" + referenceSurface.getIndex() );
+        }
     }
 
-    public Boolean getSegmentedSurfaceMask()
+    public void runProjection()
     {
-        return segmentedSurfaceMask.isSelected();
+
+        LOGGER.debug( "Starting projections ! " );
+        if ( ! delta1Functions.getValue() )
+        {
+            LOGGER.debug( "Output with delta1 " );
+            setOutputDelta1();
+        }
+        if ( ! delta2Functions.getValue() )
+        {
+            LOGGER.debug( "Output with delta2 " );
+            setOutputDelta2();
+        }
+        showOutput();
     }
 
-    public Boolean getRawHeightmap()
+    private void showOutput()
     {
-        return rawHeightMap.isSelected();
+        if ( extractedHeightMap.isSelected() && extractedHeightMap.isNotDisplayed() )
+        {
+            showExtractedHeightMaps();
+            extractedHeightMap.disable();
+        }
+        if ( segmentedSurface.isSelected() && segmentedSurface.isNotDisplayed() )
+        {
+            showSegmentedSurface();
+            segmentedSurface.disable();
+        }
+        if ( projection.isSelected() && projection.isNotDisplayed() )
+        {
+            showProjections();
+            projection.disable();
+        }
+        if ( reduced3DSpace.isSelected() && reduced3DSpace.isNotDisplayed() )
+        {
+            showReduced3DSpace();
+            reduced3DSpace.disable();
+        }
+        if ( segmentedSurfaceMask.isSelected() && segmentedSurfaceMask.isNotDisplayed() )
+        {
+            showSegmentedSurfaceMask();
+            segmentedSurfaceMask.disable();
+        }
+        if ( rawHeightMap.isSelected() && rawHeightMap.isNotDisplayed() )
+        {
+            showRawHeightMap();
+            rawHeightMap.disable();
+        }
     }
 
-    public Boolean getProjection()
+    private void setOutputDelta1()
     {
-        return projection.isSelected();
+        int delta = delta1.getValue();
+        String method = methodComboBox.getValue();
+
+
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+            Projection< T > projection = referenceSurface.getProjection();
+            Img< UnsignedShortType > extractedHeightMap = ReferenceSurfaceProjection.getProjectionHeightMap( referenceSurface, method, delta );
+            projection.setExtractedHeightMap( extractedHeightMap );
+            projection.setProjection( ReferenceSurfaceProjection.projection1( referenceSurface, method ) );
+
+            projection.setSegmentedSurface( ReferenceSurfaceProjection.getSegmentedSurface( extractedHeightMap, referenceSurface.getInput(), referenceSurface.getFactory() ) );
+            projection.setReduced3DSpace( ReferenceSurfaceProjection.getExtractedHeightMapSubStack( referenceSurface, delta ) );
+        }
+        delta1Functions.setValue( true );
+    }
+
+    private void setOutputDelta2()
+    {
+
+        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces.getValue() )
+        {
+
+            Projection< T > projection = referenceSurface.getProjection();
+            projection.setSegmentedSurfaceMask( ReferenceSurfaceProjection.getSegmentedSurfaceMask( projection.getSegmentedSurface(), delta2.getValue() ) );
+
+        }
+        delta2Functions.setValue( true );
+    }
+
+    public ArrayList< ReferenceSurface< T > > getReferenceSurfaces()
+    {
+        return referenceSurfaces.get();
+    }
+
+    public SimpleObjectProperty< ArrayList< ReferenceSurface< T > > > referenceSurfacesProperty()
+    {
+        return referenceSurfaces;
+    }
+
+    private void resetDisplayMode()
+    {
+        extractedHeightMap.enable();
+        projection.enable();
+        segmentedSurface.enable();
+        rawHeightMap.enable();
+        reduced3DSpace.enable();
+        segmentedSurfaceMask.enable();
+
+
     }
 
-    public Boolean getExtractedHeightMap()
+    public SimpleBooleanProperty changedParametersProperty()
     {
-        return extractedHeightMap.isSelected();
+        return changedParameters;
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java b/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
index 4e3e7080..6db4d22d 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/SelectionController.java
@@ -1,148 +1,302 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import fr.pasteur.ida.zellige.gui.task.AbstractTask;
-import fr.pasteur.ida.zellige.gui.task.ComputeWithNewAmplitudeValueTask;
-import fr.pasteur.ida.zellige.gui.task.ComputeWithNewOtsuValueTask;
-import fr.pasteur.ida.zellige.gui.task.ImageFXDisplayTask;
+import fr.pasteur.ida.zellige.element.Pixels;
+import fr.pasteur.ida.zellige.gui.task.*;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.value.ChangeListener;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.geometry.Pos;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.FlowPane;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import net.imglib2.type.numeric.real.FloatType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.net.URL;
 import java.util.ResourceBundle;
 
-public class SelectionController< T extends RealType< T > & NativeType< T > > implements Initializable
+public class SelectionController implements Initializable
 {
 
     private final static Logger LOGGER = LoggerFactory.getLogger( SelectionController.class );
+    private final SimpleObjectProperty< Pixels[][] > pixelsProperty = new SimpleObjectProperty<>();
+    private final SimpleObjectProperty< Img< BitType > > islandSearchImage = new SimpleObjectProperty<>();
+    private final SimpleObjectProperty< ClassifiedImages< FloatType > > images = new SimpleObjectProperty<>();
+    SimpleObjectProperty< Img< FloatType > > pretreatedImg = new SimpleObjectProperty<>();
+    private final SimpleObjectProperty< ImageView[] > imageViews = new SimpleObjectProperty<>();
+    SimpleObjectProperty< Img< BitType > > selectedAmplitude = new SimpleObjectProperty<>();
+    SimpleObjectProperty< Img< BitType > > selectedOtsu = new SimpleObjectProperty<>();
+    SimpleObjectProperty< Img< BitType > > interClassifiedImage = new SimpleObjectProperty<>();
+    private final SimpleBooleanProperty changedParameters = new SimpleBooleanProperty();
     @FXML
     private ParameterSliderInteger amplitude;
-
     @FXML
     private ParameterSliderInteger island;
-
     @FXML
     private ParameterSliderInteger otsu;
-
     @FXML
     private FlowPane stack;
-
     @FXML
     private ParameterSliderInteger xyBlur;
-
     @FXML
     private ParameterSliderInteger zBlur;
-
     @FXML
     private ZSlicesSlider zSlices;
-
-
-    private ImageView[] imageViews;
-
-    private ReferenceSurfaceExtraction< T > extraction;
-
-
-    private int width;
+    SimpleObjectProperty< Pixels[][] > max = new SimpleObjectProperty<>();
 
     @Override
     public void initialize( URL url, ResourceBundle resourceBundle )
     {
+        /* JavaFx Components */
+
         /* Amplitude slider initialization */
 
-        amplitude.getSlider().valueProperty().addListener( ( observableValue, number, newValue ) ->
+        amplitude.sliderProperty().addListener( ( observableValue, number, newValue ) ->
         {
             if ( amplitude.hasChanged( newValue ) )
             {
-                computeWithNewAmplitudeValue( newValue.intValue() );
+                runAmplitudeTask();
+                changedParameters.setValue( true );
             }
         } );
 
         /* Otsu slider initialization */
-        otsu.getSlider().valueProperty().addListener( ( observableValue, number, newValue ) ->
+        otsu.sliderProperty().addListener( ( observableValue, number, newValue ) ->
         {
             if ( otsu.hasChanged( newValue ) )
             {
-                computeWithNewOtsuValue( newValue.intValue() );
+                runOtsuTask();
+                changedParameters.setValue( true );
             }
         } );
 
+        island.getSlider().valueProperty().addListener( ( observableValue, number, t1 ) ->
+        {
+            if ( island.hasChanged( t1 ) )
+            {
+                islandSearchImage.setValue( null );
+                changedParameters.setValue( true );
+            }
 
+        } );
+
+        xyBlur.sliderProperty().addListener( ( observable, oldValue, newValue ) ->
+        {
+            if ( xyBlur.hasChanged( newValue ) )
+            {
+                max.setValue( null );
+                changedParameters.setValue( true );
+            }
+        } );
+        zBlur.sliderProperty().addListener( ( observable, oldValue, newValue ) ->
+        {
+            if ( zBlur.hasChanged( newValue ) )
+            {
+                max.setValue( null );
+                changedParameters.setValue( true );
+            }
+        } );
         stack.setAlignment( Pos.CENTER );
 
         // section Slider initialization
-
         zSlices.getSlider().valueProperty().addListener( ( observableValue, number, newValue ) ->
         {
             int newZValue = newValue.intValue();
             if ( zSlices.hasChanged( newZValue ) )
             {
-                System.out.println( "children n° " + newZValue );
-                refreshDisplayOfSelectedPixels();
+                refreshDisplay( newZValue );
+            }
+        } );
+
+        /* Properties */
+        images.addListener( ( observableValue, classifiedImages, t1 ) ->
+        {
+            if ( t1 != null )
+            {
+                runAmplitudeTask();
+                runOtsuTask();
+            }
+            else
+            {
+                LOGGER.debug( "IMAGES is NULL" );
+                selectedAmplitude.setValue( null );
+                selectedOtsu.setValue( null );
+                interClassifiedImage.setValue( null );
+            }
+
+        } );
+        ChangeListener< Img< BitType > > listener = ( observableValue, bitTypeClassifiedImages, t1 ) ->
+        {
+            if ( selectedAmplitude.getValue() != null && selectedOtsu.getValue() != null )
+            {
+                runInterClassification();
+                LOGGER.debug( "Inter classification" );
+            }
+            else
+            {
+                LOGGER.debug( "SELECTED_AMPLITUDE or SELECTED_OTSU is NULL" );
+                interClassifiedImage.setValue( null );
+            }
+
+        };
+
+        selectedOtsu.addListener( listener );
+        selectedAmplitude.addListener( listener );
+
+
+        interClassifiedImage.addListener( ( observable, oldValue, newValue ) ->
+        {
+            LOGGER.info( "Computing double classification..." );
+            if ( newValue != null )
+            {
+                computeImageFXDisplay();
+            }
+            islandSearchImage.setValue( null );
+        } );
+
+        islandSearchImage.addListener( ( observableValue, bitTypes, t1 ) ->
+        {
+            if ( t1 == null )
+            {
+                LOGGER.debug( "ISLAND_SEARCH is NULL" );
+                max.setValue( null );
+            }
+            else
+            {
+                runSmoothing();
             }
         } );
+
     }
 
-    public void computeWithNewAmplitudeValue( int value )
+    private void runAmplitudeTask()
     {
-        AbstractTask< Void > compute = new ComputeWithNewAmplitudeValueTask<>( extraction, value );
-        compute.setOnSucceeded( workerStateEvent ->
-                refreshDisplayOfSelectedPixels() );
-        compute.start();
+        AmplitudeThresholdingTask amplitudeTask = new AmplitudeThresholdingTask( images, ( int ) amplitude.getSlider().getValue() );
+        amplitudeTask.setOnSucceeded( workerStateEvent ->
+                selectedAmplitude.setValue( amplitudeTask.getValue() ) );
+        amplitudeTask.start();
     }
 
-    public void computeWithNewOtsuValue( int value )
+    private void runOtsuTask()
     {
-        AbstractTask< Void > compute = new ComputeWithNewOtsuValueTask<>( extraction, value );
-        compute.setOnSucceeded( workerStateEvent ->
-                refreshDisplayOfSelectedPixels() );
-        compute.start();
+        OtsuThresholdingTask otsuTask = new OtsuThresholdingTask( pretreatedImg, images, ( int ) otsu.getSlider().getValue() );
+        new AmplitudeThresholdingTask( images, ( int ) amplitude.getSlider().getValue() );
+        otsuTask.setOnSucceeded( workerStateEvent ->
+                selectedOtsu.setValue( otsuTask.getValue() ) );
+        otsuTask.start();
     }
 
+    private void runInterClassification()
+    {
+        InterClassificationTask interClassificationTask = new InterClassificationTask( selectedAmplitude, selectedOtsu );
+        interClassificationTask.setOnSucceeded( event -> interClassifiedImage.setValue( interClassificationTask.getValue() ) );
+        interClassificationTask.start();
+    }
 
-    public void displayClassification()
+    public void computeImageFXDisplay()
     {
-        AbstractTask< ImageView[] > task = new ImageFXDisplayTask( extraction.getSelectionOutput() );
-        task.setOnSucceeded( workerStateEvent ->
+        ImageFXDisplayTask imageFXDisplayTask = new ImageFXDisplayTask( interClassifiedImage );
+        imageFXDisplayTask.setOnSucceeded( workerStateEvent ->
         {
-            stack.getChildren().clear();
-            imageViews = task.getValue();
-            if ( ! stack.getChildren().isEmpty() )
-            {
-                System.out.println( "The stack is not empty" );
-                stack.getChildren().remove( 0 );
-            }
-            ImageView i = imageViews[ 0 ];
-            stack.getChildren().add( i );
-            width = ( int ) i.boundsInParentProperty().get().getWidth();
-            this.zSlices.getSlider().setMaxWidth( width );
-            this.zSlices.getSlider().setVisible( true );
+            LOGGER.info( "Double classification done." );
+            imageViews.setValue( imageFXDisplayTask.getValue() );
+            setDisplay();
+        } );
+        imageFXDisplayTask.start();
+    }
+
+    public void setDisplay()
+    {
+        stack.getChildren().clear();
+        ImageView i = imageViews.getValue()[ zSlices.userValue ];
+
+        stack.getChildren().add( i );
+
+        // setting of ZSlider
+        this.setSliceNumber( ( int ) pretreatedImg.getValue().dimension( 2 ) );
+        int width = ( int ) i.boundsInParentProperty().get().getWidth();
+        this.zSlices.getSlider().setMaxWidth( width );
+        this.zSlices.getSlider().setVisible( true );
+        enableParameters();
+    }
+
+
+    public void runIslandSearch()
+    {
+        IslandSearchTask islandSearchTask = new IslandSearchTask( interClassifiedImage, island.sliderProperty() );
+        islandSearchTask.setOnSucceeded( workerStateEvent ->
+                islandSearchImage.setValue( islandSearchTask.getValue() ) );
+        islandSearchTask.setOnFailed( workerStateEvent -> LOGGER.debug( "FAILED" ) );
+        islandSearchTask.start();
+
+    }
+
+    private void runSmoothing()
+    {
+        SmoothingTask smoothingTask = new SmoothingTask( islandSearchImage, xyBlur.sliderProperty(), zBlur.sliderProperty() );
+        smoothingTask.setOnSucceeded( event ->
+        {
+            max.setValue( smoothingTask.getValue() );
+            LOGGER.debug( "max is set" );
         } );
-        task.start();
+        smoothingTask.start();
+    }
+
+    public void runPixelSelection()
+    {
+        if ( islandSearchImage.getValue() == null )
+        {
+            LOGGER.debug( "Island search image is NULL" );
+            runIslandSearch();
+        }
+        else if ( pixelsProperty.getValue() == null )
+        {
+            LOGGER.debug( "Island search image is not NULL" );
+            runSmoothing();
+        }
     }
 
+
     /**
      * Displays the slice of the classified stack according to the value of the Z Slider.
      */
-    public void refreshDisplayOfSelectedPixels()
+    public void refreshDisplay( int value )
     {
-        AbstractTask< ImageView[] > task = new ImageFXDisplayTask( extraction.getSelectionOutput() );
-        task.setOnSucceeded( workerStateEvent ->
-        {
-            imageViews = task.getValue();
-            this.stack.getChildren().clear();// Removal of previous stack
-            ImageView i = imageViews[ zSlices.userValue ];
-//            stack.getChildren().addAll( task.getValue() ); // Addition of new classified stack
-            stack.getChildren().add( i ); // display of selected z slice
-            LOGGER.debug( "Refresh Display successful with " + imageViews.length + " slices" );
-        } );
-        task.start();
+        this.stack.getChildren().clear();// Removal of previous slice
+        ImageView i = imageViews.getValue()[ value ];
+        stack.getChildren().add( i ); // display of selected z slice
     }
 
     public void setSliceNumber( int depth )
@@ -150,11 +304,9 @@ public class SelectionController< T extends RealType< T > & NativeType< T > > im
         zSlices.setWidth( depth - 1 );
     }
 
-    public void set( ReferenceSurfaceExtraction< T > extraction )
+    public void set()
     {
-
-        this.extraction = extraction;
-        this.setSliceNumber( ( int ) extraction.getSelectionOutput().dimension( 2 ) );
+        this.setSliceNumber( ( int ) pretreatedImg.getValue().dimension( 2 ) );
     }
 
     public void enableParameters()
@@ -163,12 +315,23 @@ public class SelectionController< T extends RealType< T > & NativeType< T > > im
         this.otsu.enable();
     }
 
-    public void disableSliders()
+    public void disableParameters()
     {
         this.amplitude.disable();
         this.otsu.disable();
     }
 
+    public Pixels[][] getMax()
+    {
+        return max.get();
+    }
+
+    public SimpleObjectProperty< ClassifiedImages< FloatType > > imagesProperty()
+    {
+        return images;
+    }
+
+
     public ParameterSliderInteger getAmplitude()
     {
         return amplitude;
@@ -193,4 +356,14 @@ public class SelectionController< T extends RealType< T > & NativeType< T > > im
     {
         return zBlur;
     }
+
+    public boolean isChangedParameters()
+    {
+        return changedParameters.get();
+    }
+
+    public SimpleBooleanProperty changedParametersProperty()
+    {
+        return changedParameters;
+    }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/StepPanel.java b/src/main/java/fr/pasteur/ida/zellige/gui/StepPanel.java
index a9d8c838..997c6c2b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/StepPanel.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/StepPanel.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.beans.NamedArg;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/ZSlicesSlider.java b/src/main/java/fr/pasteur/ida/zellige/gui/ZSlicesSlider.java
index f2b5beb8..80e66f27 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/ZSlicesSlider.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/ZSlicesSlider.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui;
 
 import javafx.fxml.FXML;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoA3DStackException.java b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoA3DStackException.java
index 20711ebd..b4831024 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoA3DStackException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoA3DStackException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.exception;
 
 public class NoA3DStackException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoInputException.java b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoInputException.java
index e491f013..29b26f5f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoInputException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NoInputException.java
@@ -1,9 +1,37 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.exception;
 
 public class NoInputException extends Exception
 {
 
-    final String message = "Please load a 3D stack before running Zellige";
+    final String message = " No 3D stack loaded on ImageJ";
 
     @Override
     public String getMessage()
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NotANumberException.java b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NotANumberException.java
index 3e871564..c434df0f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/exception/NotANumberException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/exception/NotANumberException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.exception;
 
 public class NotANumberException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/selection/Container.java b/src/main/java/fr/pasteur/ida/zellige/gui/selection/Container.java
deleted file mode 100644
index dc5e4970..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/selection/Container.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package fr.pasteur.ida.zellige.gui.selection;
-
-import javafx.fxml.Initializable;
-
-import java.net.URL;
-import java.util.ResourceBundle;
-
-public class Container implements Initializable
-{
-
-
-    @Override
-    public void initialize( URL url, ResourceBundle resourceBundle )
-    {
-
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearch.fxml b/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearch.fxml
deleted file mode 100644
index d39077c4..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearch.fxml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-
-<?import javafx.scene.control.CheckBox?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.RadioButton?>
-<?import javafx.scene.layout.AnchorPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Pane?>
-<AnchorPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="100.0" prefWidth="291.0" xmlns="http://javafx.com/javafx/17"
-            fx:controller="IslandSearchP">
-    <children>
-        <Pane prefHeight="50.0" prefWidth="291.0">
-            <children>
-                <Label layoutX="111.0" layoutY="14.0" text="Island Search"/>
-            </children>
-        </Pane>
-        <HBox alignment="TOP_CENTER" layoutY="56.0" prefHeight="50.0" prefWidth="291.0">
-            <children>
-                <CheckBox mnemonicParsing="false" text="Enable"/>
-                <RadioButton mnemonicParsing="false" text="4-connectivity"/>
-                <RadioButton mnemonicParsing="false" text="8-connectivity"/>
-            </children>
-        </HBox>
-    </children>
-</AnchorPane>
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearchP.java b/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearchP.java
deleted file mode 100644
index fe2aa273..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/selection/IslandSearchP.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package fr.pasteur.ida.zellige.gui.selection;
-
-import javafx.fxml.FXML;
-import javafx.scene.control.CheckBox;
-
-public class IslandSearchP
-{
-    @FXML
-    private CheckBox enableISCheckbox;
-
-
-    private void doSomething()
-    {
-
-    }
-
-
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/AbstractTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/AbstractTask.java
index 74b0ee9e..63367d5f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/AbstractTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/AbstractTask.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import javafx.concurrent.Task;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/AmplitudeThresholdingTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/AmplitudeThresholdingTask.java
new file mode 100644
index 00000000..5e68372c
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/AmplitudeThresholdingTask.java
@@ -0,0 +1,60 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.gui.ClassifiedImages;
+import fr.pasteur.ida.zellige.steps.selection.classification.AmplitudeClassification;
+import javafx.beans.property.SimpleObjectProperty;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import net.imglib2.type.numeric.real.FloatType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AmplitudeThresholdingTask extends AbstractTask< Img< BitType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( AmplitudeThresholdingTask.class );
+    private final SimpleObjectProperty< ClassifiedImages< FloatType > > images;
+    private final int amplitudeThreshold;
+
+
+    public AmplitudeThresholdingTask( SimpleObjectProperty< ClassifiedImages< FloatType > > images, int amplitudeThreshold )
+    {
+        this.images = images;
+        this.amplitudeThreshold = amplitudeThreshold;
+    }
+
+    @Override
+    protected Img< BitType > call() throws Exception
+    {
+        LOGGER.info( "Computing amplitude thresholding..." );
+        return AmplitudeClassification.applyThreshold( images.getValue().getAmplitudeImg(), amplitudeThreshold );
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/CheckParameterValueTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/CheckParameterValueTask.java
deleted file mode 100644
index 0c5364f6..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/CheckParameterValueTask.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.gui.exception.NotANumberException;
-import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CheckParameterValueTask extends AbstractTask< Void >
-{
-
-    private final static Logger LOGGER = LoggerFactory.getLogger( CheckParameterValueTask.class );
-    private final String value;
-    private final String parameter;
-
-    public CheckParameterValueTask( String value, String parameter )
-    {
-        this.value = value;
-        this.parameter = parameter;
-    }
-
-    @Override
-    protected Void call() throws Exception
-    {
-
-        try
-        {
-            double v = Double.parseDouble( value );
-            if ( v < 0 )
-            {
-                LOGGER.debug( "The parameter {} is INVALID.", parameter );
-                throw new DataValidationException( "This parameter value has to be superior to zero !" );
-            }
-
-            if ( ( parameter.equals( "Amplitude" ) || parameter.equals( "Otsu" ) ||
-                    parameter.equals( "Stating threshold" ) || parameter.equals( "Connexity" ) ) && v > 1 )
-            {
-                LOGGER.debug( "The parameter {} is INVALID.", parameter );
-                throw new DataValidationException( "This parameter value has to be inferior or equals to 1!" );
-            }
-            else if ( parameter.equals( "xy Blur" ) || parameter.equals( "z Blur" ) && v > 10 )
-            {
-                LOGGER.debug( "The parameter {} is INVALID.", parameter );
-                throw new DataValidationException( "This parameter value has to be inferior or equals to 10!" );
-            }
-            else
-            {
-                if ( v > 50 )
-                {
-                    LOGGER.debug( "The parameter {} is INVALID.", parameter );
-                    throw new DataValidationException( "This parameter value has to be inferior or equals to 50!" );
-                }
-            }
-        }
-        catch ( NumberFormatException e )
-        {
-            LOGGER.debug( "The parameter {} is INVALID.", parameter );
-            throw new NotANumberException();
-        }
-        LOGGER.debug( "The parameter {} is VALID", parameter );
-        return null;
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeClassificationImagesTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeClassificationImagesTask.java
new file mode 100644
index 00000000..65c40829
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeClassificationImagesTask.java
@@ -0,0 +1,64 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.gui.ClassifiedImages;
+import fr.pasteur.ida.zellige.steps.selection.classification.AmplitudeClassification;
+import fr.pasteur.ida.zellige.steps.selection.classification.OtsuClassification;
+import net.imglib2.img.Img;
+import net.imglib2.img.ImgFactory;
+import net.imglib2.img.array.ArrayImgFactory;
+import net.imglib2.type.numeric.real.FloatType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ComputeClassificationImagesTask extends AbstractTask< ClassifiedImages< FloatType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( ComputeClassificationImagesTask.class );
+    private final Img< FloatType > pretreatedImg;
+
+
+    public ComputeClassificationImagesTask( Img< FloatType > pretreatedImg )
+    {
+        this.pretreatedImg = pretreatedImg;
+    }
+
+    @Override
+    protected ClassifiedImages< FloatType > call() throws Exception
+    {
+        LOGGER.info( "Computing classified images..." );
+        ImgFactory< FloatType > factory = new ArrayImgFactory<>( new FloatType() );
+        ClassifiedImages< FloatType > images = new ClassifiedImages<>();
+        images.setAmplitudeImg( AmplitudeClassification.computeAmplitudeImage( pretreatedImg, factory ) );
+        images.setOtsuImg( OtsuClassification.computeOtsuImage( pretreatedImg, factory ) );
+        LOGGER.debug( "Classification images computed" );
+        return images;
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewAmplitudeValueTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewAmplitudeValueTask.java
deleted file mode 100644
index 1a1596e7..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewAmplitudeValueTask.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ComputeWithNewAmplitudeValueTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Void >
-{
-
-    private final static Logger LOGGER = LoggerFactory.getLogger( ComputeWithNewAmplitudeValueTask.class );
-    private final ReferenceSurfaceExtraction< T > extraction;
-    private final int newAmplitudeThresholdValue;
-
-    public ComputeWithNewAmplitudeValueTask( ReferenceSurfaceExtraction< T > extraction, int newAmplitudeThresholdValue )
-    {
-        this.extraction = extraction;
-        this.newAmplitudeThresholdValue = newAmplitudeThresholdValue;
-    }
-
-    @Override
-    protected Void call() throws Exception
-    {
-        if ( extraction.getSelectionOutput() == null )
-        {
-            updateMessage( "NoClassificationException" );
-            LOGGER.debug( "No Amplitude classification performed." );
-            this.cancelled();
-
-        }
-        extraction.runAmplitudeClassification( newAmplitudeThresholdValue );
-        extraction.runInterClassification();
-        LOGGER.debug( "Amplitude classification completed." );
-        return null;
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewOtsuValueTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewOtsuValueTask.java
deleted file mode 100644
index c6f9ed1a..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/ComputeWithNewOtsuValueTask.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ComputeWithNewOtsuValueTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Void >
-{
-    private final static Logger LOGGER = LoggerFactory.getLogger( ComputeWithNewOtsuValueTask.class );
-
-    private final ReferenceSurfaceExtraction< T > extraction;
-    private final int newAmplitudeThresholdValue;
-
-    public ComputeWithNewOtsuValueTask( ReferenceSurfaceExtraction< T > extraction, int newOtsuThresholdValue )
-    {
-        this.extraction = extraction;
-        this.newAmplitudeThresholdValue = newOtsuThresholdValue;
-    }
-
-    @Override
-    protected Void call() throws Exception
-    {
-        if ( extraction.getSelectionOutput() == null )
-        {
-            updateMessage( "NoClassificationException" );
-            LOGGER.debug( "No Otsu classification performed." );
-            this.cancelled();
-
-        }
-        extraction.runOtsuClassification( newAmplitudeThresholdValue );
-        extraction.runInterClassification();
-        LOGGER.debug( "Otsu classification completed." );
-        return null;
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ConstructionCompletionTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ConstructionCompletionTask.java
index ceb55dea..0181077e 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/ConstructionCompletionTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/ConstructionCompletionTask.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import fr.pasteur.ida.zellige.element.ReferenceSurface;
@@ -30,7 +58,7 @@ public class ConstructionCompletionTask< T extends RealType< T > & NativeType< T
     @Override
     protected ArrayList< ReferenceSurface< T > > call() throws Exception
     {
-        LOGGER.debug( "Construction completion completed." );
+        LOGGER.info( "Processing construction completion..." );
         return ConstructionCompletion.run( input, factory, finalSurfaces );
 
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/CreateExtractionTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/CreateExtractionTask.java
deleted file mode 100644
index 7af123d7..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/CreateExtractionTask.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import net.imagej.Dataset;
-import net.imagej.ImgPlus;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * This task is performed each time a new input image is selected in the file combobox.
- *
- * @param <T> the input image type
- */
-public class CreateExtractionTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< ReferenceSurfaceExtraction< T > >
-{
-    private final static Logger LOGGER = LoggerFactory.getLogger( CreateExtractionTask.class );
-    private final Dataset dataset;
-    private final int amplitudeThresholdValue;
-    private final int otsuThresholdValue;
-
-    public CreateExtractionTask( Dataset dataset, int amplitudeThresholdValue, int otsuThresholdValue )
-    {
-        this.dataset = dataset;
-
-        this.amplitudeThresholdValue = amplitudeThresholdValue;
-        this.otsuThresholdValue = otsuThresholdValue;
-    }
-
-    @Override
-    protected ReferenceSurfaceExtraction< T > call() throws Exception
-    {
-        ImgPlus< T > input = ( ImgPlus< T > ) dataset.getImgPlus();
-        ReferenceSurfaceExtraction< T > extraction = new ReferenceSurfaceExtraction<>( input, input.factory() );
-        extraction.computeClassificationImages();
-        LOGGER.debug( "Classification images computed" );
-        extraction.runAmplitudeClassification( amplitudeThresholdValue );
-        LOGGER.debug( "Otsu classification completed" );
-        extraction.runOtsuClassification( otsuThresholdValue );
-        LOGGER.debug( "Amplitude classification completed" );
-        extraction.runInterClassification();
-        LOGGER.debug( "Inter classification completed" );
-        return extraction;
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/DisplayDatasetChoicesTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/DisplayDatasetChoicesTask.java
index 1993dbcb..b3826bd0 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/DisplayDatasetChoicesTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/DisplayDatasetChoicesTask.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import net.imagej.Dataset;
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ImageFXDisplayTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ImageFXDisplayTask.java
index a3fc2e9d..1a92c847 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/ImageFXDisplayTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/ImageFXDisplayTask.java
@@ -1,8 +1,37 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import fr.pasteur.ida.zellige.gui.ImageFXDisplay;
+import javafx.beans.property.SimpleObjectProperty;
 import javafx.scene.image.ImageView;
-import net.imglib2.IterableInterval;
+import net.imglib2.img.Img;
 import net.imglib2.type.logic.BitType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,9 +39,9 @@ import org.slf4j.LoggerFactory;
 public class ImageFXDisplayTask extends AbstractTask< ImageView[] >
 {
     private final static Logger LOGGER = LoggerFactory.getLogger( ImageFXDisplayTask.class );
-    private final IterableInterval< BitType > input;
+    private final SimpleObjectProperty< Img< BitType > > input;
 
-    public ImageFXDisplayTask( IterableInterval< BitType > input )
+    public ImageFXDisplayTask( SimpleObjectProperty< Img< BitType > > input )
     {
         this.input = input;
     }
@@ -21,7 +50,7 @@ public class ImageFXDisplayTask extends AbstractTask< ImageView[] >
     @Override
     protected ImageView[] call() throws Exception
     {
-        ImageFXDisplay display = new ImageFXDisplay( input );
+        ImageFXDisplay display = new ImageFXDisplay( input.getValue() );
         display.set();
         LOGGER.debug( "Classified image updated." );
         return display.getImageViews();
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/InterClassificationTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/InterClassificationTask.java
new file mode 100644
index 00000000..7fbe4840
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/InterClassificationTask.java
@@ -0,0 +1,61 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.steps.selection.classification.Classification;
+import javafx.beans.property.SimpleObjectProperty;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class InterClassificationTask extends AbstractTask< Img< BitType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( InterClassificationTask.class );
+    private final SimpleObjectProperty< Img< BitType > > selectedAmplitude;
+    private final SimpleObjectProperty< Img< BitType > > selectedOtsu;
+
+    public InterClassificationTask( SimpleObjectProperty< Img< BitType > > selectedAmplitude, SimpleObjectProperty< Img< BitType > > selectedOtsu )
+    {
+        this.selectedAmplitude = selectedAmplitude;
+        this.selectedOtsu = selectedOtsu;
+    }
+
+
+    @Override
+    protected Img< BitType > call() throws Exception
+    {
+
+        LOGGER.info( "Computing inter-classification..." );
+        return Classification.interClassification( selectedAmplitude.getValue(), selectedAmplitude.getValue().factory(), selectedOtsu.getValue() );
+    }
+
+
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/IslandSearchTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/IslandSearchTask.java
new file mode 100644
index 00000000..2f5d8d41
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/IslandSearchTask.java
@@ -0,0 +1,63 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.steps.selection.postTreatment.PostTreatment;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IslandSearchTask extends AbstractTask< Img< BitType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( IslandSearchTask.class );
+    private final SimpleObjectProperty< Img< BitType > > image;
+    private final DoubleProperty islandSize;
+
+    public IslandSearchTask( SimpleObjectProperty< Img< BitType > > image, DoubleProperty islandSize )
+    {
+        this.image = image;
+        this.islandSize = islandSize;
+    }
+
+    @Override
+    protected Img< BitType > call() throws Exception
+    {
+        LOGGER.info( "Computing Island Search..." );
+        Img< BitType > img = PostTreatment.runIslandSearch( image.getValue(), islandSize.intValue() );
+        LOGGER.debug( "Task's end." );
+        return img;
+//        return iSImage;
+    }
+
+
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/NewClassificationTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/NewClassificationTask.java
deleted file mode 100644
index 0fcf8f8b..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/NewClassificationTask.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NewClassificationTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Void >
-{
-    private final Logger LOGGER = LoggerFactory.getLogger( NewClassificationTask.class );
-    private final ReferenceSurfaceExtraction< T > extraction;
-
-    private final int amplitude;
-    private final int otsu;
-
-    public NewClassificationTask( ReferenceSurfaceExtraction< T > extraction, int amplitude, int otsu )
-    {
-        this.extraction = extraction;
-        this.amplitude = amplitude;
-        this.otsu = otsu;
-    }
-
-    @Override
-    protected Void call() throws Exception
-    {
-        extraction.computeClassificationImages();
-        LOGGER.debug( "Images computed." );
-        extraction.runAmplitudeClassification( amplitude );
-        LOGGER.debug( "Amplitude classification done." );
-        extraction.runOtsuClassification( otsu );
-        LOGGER.debug( "Otsu classification done." );
-        extraction.runInterClassification();
-        LOGGER.debug( "InterClassification done." );
-        return null;
-    }
-
-
-//
-    @Override
-    protected void succeeded()
-    {
-        super.succeeded();
-        LOGGER.debug( "Task successful." );
-    }
-
-
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/OtsuThresholdingTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/OtsuThresholdingTask.java
new file mode 100644
index 00000000..32e3fb20
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/OtsuThresholdingTask.java
@@ -0,0 +1,62 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.gui.ClassifiedImages;
+import fr.pasteur.ida.zellige.steps.selection.classification.OtsuClassification;
+import javafx.beans.property.SimpleObjectProperty;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import net.imglib2.type.numeric.real.FloatType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OtsuThresholdingTask extends AbstractTask< Img< BitType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( OtsuThresholdingTask.class );
+    private final SimpleObjectProperty< Img< FloatType > > pretreatedImage;
+    private final SimpleObjectProperty< ClassifiedImages< FloatType > > images;
+    private final int otsuThreshold;
+
+
+    public OtsuThresholdingTask( SimpleObjectProperty< Img< FloatType > > pretreatedImage, SimpleObjectProperty< ClassifiedImages< FloatType > > images, int otsuThreshold )
+    {
+        this.pretreatedImage = pretreatedImage;
+        this.images = images;
+        this.otsuThreshold = otsuThreshold;
+    }
+
+    @Override
+    protected Img< BitType > call() throws Exception
+    {
+        LOGGER.info( "Computing otsu thresholding..." );
+        return OtsuClassification.applyLocalThreshold( pretreatedImage.getValue(), images.getValue().getOtsuImg(), otsuThreshold );
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/PretreatmentTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/PretreatmentTask.java
new file mode 100644
index 00000000..f23053a0
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/PretreatmentTask.java
@@ -0,0 +1,61 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.steps.selection.pretreatment.Pretreatment;
+import net.imagej.Dataset;
+import net.imagej.ImgPlus;
+import net.imglib2.img.Img;
+import net.imglib2.type.NativeType;
+import net.imglib2.type.numeric.RealType;
+import net.imglib2.type.numeric.real.FloatType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PretreatmentTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Img< FloatType > >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( PretreatmentTask.class );
+    private final Dataset dataset;
+
+    public PretreatmentTask( Dataset dataset )
+    {
+        this.dataset = dataset;
+    }
+
+    @Override
+    protected Img< FloatType > call() throws Exception
+    {
+        LOGGER.info( "Computing pretreatment..." );
+        ImgPlus< T > input = ( ImgPlus< T > ) dataset.getImgPlus();
+        Img< FloatType > pretreatedImg = Pretreatment.run( input );
+        LOGGER.debug( "Done." );
+        return pretreatedImg;
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/ProjectionTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/ProjectionTask.java
deleted file mode 100644
index 0d72d43a..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/ProjectionTask.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.element.ReferenceSurface;
-import fr.pasteur.ida.zellige.steps.projection.ReferenceSurfaceProjection;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-
-public class ProjectionTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Void >
-{
-
-    private final static Logger LOGGER = LoggerFactory.getLogger( ProjectionTask.class );
-    private final ArrayList< ReferenceSurface< T > > referenceSurfaces;
-    private final int delta;
-    private final String projectionType;
-    private final boolean projectionDisplay;// the projection
-    private final boolean rawHeightMapDisplay;// the raw height map extracted by Zellige before projection
-    private final boolean extractedHeightMapDisplay;// the height map after projection
-    private final boolean reduced3DSpaceDisplay; // the volume of surface +- delta
-    private final boolean segmentedSurfaceDisplay; // the surface segmented in the 3D original volume
-    private final boolean segmentedSurfaceMaskDisplay; // the mask of the segmented surface +- delta
-    private final int delta2;
-
-    public ProjectionTask( ArrayList< ReferenceSurface< T > > referenceSurfaces, int delta, String projectionType,
-                           boolean projectionDisplay,
-                           boolean rawHeightMapDisplay,
-                           boolean extractedHeightMapDisplay,
-                           boolean reduced3DSpaceDisplay,
-                           boolean segmentedSurfaceDisplay,
-                           boolean segmentedSurfaceMaskDisplay, int delta2 )
-    {
-        this.referenceSurfaces = referenceSurfaces;
-        this.delta = delta;
-        this.projectionType = projectionType;
-        this.projectionDisplay = projectionDisplay;
-        this.rawHeightMapDisplay = rawHeightMapDisplay;
-        this.extractedHeightMapDisplay = extractedHeightMapDisplay;
-        this.reduced3DSpaceDisplay = reduced3DSpaceDisplay;
-        this.segmentedSurfaceDisplay = segmentedSurfaceDisplay;
-        this.segmentedSurfaceMaskDisplay = segmentedSurfaceMaskDisplay;
-        this.delta2 = delta2;
-    }
-
-
-    @Override
-    protected Void call() throws Exception
-    {
-        for ( ReferenceSurface< T > referenceSurface : referenceSurfaces )
-        {
-            referenceSurface.init();
-            ReferenceSurfaceProjection.run( referenceSurface, delta, projectionType,
-                    projectionDisplay,
-                    rawHeightMapDisplay,
-                    extractedHeightMapDisplay,
-                    reduced3DSpaceDisplay,
-                    segmentedSurfaceDisplay,
-                    segmentedSurfaceMaskDisplay, delta2 );
-        }
-        LOGGER.debug( "Projection completed." );
-        return null;
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunFirstConstructionTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/RunFirstConstructionTask.java
index dcbc9023..f4572b2a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunFirstConstructionTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/RunFirstConstructionTask.java
@@ -1,7 +1,36 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import fr.pasteur.ida.zellige.element.Pixels;
 import fr.pasteur.ida.zellige.element.Surface;
+import fr.pasteur.ida.zellige.steps.construction.exception.NoSurfaceFoundException;
 import fr.pasteur.ida.zellige.steps.construction.rounds.FirstRoundConstruction;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -11,15 +40,15 @@ import java.util.ArrayList;
 public class RunFirstConstructionTask extends AbstractTask< ArrayList< Surface > >
 {
     private final static Logger LOGGER = LoggerFactory.getLogger( RunFirstConstructionTask.class );
-    private final Pixels[][] selectedPixels;
+    private final Pixels[][] maximums;
     private final double startingOsSize1;
     private final int overlap1;
     private final double connexityRate1;
     private final double surfaceMinSizeFactor;
 
-    public RunFirstConstructionTask( Pixels[][] selectedPixels, double startingOsSize1, int overlap1, double connexityRate1, double surfaceMinSizeFactor )
+    public RunFirstConstructionTask( Pixels[][] maximums, double startingOsSize1, int overlap1, double connexityRate1, double surfaceMinSizeFactor )
     {
-        this.selectedPixels = selectedPixels;
+        this.maximums = maximums;
         this.startingOsSize1 = startingOsSize1;
         this.overlap1 = overlap1;
         this.connexityRate1 = connexityRate1;
@@ -29,9 +58,17 @@ public class RunFirstConstructionTask extends AbstractTask< ArrayList< Surface >
     @Override
     protected ArrayList< Surface > call() throws Exception
     {
-        FirstRoundConstruction step1 = new FirstRoundConstruction( selectedPixels, startingOsSize1, overlap1, connexityRate1, surfaceMinSizeFactor );
-        step1.process();
-        LOGGER.debug( "First round task completed." );
+        LOGGER.info( "Computing first round construction..." );
+        FirstRoundConstruction step1 = new FirstRoundConstruction( maximums, startingOsSize1, overlap1, connexityRate1, surfaceMinSizeFactor );
+        try
+        {
+            step1.process();
+        }
+        catch ( NoSurfaceFoundException e )
+        {
+
+            return null;
+        }
         return step1.getSurfaces();
 
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunPostTreatmentTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/RunPostTreatmentTask.java
deleted file mode 100644
index c36ab37a..00000000
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunPostTreatmentTask.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package fr.pasteur.ida.zellige.gui.task;
-
-import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
-import fr.pasteur.ida.zellige.element.Pixels;
-import fr.pasteur.ida.zellige.steps.selection.postTreatment.PostTreatment;
-import net.imglib2.type.NativeType;
-import net.imglib2.type.numeric.RealType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class RunPostTreatmentTask< T extends RealType< T > & NativeType< T > > extends AbstractTask< Pixels[][] >
-
-{
-    private final static Logger LOGGER = LoggerFactory.getLogger( RunPostTreatmentTask.class );
-    private final ReferenceSurfaceExtraction< T > extraction;
-    private final double sigmaXY;
-    private final double sigmaZ;
-    private final int islandSize;
-    private final int connexity;
-
-    public RunPostTreatmentTask( ReferenceSurfaceExtraction< T > extraction, double sigmaXY, double sigmaZ, int islandSize, int connexity )
-    {
-        this.extraction = extraction;
-        this.sigmaXY = sigmaXY;
-        this.sigmaZ = sigmaZ;
-        this.islandSize = islandSize;
-
-        this.connexity = connexity;
-    }
-
-    @Override
-    protected Pixels[][] call() throws Exception
-    {
-        LOGGER.debug( "Task's start." );
-        return PostTreatment.run( extraction.getSelectionOutput(), sigmaXY, sigmaZ, islandSize, connexity );
-    }
-}
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunSecondConstructionTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/RunSecondConstructionTask.java
index d0062e0c..c30b4800 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/RunSecondConstructionTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/RunSecondConstructionTask.java
@@ -1,6 +1,35 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 import fr.pasteur.ida.zellige.element.Surface;
+import fr.pasteur.ida.zellige.steps.construction.exception.NoSurfaceFoundException;
 import fr.pasteur.ida.zellige.steps.construction.rounds.SecondRoundConstruction;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,16 +39,16 @@ import java.util.ArrayList;
 public class RunSecondConstructionTask extends AbstractTask< ArrayList< Surface > >
 {
     private final static Logger LOGGER = LoggerFactory.getLogger( RunSecondConstructionTask.class );
-    private final ArrayList< Surface > tempSurfaces;
 
+    private final ArrayList< Surface > surfaces;
     private final double startingOsSize2;
     private final int overlap2;
     private final double connexityRate2;
     private final double surfaceMinSizeFactor;
 
-    public RunSecondConstructionTask( ArrayList< Surface > tempSurfaces, double startingOsSize2, int overlap2, double connexityRate2, double surfaceMinSizeFactor )
+    public RunSecondConstructionTask( ArrayList< Surface > surfaces, double startingOsSize2, int overlap2, double connexityRate2, double surfaceMinSizeFactor )
     {
-        this.tempSurfaces = tempSurfaces;
+        this.surfaces = surfaces;
         this.startingOsSize2 = startingOsSize2;
         this.overlap2 = overlap2;
         this.connexityRate2 = connexityRate2;
@@ -29,10 +58,18 @@ public class RunSecondConstructionTask extends AbstractTask< ArrayList< Surface
     @Override
     protected ArrayList< Surface > call() throws Exception
     {
-        SecondRoundConstruction step1 = new SecondRoundConstruction( tempSurfaces, startingOsSize2, overlap2, connexityRate2, surfaceMinSizeFactor );
-        step1.process();
-        LOGGER.debug( "Second round task completed." );
-        return step1.getSurfaces();
+        LOGGER.info( "Computing second round construction..." );
+        SecondRoundConstruction step2 = new SecondRoundConstruction( surfaces, startingOsSize2, overlap2, connexityRate2, surfaceMinSizeFactor );
+        try
+        {
+            step2.process();
+        }
+        catch ( NoSurfaceFoundException e )
+        {
+
+            return null;
+        }
+        return step2.getSurfaces();
     }
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/SetCurrentDatasetTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/SetCurrentDatasetTask.java
index 1763e6fe..7a83c081 100644
--- a/src/main/java/fr/pasteur/ida/zellige/gui/task/SetCurrentDatasetTask.java
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/SetCurrentDatasetTask.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.gui.task;
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/gui/task/SmoothingTask.java b/src/main/java/fr/pasteur/ida/zellige/gui/task/SmoothingTask.java
new file mode 100644
index 00000000..d53594af
--- /dev/null
+++ b/src/main/java/fr/pasteur/ida/zellige/gui/task/SmoothingTask.java
@@ -0,0 +1,61 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
+package fr.pasteur.ida.zellige.gui.task;
+
+import fr.pasteur.ida.zellige.element.Pixels;
+import fr.pasteur.ida.zellige.steps.selection.postTreatment.PostTreatment;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import net.imglib2.img.Img;
+import net.imglib2.type.logic.BitType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SmoothingTask extends AbstractTask< Pixels[][] >
+{
+
+    private final static Logger LOGGER = LoggerFactory.getLogger( SmoothingTask.class );
+    private final SimpleObjectProperty< Img< BitType > > islandSearchImage;
+    private final DoubleProperty sigmaXY;
+    private final DoubleProperty sigmaZ;
+
+    public SmoothingTask( SimpleObjectProperty< Img< BitType > > islandSearchImage, DoubleProperty sigmaXY, DoubleProperty sigmaZ )
+    {
+        this.islandSearchImage = islandSearchImage;
+        this.sigmaXY = sigmaXY;
+        this.sigmaZ = sigmaZ;
+    }
+
+    @Override
+    protected Pixels[][] call() throws Exception
+    {
+        LOGGER.info( "Computing first smoothing..." );
+        return PostTreatment.runSmoothing( islandSearchImage.getValue(), sigmaXY.intValue(), sigmaZ.intValue() );
+    }
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/Utils.java b/src/main/java/fr/pasteur/ida/zellige/steps/Utils.java
index 17e6dbbf..fc8cb4be 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/Utils.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/Utils.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps;
 
 import net.imglib2.RandomAccess;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/ConstructionCompletion.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/ConstructionCompletion.java
index d61951db..7bcfadfd 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/ConstructionCompletion.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/ConstructionCompletion.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -83,7 +111,7 @@ public class ConstructionCompletion< T extends RealType< T > & NativeType< T > >
                             int z = averageIntZ( pixel );
                             if ( z != - 1 )
                             {
-                                System.out.println( "only two : " + pixel );
+//                                LOGGER.debug( "only two : " + pixel );
                                 randomAccess.setPosition( i, 1 );
                                 randomAccess.get().set( new UnsignedShortType( z + 1 ) );
                             }
@@ -99,7 +127,7 @@ public class ConstructionCompletion< T extends RealType< T > & NativeType< T > >
                     {
                         if ( pixel != null )
                         {
-                            System.out.println( "more than two : " + pixel );
+//                            LOGGER.debug( "more than two : " + pixel );
                         }
                     }
                 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/Interpolation.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/Interpolation.java
index 3faa344b..3c624ad6 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/Interpolation.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/Interpolation.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction;
 
 import net.imglib2.Cursor;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/FirstRoundConstructionException.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/FirstRoundConstructionException.java
index 238ab751..f024b956 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/FirstRoundConstructionException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/FirstRoundConstructionException.java
@@ -1,9 +1,38 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.exception;
 
 public class FirstRoundConstructionException extends NoSurfaceFoundException
 {
     public FirstRoundConstructionException()
     {
-        this.setMessage( "No surfaces found, please try to lower the parameter OSMinimumSize first round" );
+        this.setMessage( "No surfaces found.\nChange the 'selection' parameters\n, the 'first round' parameters or\n" +
+                "the surface min size parameter." );
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/NoSurfaceFoundException.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/NoSurfaceFoundException.java
index 92272c8e..7effc462 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/NoSurfaceFoundException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/NoSurfaceFoundException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.exception;
 
 public class NoSurfaceFoundException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/SecondRoundConstructionException.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/SecondRoundConstructionException.java
index 32b0a243..a651e7fc 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/SecondRoundConstructionException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/exception/SecondRoundConstructionException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.exception;
 
 public class SecondRoundConstructionException extends NoSurfaceFoundException
@@ -5,6 +33,6 @@ public class SecondRoundConstructionException extends NoSurfaceFoundException
 
     public SecondRoundConstructionException()
     {
-        this.setMessage( "No surfaces found, please try to lower the parameter OSMinimumSize second round" );
+        this.setMessage( "No surfaces found, please try another set of 'the second round' parameters" );
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java
index ff750967..9607bec0 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds;
 
 public class ConstructionParameters
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java
index 452cdb03..e43a6282 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ConstructionRound.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds;
 
 import fr.pasteur.ida.zellige.element.Pixels;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/FirstRoundConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/FirstRoundConstruction.java
index 832b87f4..c5b689c0 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/FirstRoundConstruction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/FirstRoundConstruction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -37,7 +65,7 @@ public class FirstRoundConstruction extends ConstructionRound
         long stopOseConstructionTime = System.currentTimeMillis();
         this.setOSConstructionProcessingTime( stopOseConstructionTime - startOseConstructionTime );
         /* Construction of surfaces*/
-        LOGGER.info( "Starting surface construction..." );
+        LOGGER.debug( "Starting surface construction..." );
         int lineLength = maximums[ 0 ].length;
         long startSurfacesConstructionTime = System.currentTimeMillis();
         this.getSurfaces().addAll( constructSurfaces( oseLists, lineLength ) );
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/SecondRoundConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/SecondRoundConstruction.java
index 688f2e50..7ef1c3b1 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/SecondRoundConstruction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/SecondRoundConstruction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -31,14 +59,6 @@ public class SecondRoundConstruction extends ConstructionRound
         this.tempSurfaces = tempSurfaces;
     }
 
-//    public static ArrayList< Surface > run( ArrayList< Surface > tempSurfaces, ConstructionParameters constructionParameters ) throws NoSurfaceFoundException
-//    {
-//        SecondStepConstruction round = new SecondStepConstruction( tempSurfaces, constructionParameters );
-//        round.process();
-//
-//        return round.finalSurfaces;
-//    }
-
     /**
      * Rebuilds the double pixel array from the {@link SurfaceLine} array
      * of a {@link Surface} for a construction in the height dimension.
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstruction.java
index b13dbc43..7f22314c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstruction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstruction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -37,8 +65,8 @@ public abstract class OseConstruction
             oseListArray.set(i, findOSE( maximums[ i ] ));
         }
         startingStatus.setStartingStatus();
-        System.out.println( "Starting size = " + startingStatus.getStartingSize());
-        LOGGER.info( "Ose construction complete. All sections processed." );
+        LOGGER.debug( "Starting size = " + startingStatus.getStartingSize() );
+        LOGGER.debug( "Ose construction complete. All sections processed." );
     }
 
     /**
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionXZ.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionXZ.java
index 5c85d490..56b47602 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionXZ.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionXZ.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -20,7 +48,7 @@ public class OseConstructionXZ extends OseConstruction
 
     public static OSEListArray run( Pixels[][] maximums, double threshold )
     {
-        LOGGER.info( "Starting XZ construction" );
+        LOGGER.debug( "Starting XZ construction" );
         OseConstructionXZ constructionXZ = new OseConstructionXZ( maximums, threshold );
         constructionXZ.processAllSection();
         return constructionXZ.getOseListArray();
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionYZ.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionYZ.java
index def41f2b..9e124fdc 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionYZ.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/ose/OseConstructionYZ.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds.ose;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -24,7 +52,7 @@ public class OseConstructionYZ extends OseConstruction
 
     public static OSEListArray run( Pixels[][] maximums, double threshold )
     {
-        LOGGER.info( "Starting YZ construction" );
+        LOGGER.debug( "Starting YZ construction" );
         OseConstructionYZ constructionYZ = new OseConstructionYZ( maximums, threshold );
         constructionYZ.reset();
         constructionYZ.processAllSection();
@@ -64,6 +92,6 @@ public class OseConstructionYZ extends OseConstruction
                 pixels.resetSideCoordinate();
             }
         }
-        LOGGER.info( "Ose reset" ) ;
+        LOGGER.debug( "Ose reset" );
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfaceConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfaceConstruction.java
index 5626215a..991e97c6 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfaceConstruction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfaceConstruction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds.surface;
 
 import fr.pasteur.ida.zellige.element.Surface;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java
index c0780093..0192b477 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/construction/rounds/surface/SurfacesConstruction.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.construction.rounds.surface;
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/projection/DisplayParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/projection/DisplayParameters.java
index 1134e135..87dc30e0 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/projection/DisplayParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/projection/DisplayParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.projection;
 
 public class DisplayParameters
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/projection/NoPossibleDisplayException.java b/src/main/java/fr/pasteur/ida/zellige/steps/projection/NoPossibleDisplayException.java
index ac88bb90..1f87da24 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/projection/NoPossibleDisplayException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/projection/NoPossibleDisplayException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.projection;
 
 public class NoPossibleDisplayException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/projection/ProjectionParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/projection/ProjectionParameters.java
index 75ec9dbe..92ee3d79 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/projection/ProjectionParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/projection/ProjectionParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.projection;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/projection/ReferenceSurfaceProjection.java b/src/main/java/fr/pasteur/ida/zellige/steps/projection/ReferenceSurfaceProjection.java
index 5e5693f3..60b33a70 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/projection/ReferenceSurfaceProjection.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/projection/ReferenceSurfaceProjection.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.projection;
 
 import fr.pasteur.ida.zellige.element.ReferenceSurface;
@@ -24,41 +52,23 @@ import static fr.pasteur.ida.zellige.steps.Utils.setPosition;
  */
 public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T > >
 {
+    private final int delta;
 
-    public ReferenceSurfaceProjection()
+    public ReferenceSurfaceProjection( int delta )
     {
-
+        this.delta = delta;
     }
 
+
     public static < T extends RealType< T > & NativeType< T > > void run( ReferenceSurface< T > referenceSurface,
                                                                           ProjectionParameters projectionParameters,
                                                                           DisplayParameters displayParameters ) throws NoPossibleDisplayException
     {
-        ReferenceSurfaceProjection< T > referenceSurfaceProjection = new ReferenceSurfaceProjection<>();
+        ReferenceSurfaceProjection< T > referenceSurfaceProjection = new ReferenceSurfaceProjection<>( projectionParameters.getDelta() );
         referenceSurfaceProjection.set( referenceSurface, projectionParameters );
         referenceSurfaceProjection.display( referenceSurface, projectionParameters, displayParameters );
     }
 
-//    public static < T extends RealType< T > & NativeType< T > > void run( ReferenceSurface< T > referenceSurface,
-//                                                                          int delta, String projectionType,
-//                                                                          boolean projectionDisplay,
-//                                                                          boolean rawHeightMapDisplay,
-//                                                                          boolean extractedHeightMapDisplay,
-//                                                                          boolean reduced3DSpaceDisplay,
-//                                                                          boolean segmentedSurfaceDisplay,
-//                                                                          boolean segmentedSurfaceMaskDisplay ) throws NoPossibleDisplayException
-//    {
-//        ReferenceSurfaceProjection< T > referenceSurfaceProjection = new ReferenceSurfaceProjection<>();
-//        referenceSurfaceProjection.set( referenceSurface, delta, projectionType );
-//        referenceSurfaceProjection.display( referenceSurface, delta, projectionType,
-//                projectionDisplay,
-//                rawHeightMapDisplay,
-//                extractedHeightMapDisplay,
-//                reduced3DSpaceDisplay,
-//                segmentedSurfaceDisplay,
-//                segmentedSurfaceMaskDisplay );
-//    }
-
     public static < T extends RealType< T > & NativeType< T > > void run( ReferenceSurface< T > referenceSurface,
                                                                           int delta, String projectionType,
                                                                           boolean projectionDisplay,
@@ -69,7 +79,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                                                                           boolean segmentedSurfaceMaskDisplay,
                                                                           int delta2 ) throws NoPossibleDisplayException
     {
-        ReferenceSurfaceProjection< T > referenceSurfaceProjection = new ReferenceSurfaceProjection<>();
+        ReferenceSurfaceProjection< T > referenceSurfaceProjection = new ReferenceSurfaceProjection<>( delta );
         referenceSurfaceProjection.set( referenceSurface, delta, projectionType, delta2 );
         referenceSurfaceProjection.display( referenceSurface, delta, projectionType,
                 projectionDisplay,
@@ -216,42 +226,6 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
     }
 
 
-    //    public static < T extends RealType< T > & NativeType< T > > Img< T > getSegmentedSurface
-//            ( ReferenceSurface< T > referenceSurface, int delta )
-//    {
-//        RandomAccessibleInterval< T > input = referenceSurface.getInput();
-//        ImgFactory< T > factory = referenceSurface.getFactory();
-//        RandomAccessibleInterval< UnsignedShortType > zMap = referenceSurface.getzMap();
-//        Img< T > heightMapStack = factory.create( input.dimension( 0 ), input.dimension( 1 ), input.dimension( 2 ) );
-//        RandomAccess< T > stackAccess = input.randomAccess();
-//        RandomAccess< T > heightmapAccess = heightMapStack.randomAccess();
-//        RandomAccess< UnsignedShortType > zMapAccess = zMap.randomAccess();
-//
-//        for ( int x = 0; x <= input.dimension( 0 ) - 1; x++ )
-//        {
-//            for ( int y = 0; y <= input.dimension( 1 ) - 1; y++ )
-//            {
-//                setPosition( zMapAccess, x, y );
-//                int Z = zMapAccess.get().getInteger();
-//                if ( Z > 0 )
-//                {
-//                    // " - 1" because by convention the z values start at 1, 0 is for unassigned values.
-////                    heightmapAccess.get().set( stackAccess.get() );
-//                    int startIndex = Math.max( Z - delta, 0 );
-//                    int stopIndex = Math.min( ( int ) input.dimension( 2 ) - 1, ( Z + delta ) );
-//
-//
-//                    for ( int z = startIndex; z <= stopIndex; z++ )
-//                    {
-//                        setPosition( heightmapAccess, x, y, z );
-//                        setPosition( stackAccess, x, y, z );
-//                        heightmapAccess.get().set( stackAccess.get() );
-//                    }
-//                }
-//            }
-//        }
-//        return heightMapStack;
-//    }
     public static < T extends RealType< T > & NativeType< T > > Img< T > getSegmentedSurface
     ( Img< UnsignedShortType > extractedHeightMap, RandomAccessibleInterval< T > originalInput, ImgFactory< T > factory )
     {
@@ -475,12 +449,12 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( displayParameters.isProjectionDisplay() )
             {
                 ImageJFunctions.show( referenceSurface.getProjection().get(),
-                        "Projection with " + projectionType + " RS n°" + referenceSurface.getIndex() );
+                        "Projection with " + projectionType + " RS n°" + delta );
 
             }
             if ( displayParameters.iszMapDisplay() )
             {
-                ImageJFunctions.show( referenceSurface.getzMap(), "Raw height map" + "RS n°" + referenceSurface.getIndex() );
+                ImageJFunctions.show( referenceSurface.getzMap(), "Raw height map" + "RS n°" + delta );
             }
             if ( displayParameters.isExtractedHeightMapSubStackDisplay() )
 
@@ -488,7 +462,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta >= 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(),
-                            "Extracted surface subStack (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "Extracted surface subStack (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -500,7 +474,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta > 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(),
-                            "RS n°" + referenceSurface.getIndex() + ": segmented surface (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "RS n°" + delta + ": segmented surface (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -510,14 +484,14 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( displayParameters.isHeightMapSubVolumeMask() )
             {
                 ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(),
-                        "RS n° " + referenceSurface.getIndex() + " :  segmented surface mask mask (delta = " + delta );
+                        "RS n° " + delta + " :  segmented surface mask mask (delta = " + delta );
             }
             if ( ( projectionType.equals( "MIP" ) || projectionType.equals( "Min" ) ) && displayParameters.isProjectionHeightMapDisplay() )
             {
                 if ( delta >= 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted height Map with " +
-                            projectionType + " RS n°" + referenceSurface.getIndex() );
+                            projectionType + " RS n°" + delta );
                 }
                 else
                 {
@@ -543,11 +517,11 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( projectionDisplay )// the projection
             {
                 ImageJFunctions.show( referenceSurface.getProjection().get(),
-                        "Projection with " + projectionType + " RS n°" + referenceSurface.getIndex() );
+                        "Projection with " + projectionType + " RS n°" + delta );
             }
             if ( rawHeightMapDisplay )// the raw height map
             {
-                ImageJFunctions.show( referenceSurface.getzMap(), "Zellige generated height map" + "RS n°" + referenceSurface.getIndex() );
+                ImageJFunctions.show( referenceSurface.getzMap(), "Zellige generated height map" + "RS n°" + delta );
             }
 
             if ( reduced3DSpaceDisplay )
@@ -555,7 +529,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta != 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(),
-                            "Reduced 3D space (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "Reduced 3D space (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -568,7 +542,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta != 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted height Map with " +
-                            projectionType + " RS n°" + referenceSurface.getIndex() );
+                            projectionType + " RS n°" + delta );
                 }
                 else
                 {
@@ -580,7 +554,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta != 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(),
-                            "Height map subVolume mask (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "Height map subVolume mask (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -590,7 +564,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( segmentedSurfaceMaskDisplay ) // the segmented surface mask
             {
                 ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(),
-                        "RS n° " + referenceSurface.getIndex() + " :  SubVolume mask (delta = " + delta );
+                        "RS n° " + delta + " :  SubVolume mask (delta = " + delta );
             }
         }
 
@@ -610,11 +584,11 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( projectionDisplay )// the projection
             {
                 ImageJFunctions.show( referenceSurface.getProjection().get(),
-                        "Projection with " + projectionType + " RS n°" + referenceSurface.getIndex() );
+                        "Projection with " + projectionType + " RS n°" + delta );
             }
             if ( rawHeightMapDisplay )// the raw height map
             {
-                ImageJFunctions.show( referenceSurface.getzMap(), "Raw Height Map" + "RS n°" + referenceSurface.getIndex() );
+                ImageJFunctions.show( referenceSurface.getzMap(), "Raw Height Map" + "RS n°" + delta );
             }
 
             if ( reduced3DSpaceDisplay )// the reduced 3D stack of size (X, Y, delta*2 +1)
@@ -622,7 +596,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta != 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getReduced3DSpace(),
-                            "Reduced 3D space (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "Reduced 3D space (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -635,7 +609,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta != 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getExtractedHeightMap(), "Extracted height Map with " +
-                            projectionType + " RS n°" + referenceSurface.getIndex() );
+                            projectionType + " RS n°" + delta );
                 }
                 else
                 {
@@ -647,7 +621,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
                 if ( delta > 0 )
                 {
                     ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurface(),
-                            "Segmented surface (delta = " + delta + ")" + "RS n°" + referenceSurface.getIndex() );
+                            "Segmented surface (delta = " + delta + ")" + "RS n°" + delta );
                 }
                 else
                 {
@@ -657,7 +631,7 @@ public class ReferenceSurfaceProjection< T extends RealType< T > & NativeType< T
             if ( segmentedSurfaceMaskDisplay ) // the segmented surface mask
             {
                 ImageJFunctions.show( referenceSurface.getProjection().getSegmentedSurfaceMask(),
-                        "RS n° " + referenceSurface.getIndex() + " : Segmented surface mask (delta = " + delta2 );
+                        "RS n° " + delta + " : Segmented surface mask (delta = " + delta2 );
             }
         }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/Selection.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/Selection.java
index 50d92f1d..5f96d076 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/Selection.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/Selection.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -51,10 +79,10 @@ public class Selection< T extends RealType< T > & NativeType< T > >
     public static < T extends RealType< T > & NativeType< T > > Pixels[][]
     run( RandomAccessibleInterval< T > input, PretreatmentParameters pretreatmentParameters, ClassificationParameters classificationParameters, PostTreatmentParameters postTreatmentParameters ) throws EmptyOutputException, NoClassificationException, DataValidationException
     {
-        LOGGER.info( "Starting process..." );
+        LOGGER.debug( "Starting process..." );
         Selection< T > selection = new Selection<>( pretreatmentParameters, classificationParameters, postTreatmentParameters, input );
         selection.run();
-        LOGGER.info( "Process complete." );
+        LOGGER.debug( "Process complete." );
         return selection.output;
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/AmplitudeClassification.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/AmplitudeClassification.java
index b5d2ca8a..37c2ace4 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/AmplitudeClassification.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/AmplitudeClassification.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
@@ -39,7 +67,7 @@ public class AmplitudeClassification< T extends RealType< T > & NativeType< T >
     {
         this.input = input;
         this.factory = factory;
-        LOGGER.info( "Derivative method used : {}", ReferenceSurfaceExtraction.getDerivativeMethod() );
+        LOGGER.debug( "Derivative method used : {}", ReferenceSurfaceExtraction.getDerivativeMethod() );
     }
 
 
@@ -87,7 +115,7 @@ public class AmplitudeClassification< T extends RealType< T > & NativeType< T >
         this.factory = factory;
         this.output = amplitude;
         this.userThreshold = userThreshold;
-        LOGGER.info( "Derivative method used : {}", ReferenceSurfaceExtraction.getDerivativeMethod() );
+        LOGGER.debug( "Derivative method used : {}", ReferenceSurfaceExtraction.getDerivativeMethod() );
     }
 
     /**
@@ -213,7 +241,7 @@ public class AmplitudeClassification< T extends RealType< T > & NativeType< T >
         Img< T > amp = getAmplitude( maximums, factory, minimums );
         T threshold = maximums.firstElement().createVariable();
         threshold.setReal( userThreshold );
-        LOGGER.info( "Amplitude Threshold applied  = {}", threshold );
+        LOGGER.debug( "Amplitude Threshold applied  = {}", threshold );
         output = Thresholder.threshold( amp, threshold, true, 5 );
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Classification.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Classification.java
index d199728c..678409ca 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Classification.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Classification.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
@@ -8,12 +36,15 @@ import net.imglib2.RandomAccess;
 import net.imglib2.RandomAccessibleInterval;
 import net.imglib2.img.Img;
 import net.imglib2.img.ImgFactory;
+import net.imglib2.img.display.imagej.ImageJFunctions;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.logic.BitType;
 import net.imglib2.type.numeric.RealType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Objects;
+
 
 /**
  * This class allows the double classification of a 3D image using in parallel a classification based on the amplitude
@@ -66,7 +97,7 @@ public class Classification< T extends RealType< T > & NativeType< T > >
      */
     void process( ImgFactory< T > factory, ClassificationParameters parameters ) throws NoClassificationException, DataValidationException
     {
-        LOGGER.info( "Starting classification..." );
+        LOGGER.debug( "Starting classification..." );
         int amplitudeThreshold = parameters.getAmplitudeThreshold();
         int otsuThreshold = parameters.getOtsuThreshold();
         if ( amplitudeThreshold != ZERO && otsuThreshold != ZERO )
@@ -85,7 +116,7 @@ public class Classification< T extends RealType< T > & NativeType< T > >
         {
             throw new NoClassificationException();
         }
-        LOGGER.info( "Classification complete" );
+        LOGGER.debug( "Classification complete" );
     }
 
 
@@ -105,9 +136,12 @@ public class Classification< T extends RealType< T > & NativeType< T > >
     {
         /* Classification according to maximum amplitude */
         Img< BitType > amplitudeImg = AmplitudeClassification.run( input, factory, amplitudeThreshold );
+
+        ImageJFunctions.show( amplitudeImg );
         /* Classification according to local intensity*/
 
         Img< BitType > otsuImg = OtsuClassification.run( input, factory, otsuThreshold );
+        ImageJFunctions.show( Objects.requireNonNull( otsuImg ) );
         /* Intersection of both classification */
         this.output = interClassification( amplitudeImg, amplitudeImg.factory(), otsuImg );
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/ClassificationParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/ClassificationParameters.java
index 1147477c..1c66f0ec 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/ClassificationParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/ClassificationParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
@@ -15,7 +43,7 @@ public class ClassificationParameters
         classificationParametersValidationCheck( amplitudeThreshold, otsuThreshold );
         this.amplitudeThreshold = amplitudeThreshold;
         this.otsuThreshold = otsuThreshold;
-        LOGGER.info( "Classification parameters are valid" );
+        LOGGER.debug( "Classification parameters are valid" );
     }
 
     /**
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/HistogramZ.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/HistogramZ.java
index fe5da0c0..b6e44199 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/HistogramZ.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/HistogramZ.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 
@@ -203,4 +231,4 @@ public class HistogramZ< T > implements Algorithm, Benchmark
         return pTime;
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Otsu.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Otsu.java
index 8dc0cfa4..046434a8 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Otsu.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Otsu.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 import net.imglib2.Cursor;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/OtsuClassification.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/OtsuClassification.java
index a59eab2b..654db06b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/OtsuClassification.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/OtsuClassification.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 import fr.pasteur.ida.zellige.steps.Utils;
@@ -147,7 +175,7 @@ public class OtsuClassification< T extends RealType< T > & NativeType< T > >
         }
         Utils.gaussianConvolution( grid, grid, new double[]{ 5, 5, 1 } );
         long stop = System.currentTimeMillis();
-        LOGGER.info( "Local thresholds computed in {} s.", ( ( stop - start ) / 1000.0 ) );
+        LOGGER.debug( "Local thresholds computed in {} s.", ( ( stop - start ) / 1000.0 ) );
 
     }
 
@@ -176,7 +204,7 @@ public class OtsuClassification< T extends RealType< T > & NativeType< T > >
         computeLocalThreshold( input, grid );
 
         output = applyLocalThreshold( Views.iterable( input ), Views.iterable( grid ), userThreshold );
-        LOGGER.info( "Local thresholds computed with user value  = {}.", this.userThreshold );
+        LOGGER.debug( "Local thresholds computed with user value  = {}.", this.userThreshold );
 
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Threshold.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Threshold.java
index 10ddd6f7..8ee22b82 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Threshold.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/classification/Threshold.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.classification;
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/DataValidationException.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/DataValidationException.java
index 5db67092..d312c649 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/DataValidationException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/DataValidationException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.exception;
 
 public class DataValidationException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/EmptyOutputException.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/EmptyOutputException.java
index 20ade7e3..e044fb1c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/EmptyOutputException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/EmptyOutputException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.exception;
 
 public class EmptyOutputException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/NoClassificationException.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/NoClassificationException.java
index 0884a9c3..5612fe18 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/NoClassificationException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/exception/NoClassificationException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.exception;
 
 public class NoClassificationException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatment.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatment.java
index 492b5a19..2e53cd32 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatment.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatment.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -40,10 +68,10 @@ public class PostTreatment
         return postTreatment.getOutput();
     }
 
-    public static Pixels[][] run( Img< BitType > input, double sigmaXY, double sigmaZ, int islandSize, int connexity ) throws DataValidationException
+    public static Pixels[][] run( Img< BitType > input, double sigmaXY, double sigmaZ, int islandSize ) throws DataValidationException
     {
         PostTreatment postTreatment = new PostTreatment( input );
-        postTreatment.process( sigmaXY, sigmaZ, islandSize, connexity );
+        postTreatment.process( sigmaXY, sigmaZ, islandSize );
         return postTreatment.getOutput();
     }
 
@@ -74,22 +102,27 @@ public class PostTreatment
         return copy;
     }
 
-    Img< BitType > runIslandSearch(Img< BitType > input , int islandSize, int connexity)
+    public static Img< BitType > runIslandSearch( Img< BitType > input, int islandSize )
     {
-        return IslandSearch.run( input, islandSize, connexity );
+        if ( islandSize > 0 )
+        {
+            int connexity = 4;
+            return IslandSearch.run( input, islandSize, connexity );
+        }
+        return input;
     }
 
-    void runDilatation( Img< FloatType > input, PostTreatmentParameters parameters )
+    static void runDilatation( Img< FloatType > input, double sigmaXY, double sigmaZ )
     {
-        double sigmaXY = parameters.getSigmaXY();
-        double sigmaZ = parameters.getSigmaZ();
-        LOGGER.info( "Running dilatation with sigma XY = {} and sigma Z = {}", sigmaXY, sigmaZ );
+        LOGGER.debug( "Running dilatation with sigma XY = {} and sigma Z = {}", sigmaXY, sigmaZ );
         Utils.gaussianConvolution( input.copy(), input, new double[]{ sigmaXY, sigmaXY, sigmaZ } );
     }
 
-    void runDilatation( Img< FloatType > input, double sigmaXY, double sigmaZ )
+    void runDilatation( Img< FloatType > input, PostTreatmentParameters parameters )
     {
-        LOGGER.info( "Running dilatation with sigma XY = {} and sigma Z = {}", sigmaXY, sigmaZ );
+        double sigmaXY = parameters.getSigmaXY();
+        double sigmaZ = parameters.getSigmaZ();
+        LOGGER.debug( "Running dilatation with sigma XY = {} and sigma Z = {}", sigmaXY, sigmaZ );
         Utils.gaussianConvolution( input.copy(), input, new double[]{ sigmaXY, sigmaXY, sigmaZ } );
     }
 
@@ -98,7 +131,7 @@ public class PostTreatment
      * @param <T>   the image type
      * @return the image as a 2D {@link Pixels} array.
      */
-    public < T extends RealType< T > & NativeType< T > > Pixels[][] buildPixelArray(
+    public static < T extends RealType< T > & NativeType< T > > Pixels[][] buildPixelArray(
             final RandomAccessibleInterval< T > stack )
     {
         RandomAccess< T > access = stack.randomAccess();
@@ -127,16 +160,28 @@ public class PostTreatment
         return pixels;
     }
 
+    public static Pixels[][] runSmoothing( Img< BitType > ISImage, int sigmaXY, int sigmaZ ) throws DataValidationException
+    {
+        Img< FloatType > converted = convertBitTypeIntoFloatType( ISImage );
+        // Use of Converter.convert() not possible because classifiedPixel type do not extends RealType
+
+        /* Dilatation of the resulting image*/
+        runDilatation( converted, sigmaXY, sigmaZ );
+
+        /* Final local maximum detection */
+        converted = ExtremaDetection.findMaxima( converted.copy(), converted.factory() );
+        return buildPixelArray( converted );
+    }
+
     public void process( PostTreatmentParameters parameters ) throws DataValidationException
     {
-        LOGGER.info( "Starting post treatment." );
+        LOGGER.debug( "Starting post treatment." );
         /* Isolated Pixel removal */
         int islandSize = parameters.getIslandSize();
         Img< BitType > temp = input;
         if ( islandSize != 0 )
         {
-            int connexity = parameters.getConnexity();
-            temp = runIslandSearch( input, islandSize, connexity );
+            temp = runIslandSearch( input, islandSize );
         }
         /* Conversion into FloatType before dilatation */
         Img< FloatType > converted = convertBitTypeIntoFloatType( temp );
@@ -148,17 +193,17 @@ public class PostTreatment
         /* Final local maximum detection */
         converted = ExtremaDetection.findMaxima( converted.copy(), converted.factory() );
         output = buildPixelArray( converted );
-        LOGGER.info( "Post treatment complete" );
+        LOGGER.debug( "Post treatment complete" );
     }
 
-    public void process( double sigmaXY, double sigmaZ, int islandSize, int connexity ) throws DataValidationException
+    public void process( double sigmaXY, double sigmaZ, int islandSize ) throws DataValidationException
     {
-        LOGGER.info( "Starting post treatment." );
+        LOGGER.debug( "Starting post treatment." );
         /* Isolated Pixel removal */
         Img< BitType > temp = input;
         if ( islandSize != 0 )
         {
-            temp = runIslandSearch( input, islandSize, connexity );
+            temp = runIslandSearch( input, islandSize );
         }
         /* Conversion into FloatType before dilatation */
         Img< FloatType > converted = convertBitTypeIntoFloatType( temp );
@@ -170,7 +215,7 @@ public class PostTreatment
         /* Final local maximum detection */
         converted = ExtremaDetection.findMaxima( converted.copy(), converted.factory() );
         output = buildPixelArray( converted );
-        LOGGER.info( "Post treatment complete" );
+        LOGGER.debug( "Post treatment complete" );
     }
 
     public Pixels[][] getOutput()
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatmentParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatmentParameters.java
index 9ec464ee..012afcc6 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatmentParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/PostTreatmentParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Island.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Island.java
index 434e6c4a..5e743ad6 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Island.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Island.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch;
 
 import java.util.ArrayList;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/IslandSearch.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/IslandSearch.java
index 203db928..7ef95479 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/IslandSearch.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/IslandSearch.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch;
 
 import fr.pasteur.ida.zellige.steps.Utils;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Sand.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Sand.java
index 436ae408..dd2118df 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Sand.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/Sand.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch;
 
 public class Sand
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/World.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/World.java
index 621bce16..cc090706 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/World.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/postTreatment/islandSearch/World.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch;
 
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/Pretreatment.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/Pretreatment.java
index b3873e15..b8fcda26 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/Pretreatment.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/Pretreatment.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.pretreatment;
 
 import net.imglib2.RandomAccessible;
@@ -40,10 +68,21 @@ public class Pretreatment< T extends RealType< T > & NativeType< T > >
         LOGGER.debug( "Starting process..." );
         Pretreatment< T > pretreatment = new Pretreatment<>( input, radius );
         pretreatment.run();
-        LOGGER.info( "Process complete." );
+        LOGGER.debug( "Process complete." );
         return pretreatment.getOutput();
     }
 
+    public static < T extends RealType< T > & NativeType< T > > Img< FloatType >
+    run( RandomAccessibleInterval< T > input )
+    {
+        LOGGER.debug( "Starting process..." );
+        Pretreatment< T > pretreatment = new Pretreatment<>( input, 2 );
+        pretreatment.run();
+        LOGGER.debug( "Process complete." );
+        return pretreatment.getOutput();
+    }
+
+
     /**
      * Normalizes the pixel values of an Img between 0 and 255.
      *
@@ -76,7 +115,7 @@ public class Pretreatment< T extends RealType< T > & NativeType< T > >
         LOGGER.debug( "Starting denoising step..." );
         RandomAccessibleInterval< FloatType > converted = Converters.convert( input, new RealFloatSamplerConverter<>() );
 
-        LOGGER.info( "Denoising step complete, with gaussian filter" );
+        LOGGER.debug( "Denoising step complete, with gaussian filter" );
         return gaussianBlurFilterDenoising( converted );
 
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/PretreatmentParameters.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/PretreatmentParameters.java
index 77845e72..7b78c635 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/PretreatmentParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/pretreatment/PretreatmentParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.pretreatment;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/Derivative.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/Derivative.java
index 0e507fc3..62e90f95 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/Derivative.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/Derivative.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.util;
 
 import net.imglib2.RandomAccessible;
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection.java
index a4ac1dbe..2b9d671c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.util;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
@@ -46,7 +74,7 @@ public class ExtremaDetection< T extends RealType< T > & NativeType< T > >
     public static < T extends RealType< T > & NativeType< T > > Img< T > findMinima( RandomAccessibleInterval< T > input,
                                                                                      ImgFactory< T > factory ) throws DataValidationException
     {
-        LOGGER.info( "Finding minima..." );
+        LOGGER.debug( "Finding minima..." );
         return ExtremaDetection.run( input, factory, MIN );
 //        return findExtrema( input, factory, "min" );
     }
@@ -61,7 +89,7 @@ public class ExtremaDetection< T extends RealType< T > & NativeType< T > >
     public static < T extends RealType< T > & NativeType< T > > Img< T > findMaxima( RandomAccessibleInterval< T > input,
                                                                                      ImgFactory< T > factory ) throws DataValidationException
     {
-        LOGGER.info( "Finding maxima..." );
+        LOGGER.debug( "Finding maxima..." );
         return ExtremaDetection.run( input, factory, MAX );
 //        return findExtrema( input, factory, "max" );
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection2D.java b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection2D.java
index 38352416..0fdf6427 100644
--- a/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection2D.java
+++ b/src/main/java/fr/pasteur/ida/zellige/steps/selection/util/ExtremaDetection2D.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.steps.selection.util;
 
 import fr.pasteur.ida.zellige.steps.Utils;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/All_GT_Display.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/All_GT_Display.java
index a42de628..45a937ba 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/All_GT_Display.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/All_GT_Display.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import io.scif.img.IO;
@@ -15,6 +43,8 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 
@@ -22,6 +52,7 @@ import static fr.pasteur.ida.zellige.steps.Utils.setPositionAndGet;
 
 public class All_GT_Display< T extends RealType< T > & NativeType< T > > extends AbstractAnalysis
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( All_GT_Display.class );
     private final ArrayList< RandomAccessibleInterval< T > > groundTruths;
     private String[] gtColors = { "#283D66", "#A1B9EA", "#5A88E6", "#465166", "#466AB3", "", "", "" };
 
@@ -45,7 +76,7 @@ public class All_GT_Display< T extends RealType< T > & NativeType< T > > extends
         ArrayList< RandomAccessibleInterval< FloatType > > GTs = new ArrayList<>();
         for ( String path : refImagePath )
         {
-            System.out.println( path );
+            LOGGER.debug( path );
             SCIFIOImgPlus< ? > refImgPlus = IO.openImgs( path ).get( 0 );
             GTs.add( ( Img< FloatType > ) refImgPlus.getImg() );
         }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_DifferenceDisplay.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_DifferenceDisplay.java
index dd55b4b0..842b7268 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_DifferenceDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_DifferenceDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import io.scif.img.IO;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_Display.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_Display.java
index a6d0d475..3548086a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_Display.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_GT_Display.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import net.imglib2.RandomAccess;
@@ -125,7 +153,7 @@ public class HM_GT_Display< T extends RealType< T > & NativeType< T >, R extends
 
                 if ( GTValue != HMValue - 1 )
                 {
-//                    System.out.println( GTValue + " / " + HMValue );
+//                    LOGGER.debug( GTValue + " / " + HMValue );
                     if ( GTValue != 0 )
                     {
                         count++;
@@ -137,7 +165,7 @@ public class HM_GT_Display< T extends RealType< T > & NativeType< T >, R extends
                 }
                 else if ( GTValue != 0 )
                 {
-//                    System.out.println( GTValue + " / " + HMValue );
+//                    LOGGER.debug( GTValue + " / " + HMValue );
                     count++;
                 }
             }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages.java
index 6ceda52d..ce43c76d 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import io.scif.img.IO;
@@ -15,11 +43,14 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static fr.pasteur.ida.zellige.steps.Utils.setPositionAndGet;
 
 public class HM_black_GT_distanceDisplay_realImages< T extends RealType< T > & NativeType< T >, R extends RealType< R > & NativeType< R > > extends AbstractAnalysis
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( HM_black_GT_distanceDisplay_realImages.class );
     private final RandomAccessibleInterval< T > groundTruth;
     private final RandomAccessibleInterval< R > projection;
 
@@ -137,8 +168,8 @@ public class HM_black_GT_distanceDisplay_realImages< T extends RealType< T > & N
                     }
                 }
             }
-            System.out.println( "GTCount =" + GTCount );
-            System.out.println( "HMCount =" + HMCount );
+            LOGGER.debug( "GTCount =" + GTCount );
+            LOGGER.debug( "HMCount =" + HMCount );
         }
         Scatter scatter = new Scatter( points, colors );
         scatter.setWidth( 2 );
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages_2D.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages_2D.java
index c498d005..d70d85e4 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages_2D.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HM_black_GT_distanceDisplay_realImages_2D.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import io.scif.img.IO;
@@ -15,11 +43,14 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static fr.pasteur.ida.zellige.steps.Utils.setPositionAndGet;
 
 public class HM_black_GT_distanceDisplay_realImages_2D< T extends RealType< T > & NativeType< T >, R extends RealType< R > & NativeType< R > > extends AbstractAnalysis
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( HM_black_GT_distanceDisplay_realImages_2D.class );
     private final RandomAccessibleInterval< T > groundTruth;
     private final RandomAccessibleInterval< R > projection;
 
@@ -137,8 +168,8 @@ public class HM_black_GT_distanceDisplay_realImages_2D< T extends RealType< T >
                     }
                 }
             }
-            System.out.println( "GTCount =" + GTCount );
-            System.out.println( "HMCount =" + HMCount );
+            LOGGER.debug( "GTCount =" + GTCount );
+            LOGGER.debug( "HMCount =" + HMCount );
         }
         Scatter scatter = new Scatter( points, colors );
         scatter.setWidth( 2 );
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HMvsGT_Display.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HMvsGT_Display.java
index 74ea63d8..f18d3d6c 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HMvsGT_Display.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HMvsGT_Display.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import io.scif.img.IO;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HeightMapArrayWriter.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HeightMapArrayWriter.java
index 0808a255..856a9c59 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HeightMapArrayWriter.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/HeightMapArrayWriter.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import fr.pasteur.ida.zellige.element.Surface;
@@ -9,12 +37,14 @@ import net.imglib2.img.Img;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.numeric.RealType;
 import org.jzy3d.analysis.AbstractAnalysis;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 
 public class HeightMapArrayWriter< T extends RealType< T > & NativeType< T > > extends AbstractAnalysis
 {
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( HeightMapArrayWriter.class );
     private final Img< T > surface;
     private final String originalInput;
     private final int surfaceNumber;
@@ -48,12 +78,12 @@ public class HeightMapArrayWriter< T extends RealType< T > & NativeType< T > > e
     public static < T extends RealType< T > & NativeType< T > > void main( String[] args )
     {
         final String imagePath = "C:\\Users\\ctrebeau\\Desktop\\Zellige analysis\\Paper_012022\\Organoid\\Organoid_GT_HM1.tif"; /* The image path goes here !!!! */
-        System.out.println( imagePath );
+        LOGGER.debug( imagePath );
         /* JY version for opening files. */
         final SCIFIOImgPlus< ? > imgPlus = IO.openImgs( imagePath ).get( 0 );
         final Img< T > heightMap = ( Img< T > ) imgPlus.getImg();
         writeHeightMap( heightMap, imgPlus.getName(), 2 );
-        System.out.println( "END" );
+
 
     }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/LocalMaximumsDisplay.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/LocalMaximumsDisplay.java
index 99822507..98c5acd7 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/LocalMaximumsDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/LocalMaximumsDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 
@@ -32,7 +60,7 @@ public class LocalMaximumsDisplay extends AbstractAnalysis
      */
     public static void displayMaximums( Pixels[][] maximums )
     {
-        LOGGER.info( "3D maximums display" );
+        LOGGER.debug( "3D maximums display" );
 //        if ( ! GraphicsEnvironment.isHeadless() )
         {
             try
@@ -90,7 +118,7 @@ public class LocalMaximumsDisplay extends AbstractAnalysis
                                 z = coordinate.getZ();
                                 points[ index ] = new Coord3d( coordinate.getX(), coordinate.getY(), z );
                                 colors[ index ] = Color.RED;
-//                                System.out.println( points[index]);
+//                                .LOGGER.debug( points[index]);
                                 index++;
                             }
                         }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEDisplay.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEDisplay.java
index 98f0e6d7..130e380f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -10,13 +38,15 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Random;
 
 public class OSEDisplay extends AbstractAnalysis
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( OSEDisplay.class );
     private final OSEList oseList;
 
     public OSEDisplay( OSEList oseList )
@@ -31,7 +61,7 @@ public class OSEDisplay extends AbstractAnalysis
      */
     public static void displayOSE( OSEList oseLists )
     {
-        System.out.println( " **************** OSDisplay ************************" );
+        LOGGER.debug( " **************** OSDisplay ************************" );
         {
             try
             {
@@ -57,7 +87,7 @@ public class OSEDisplay extends AbstractAnalysis
         }
         Coord3d[] points = new Coord3d[ count ];
         Color[] colors = new Color[ count ];
-        System.out.println( "count : " + count );
+        LOGGER.debug( "count : " + count );
         Random r = new Random();
         r.setSeed( 50 );
 
@@ -78,7 +108,7 @@ public class OSEDisplay extends AbstractAnalysis
                 int z = coordinate.getZ();
                 if ( z == 6 || z == 7 )
                 {
-                    System.out.println( osID + " : " + coordinate );
+                    LOGGER.debug( osID + " : " + coordinate );
                 }
                 points[ index ] = new Coord3d( x, y, z );
                 colors[ index ] = Color.BLACK;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEListDisplay.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEListDisplay.java
index cabd5683..62ee2972 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEListDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/OSEListDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -11,13 +39,15 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Random;
 
 public class OSEListDisplay extends AbstractAnalysis
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( OSEListDisplay.class );
     private final OSEListArray oseLists;
 
     public OSEListDisplay( OSEListArray oseLists )
@@ -58,7 +88,7 @@ public class OSEListDisplay extends AbstractAnalysis
         }
         Coord3d[] points = new Coord3d[ count ];
         Color[] colors = new Color[ count ];
-        System.out.println("count : " + count);
+        LOGGER.debug( "count : " + count );
         Random r = new Random();
         r.setSeed( 50 );
         float x;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SelectedPixelsArrayWriter.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SelectedPixelsArrayWriter.java
index 25a4ad90..307232b8 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SelectedPixelsArrayWriter.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SelectedPixelsArrayWriter.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import fr.pasteur.ida.zellige.element.Pixels;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SurfaceDisplay.java b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SurfaceDisplay.java
index 3db1451a..a0957a6a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SurfaceDisplay.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/jzy3D/SurfaceDisplay.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.jzy3D;
 
 import fr.pasteur.ida.zellige.element.Coordinate;
@@ -11,10 +39,13 @@ import org.jzy3d.colors.Color;
 import org.jzy3d.maths.Coord3d;
 import org.jzy3d.plot3d.primitives.Scatter;
 import org.jzy3d.plot3d.rendering.canvas.Quality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SurfaceDisplay extends AbstractAnalysis
 {
 
+    private final static Logger LOGGER = LoggerFactory.getLogger( SurfaceDisplay.class );
     private final Surface surface;
 
     /**
@@ -89,8 +120,8 @@ public class SurfaceDisplay extends AbstractAnalysis
 
                 }
             }
-            System.out.println( System.lineSeparator() );
-            System.out.println( "Number of duplicate = " + size );
+            LOGGER.debug( System.lineSeparator() );
+            LOGGER.debug( "Number of duplicate = " + size );
             Scatter scatter = new Scatter( points, colors );
             scatter.setWidth( 1 );
             chart = AWTChartComponentFactory.chart( Quality.Advanced, "newt" );
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/CSVWriter.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/CSVWriter.java
index a8ca6e91..ac303450 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/CSVWriter.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/CSVWriter.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import org.slf4j.Logger;
@@ -21,12 +49,12 @@ public class CSVWriter
     {
         String path = "target/" +testedFileName + EXTENSION;
 
-        LOGGER.info( "CSV file name : {}", path );
+        LOGGER.debug( "CSV file name : {}", path );
         this.csvOutputFile = new File( path );
         try
         {
             bw = new BufferedWriter( new FileWriter( csvOutputFile, true ) );
-            LOGGER.info( "CSV location : " + "target/" + testedFileName + EXTENSION );
+            LOGGER.debug( "CSV location : " + "target/" + testedFileName + EXTENSION );
         }
        catch ( IOException ioException )
        {
@@ -52,6 +80,6 @@ public class CSVWriter
     public void close() throws IOException
     {
         bw.close();
-        LOGGER.info( "BF closed" );
+        LOGGER.debug( "BF closed" );
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/DistanceImageWriter.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/DistanceImageWriter.java
index d5095dea..3d458fae 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/DistanceImageWriter.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/DistanceImageWriter.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import ij.ImageJ;
@@ -10,6 +38,8 @@ import net.imglib2.img.display.imagej.ImageJFunctions;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.numeric.RealType;
 import net.imglib2.type.numeric.real.FloatType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 
@@ -18,7 +48,7 @@ import static fr.pasteur.ida.zellige.steps.Utils.setPositionAndGet;
 public class DistanceImageWriter< T extends RealType< T > & NativeType< T >, R extends RealType< R > & NativeType< R > >
 {
 
-
+    private final static Logger LOGGER = LoggerFactory.getLogger( DistanceImageWriter.class );
     private final RandomAccessibleInterval< T > groundTruth;
     private final RandomAccessibleInterval< R > projection;
     private final String fileName;
@@ -88,7 +118,7 @@ public class DistanceImageWriter< T extends RealType< T > & NativeType< T >, R e
             }
         }
         double RMSE = Math.sqrt( mse / count );
-        System.out.println( "RMSE =" + RMSE );
+        LOGGER.debug( "RMSE = {}", RMSE );
         writer.close();
 
     }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/GroundTruthConversion.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/GroundTruthConversion.java
index c69547ae..510c1ada 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/GroundTruthConversion.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/GroundTruthConversion.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import ij.ImageJ;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/ParameterSweepFiles.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/ParameterSweepFiles.java
index 82962934..9d5fab1b 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/ParameterSweepFiles.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/ParameterSweepFiles.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import io.scif.img.IO;
@@ -5,11 +33,14 @@ import io.scif.img.SCIFIOImgPlus;
 import net.imglib2.img.Img;
 import net.imglib2.type.NativeType;
 import net.imglib2.type.numeric.RealType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 
 public class ParameterSweepFiles< T extends RealType< T > & NativeType< T >, R extends RealType< R > & NativeType< R > >
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( ParameterSweepFiles.class );
     private final ArrayList< Img< T > > refs;
     private final Img< R > tested;
     private final String path;
@@ -20,7 +51,7 @@ public class ParameterSweepFiles< T extends RealType< T > & NativeType< T >, R e
         this.refs = new ArrayList<>();
         for ( String path : refImagePath )
         {
-            System.out.println( path );
+            LOGGER.debug( path );
             SCIFIOImgPlus< ? > refImgPlus = IO.openImgs( path ).get( 0 );
             refs.add( ( Img< T > ) refImgPlus.getImg() );
         }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/RMSEAndCoverageComputation.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/RMSEAndCoverageComputation.java
index 49a4e267..0399011f 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/RMSEAndCoverageComputation.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/RMSEAndCoverageComputation.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import fr.pasteur.ida.zellige.steps.Utils;
@@ -69,7 +97,7 @@ public class RMSEAndCoverageComputation< T extends RealType< T > & NativeType< T
                 LOGGER.error( "The reference and tested height maps have different size !" );
                 throw new DifferentReferenceTestedSizeException();
             }
-            LOGGER.info( "Starting Reconstruction Error Computation." );
+            LOGGER.debug( "Starting Reconstruction Error Computation." );
         }
         else if ( groundTruth == null )
         {
@@ -177,7 +205,7 @@ public class RMSEAndCoverageComputation< T extends RealType< T > & NativeType< T
     public static void main( String[] args ) throws NotAnHeightMapException, DifferentReferenceTestedSizeException
     {
         String pathGT = "C:\\Users\\ctrebeau\\Desktop\\Zellige analysis\\files\\Covid Zellige\\C2-MucilairB spike zo1 J4 Sars-3_Ground truth Height map.tif";
-        String pathHM = "C:\\Users\\ctrebeau\\Desktop\\Zellige analysis\\files\\Covid Zellige\\Covid_0.5_0.1_5.tif";
+        String pathHM = "C:\\Users\\ctrebeau\\Nextcloud\\Zellige\\ResultatsJYT\\C2-MucilairB_spike_zo1_J4_Sars-3_SME_ZMAP_ref1_nCH1_CF.tif";
         final SCIFIOImgPlus< ? > imgPlusRef = IO.openImgs( pathGT ).get( 0 );
         Img< FloatType > GT = ( Img< FloatType > ) imgPlusRef.getImg();
         new ImageJ();
@@ -188,8 +216,8 @@ public class RMSEAndCoverageComputation< T extends RealType< T > & NativeType< T
         ImageJFunctions.show( HM );
         RMSEAndCoverageComputation computation = new RMSEAndCoverageComputation( GT, 0, HM );
         computation.compute();
-        System.out.println( "RMSE = " + computation.RMSE );
-        System.out.println( "Coverage = " + computation.coverage );
+        LOGGER.debug( "RMSE = " + computation.RMSE );
+        LOGGER.debug( "Coverage = " + computation.coverage );
     }
 }
 
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java
index ff670809..61b7968a 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZParameters.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
@@ -7,11 +35,14 @@ import fr.pasteur.ida.zellige.steps.selection.classification.ClassificationParam
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
 import fr.pasteur.ida.zellige.steps.selection.postTreatment.PostTreatmentParameters;
 import fr.pasteur.ida.zellige.steps.selection.pretreatment.PretreatmentParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 public class ZParameters
 {
 
+    private final static Logger LOGGER = LoggerFactory.getLogger( ZParameters.class );
     private final PretreatmentParameters pretreatmentParameters;
     private final ClassificationParameters classificationParameters;
     private final PostTreatmentParameters postTreatmentParameters;
@@ -65,21 +96,21 @@ public class ZParameters
 
     public void print()
     {
-        System.out.println( "method : " + pretreatmentParameters.getMethod() );
-        System.out.println( "parameter : " + pretreatmentParameters.getParameter() );
-        System.out.println( "amplitude  : " + classificationParameters.getAmplitudeThreshold() );
-        System.out.println( "threshold  : " + classificationParameters.getOtsuThreshold() );
-        System.out.println( "connexity : " + postTreatmentParameters.getConnexity() );
-        System.out.println( "island size : " + postTreatmentParameters.getIslandSize() );
-        System.out.println( "sigmaXY : " + postTreatmentParameters.getSigmaXY() );
-        System.out.println( "sigmaZ : " + postTreatmentParameters.getSigmaZ() );
-        System.out.println( "starting os size1 : " + constructionParameters[ 0 ].getStartingSizeThreshold() );
-        System.out.println( "overlap1 :" + constructionParameters[ 0 ].getOverlap() );
-        System.out.println( "percent1  :" + constructionParameters[ 0 ].getConnexityRate() );
-        System.out.println( "starting os size2 : " + constructionParameters[ 1 ].getStartingSizeThreshold() );
-        System.out.println( "overlap2 :" + constructionParameters[ 1 ].getOverlap() );
-        System.out.println( "percent2  :" + constructionParameters[ 1 ].getConnexityRate() );
-        System.out.println( "adequacy : " + ReferenceSurfaceExtraction.getAdequacy() );
-        System.out.println( " Delta : " + projectionParameters.getDelta() );
+        LOGGER.debug( "method : " + pretreatmentParameters.getMethod() );
+        LOGGER.debug( "parameter : " + pretreatmentParameters.getParameter() );
+        LOGGER.debug( "amplitude  : " + classificationParameters.getAmplitudeThreshold() );
+        LOGGER.debug( "threshold  : " + classificationParameters.getOtsuThreshold() );
+        LOGGER.debug( "connexity : " + postTreatmentParameters.getConnexity() );
+        LOGGER.debug( "island size : " + postTreatmentParameters.getIslandSize() );
+        LOGGER.debug( "sigmaXY : " + postTreatmentParameters.getSigmaXY() );
+        LOGGER.debug( "sigmaZ : " + postTreatmentParameters.getSigmaZ() );
+        LOGGER.debug( "starting os size1 : " + constructionParameters[ 0 ].getStartingSizeThreshold() );
+        LOGGER.debug( "overlap1 :" + constructionParameters[ 0 ].getOverlap() );
+        LOGGER.debug( "percent1  :" + constructionParameters[ 0 ].getConnexityRate() );
+        LOGGER.debug( "starting os size2 : " + constructionParameters[ 1 ].getStartingSizeThreshold() );
+        LOGGER.debug( "overlap2 :" + constructionParameters[ 1 ].getOverlap() );
+        LOGGER.debug( "percent2  :" + constructionParameters[ 1 ].getConnexityRate() );
+        LOGGER.debug( "adequacy : " + ReferenceSurfaceExtraction.getAdequacy() );
+        LOGGER.debug( " Delta : " + projectionParameters.getDelta() );
     }
 }
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZelligePipelineAnalyse.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZelligePipelineAnalyse.java
index 3bf7ba8f..96700df0 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/ZelligePipelineAnalyse.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/ZelligePipelineAnalyse.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test;
 
 import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/DifferentReferenceTestedSizeException.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/DifferentReferenceTestedSizeException.java
index 61bb77e9..c92c97df 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/DifferentReferenceTestedSizeException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/DifferentReferenceTestedSizeException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test.exception;
 
 public class DifferentReferenceTestedSizeException extends Exception
diff --git a/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/NotAnHeightMapException.java b/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/NotAnHeightMapException.java
index 3b260934..01895380 100644
--- a/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/NotAnHeightMapException.java
+++ b/src/main/java/fr/pasteur/ida/zellige/utils/test/exception/NotAnHeightMapException.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils.test.exception;
 
 public class NotAnHeightMapException extends Exception
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
index 8fbf673e..5e765d98 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Construction.fxml
@@ -1,100 +1,86 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import fr.pasteur.ida.zellige.gui.*?>
+<?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.*?>
-<StepPanel xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-           minWidth="-Infinity" name="Construction" prefHeight="342.0" prefWidth="390.0"
-           xmlns="http://javafx.com/javafx/17" fx:controller="fr.pasteur.ida.zellige.gui.ConstructionController">
+<StepPanel xmlns:fx="http://javafx.com/fxml" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+           minHeight="-Infinity" minWidth="-Infinity" name="Construction" prefHeight="369.0" prefWidth="405.0"
+           stylesheets="@theme2.css" xmlns="http://javafx.com/javafx"
+           fx:controller="fr.pasteur.ida.zellige.gui.ConstructionController">
     <children>
-        <GridPane alignment="CENTER" minWidth="-Infinity" prefHeight="307.0" prefWidth="390.0" vgap="15.0">
+        <GridPane alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                  minWidth="-Infinity" prefHeight="333.0" prefWidth="405.0" vgap="15.0">
             <columnConstraints>
                 <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="10.0"
-                                   prefWidth="44.0"/>
-                <ColumnConstraints hgrow="SOMETIMES" maxWidth="469.599951171875" minWidth="10.0"
-                                   prefWidth="346.40001220703124"/>
+                                   prefWidth="20.0"/>
+                <ColumnConstraints hgrow="SOMETIMES" maxWidth="1.7976931348623157E308" minWidth="10.0"
+                                   prefWidth="375.79997749328606"/>
             </columnConstraints>
             <rowConstraints>
-                <RowConstraints maxHeight="170.9999984741211" minHeight="10.0" prefHeight="128.0" valignment="CENTER"
+                <RowConstraints maxHeight="170.9999984741211" minHeight="10.0" prefHeight="123.4" valignment="CENTER"
                                 vgrow="SOMETIMES"/>
-                <RowConstraints maxHeight="218.9999755859375" minHeight="10.0" prefHeight="128.0" vgrow="SOMETIMES"/>
-                <RowConstraints maxHeight="110.00003662109378" minHeight="10.0" prefHeight="70.39997253417965"
+                <RowConstraints maxHeight="218.9999755859375" minHeight="10.0" prefHeight="123.19999694824222"
+                                vgrow="SOMETIMES"/>
+                <RowConstraints maxHeight="110.00003662109378" minHeight="10.0" prefHeight="45.20000305175779"
                                 vgrow="SOMETIMES"/>
             </rowConstraints>
-            <children>
-                <VBox alignment="CENTER" GridPane.columnIndex="1">
-                    <children>
-                        <GridPane alignment="CENTER" prefHeight="147.0" prefWidth="599.0">
-                            <columnConstraints>
-                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
-                            </columnConstraints>
-                            <rowConstraints>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                            </rowConstraints>
-                            <children>
-                                <ParameterSliderDouble fx:id="st1" alignment="CENTER" default="0.7" increment="0.1"
-                                                       interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
-                                                       name="Starting threshold"/>
-                                <ParameterSliderDouble fx:id="c1" alignment="CENTER" default="0.8" increment="0.1"
-                                                       interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
-                                                       name="Connexity" GridPane.rowIndex="1"/>
-                                <ParameterSliderInteger fx:id="r1" default="5" increment="0.1" interval="%INTERVAL1"
-                                                        major="10" max="50" min="0" minor="4" name="Overlap"
-                                                        GridPane.rowIndex="2"/>
-                            </children>
-                        </GridPane>
-                    </children>
-                </VBox>
-                <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1"
-                      GridPane.rowIndex="1">
-                    <children>
-                        <GridPane prefHeight="147.0" prefWidth="599.0">
-                            <columnConstraints>
-                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
-                            </columnConstraints>
-                            <rowConstraints>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                            </rowConstraints>
-                            <children>
-                                <ParameterSliderDouble fx:id="st2" default="0.7" increment="0.1" interval="%INTERVAL3"
-                                                       major="0.2" max="1" min="0" minor="1" name="Starting threshold"/>
-                                <ParameterSliderDouble fx:id="c2" default="0.8" increment="0.1" interval="%INTERVAL3"
-                                                       major="0.2" max="1" min="0" minor="1" name="Connexity"
-                                                       GridPane.rowIndex="1"/>
-                                <ParameterSliderInteger fx:id="r2" default="5" increment="0.1" interval="%INTERVAL1"
-                                                        major="10" max="50" min="0" minor="1" name="Overlap"
-                                                        GridPane.rowIndex="2"/>
-                            </children>
-                        </GridPane>
-                    </children>
-                </VBox>
-                <VBox alignment="CENTER" prefHeight="36.0" prefWidth="340.0" GridPane.columnIndex="1"
-                      GridPane.rowIndex="2">
-                    <children>
-                        <GridPane>
-                            <columnConstraints>
-                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0"/>
-                            </columnConstraints>
-                            <rowConstraints>
-                                <RowConstraints minHeight="10.0" vgrow="SOMETIMES"/>
-                            </rowConstraints>
-                            <children>
-                                <ParameterSliderDouble fx:id="surfaceSize" default="0.7" increment="0.05"
-                                                       interval="%INTERVAL3" major="0.2" max="1" min="0" minor="4"
-                                                       name="Surface min size"/>
-                            </children>
-                        </GridPane>
-                    </children>
-                </VBox>
-                <Label alignment="CENTER" minWidth="-Infinity" prefHeight="14.0" prefWidth="100.0" rotate="-90.0"
-                       text="FIRST ROUND"/>
-                <Label alignment="CENTER" minWidth="-Infinity" prefWidth="100.0" rotate="-90.0" text="SECOND ROUND"
-                       GridPane.rowIndex="1"/>
-            </children>
+
+            <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                  prefHeight="137.0" prefWidth="379.0" GridPane.columnIndex="1">
+                <children>
+                    <ParameterSliderDouble fx:id="c1" alignment="CENTER" default="0.8" increment="0.1"
+                                           interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
+                                           name="Connexity"/>
+                    <ParameterSliderDouble fx:id="st1" alignment="CENTER" default="0.7" increment="0.1"
+                                           interval="%INTERVAL3" major="0.2" max="1" min="0" minor="1"
+                                           name="Starting threshold"/>
+                    <ParameterSliderInteger fx:id="r1" default="5" increment="0.1" interval="%INTERVAL1" major="10"
+                                            max="50" min="0" minHeight="-Infinity" minWidth="-Infinity" minor="4"
+                                            name="Overlap" prefHeight="27.0" prefWidth="382.0" VBox.vgrow="ALWAYS"/>
+                </children>
+            </VBox>
+            <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                  prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
+                <children>
+                    <GridPane prefHeight="147.0" prefWidth="599.0">
+                        <columnConstraints>
+                            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
+                        </columnConstraints>
+                        <rowConstraints>
+                            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
+                            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
+                            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
+                        </rowConstraints>
+                        <children>
+                            <ParameterSliderDouble fx:id="st2" default="0.7" increment="0.1" interval="%INTERVAL3"
+                                                   major="0.2" max="1" min="0" minor="1" name="Starting threshold"/>
+                            <ParameterSliderDouble fx:id="c2" default="0.8" increment="0.1" interval="%INTERVAL3"
+                                                   major="0.2" max="1" min="0" minor="1" name="Connexity"
+                                                   GridPane.rowIndex="1"/>
+                            <ParameterSliderInteger fx:id="r2" default="5" increment="0.1" interval="%INTERVAL1"
+                                                    major="10" max="50" min="0" minor="1" name="Overlap"
+                                                    GridPane.rowIndex="2"/>
+                        </children>
+                    </GridPane>
+                </children>
+            </VBox>
+            <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                  prefHeight="36.0" prefWidth="340.0" GridPane.columnIndex="1" GridPane.hgrow="ALWAYS"
+                  GridPane.rowIndex="2" GridPane.vgrow="ALWAYS">
+
+                <ParameterSliderDouble fx:id="surfaceSize" default="0.7" increment="0.05" interval="%INTERVAL3"
+                                       major="0.2" max="1" min="0" minor="4" name="Surface min size"/>
+
+            </VBox>
+            <Label alignment="CENTER" minWidth="-Infinity" prefHeight="14.0" prefWidth="100.0" rotate="-90.0"
+                   text="FIRST ROUND"/>
+            <Label alignment="CENTER" minWidth="-Infinity" prefWidth="100.0" rotate="-90.0" text="SECOND ROUND"
+                   GridPane.rowIndex="1"/>
+            <padding>
+                <Insets left="5.0" top="10.0"/>
+            </padding>
+
         </GridPane>
     </children>
 </StepPanel>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Display.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Display.fxml
index d0c7e15b..6daef4a3 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Display.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Display.fxml
@@ -1,21 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<?import fr.pasteur.ida.zellige.gui.*?>
 <?import javafx.geometry.Insets?>
-<?import javafx.scene.control.*?>
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.*?>
 <?import java.lang.String?>
-<BorderPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/17">
+<BorderPane xmlns:fx="http://javafx.com/fxml" xmlns="http://javafx.com/javafx">
     <center>
         <VBox alignment="CENTER_LEFT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
               minWidth="-Infinity" prefHeight="186.0" prefWidth="286.0" spacing="10.0"
               BorderPane.alignment="CENTER_RIGHT">
             <children>
-                <CheckBox fx:id="projection" mnemonicParsing="false" text="2D selectedPixels projection"/>
-                <CheckBox fx:id="heightmap" mnemonicParsing="false" text="Height map"/>
-                <CheckBox fx:id="extractedSurface" mnemonicParsing="false" text="3D extracted selectedPixels"/>
-                <CheckBox fx:id="heightMapStack" mnemonicParsing="false" text="Height map stack(± delta)"/>
-                <CheckBox fx:id="heightMapStackMask" mnemonicParsing="false"
-                          text="Height map sub-volume mask (± delta)"/>
+                <CheckBoxDisplay fx:id="projection" mnemonicParsing="false" text="2D selectedPixels projection"/>
+                <CheckBoxDisplay fx:id="heightmap" mnemonicParsing="false" text="Height map"/>
+                <CheckBoxDisplay fx:id="extractedSurface" mnemonicParsing="false" text="3D extracted selectedPixels"/>
+                <CheckBoxDisplay fx:id="heightMapStack" mnemonicParsing="false" text="Height map stack(± delta)"/>
+                <CheckBoxDisplay fx:id="heightMapStackMask" mnemonicParsing="false"
+                                 text="Height map sub-volume mask (± delta)"/>
             </children>
             <padding>
                 <Insets left="40.0" top="5.0"/>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
index d558902c..564444e3 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Main.fxml
@@ -5,41 +5,39 @@
 <?import javafx.scene.control.ComboBox?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.*?>
-<AnchorPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="764.0" prefWidth="826.0" xmlns="http://javafx.com/javafx/17"
-            fx:controller="fr.pasteur.ida.zellige.gui.MainController">
-    <children>
-        <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="751.0"
-              prefWidth="816.0" spacing="7.0" AnchorPane.bottomAnchor="3.0" AnchorPane.topAnchor="0.0">
-            <children>
-                <HBox prefHeight="26.0" prefWidth="774.0" spacing="8.0">
-                    <children>
-                        <Label text="File : "/>
-                        <ComboBox fx:id="activeDataset" maxWidth="-Infinity" minWidth="-Infinity" prefHeight="26.0"
-                                  prefWidth="262.0"/>
-                    </children>
-                    <padding>
-                        <Insets left="10.0"/>
-                    </padding>
-                </HBox>
-                <fx:include fx:id="selection" source="Selection.fxml"/>
-                <HBox alignment="CENTER_LEFT" prefHeight="319.0" prefWidth="600.0" spacing="20.0">
-                    <children>
-                        <fx:include fx:id="construction" source="Construction.fxml"/>
-                        <fx:include fx:id="projection" source="Projection.fxml"/>
-                    </children>
-                </HBox>
-                <StackPane prefHeight="51.0" prefWidth="747.0">
-                    <children>
-                        <Button fx:id="runButton" mnemonicParsing="false" text="Run Zellige !"/>
-                    </children>
-                </StackPane>
-            </children>
-            <padding>
-                <Insets left="10.0" top="5.0"/>
-            </padding>
-        </VBox>
-    </children>
+<VBox xmlns:fx="http://javafx.com/fxml" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+      minHeight="-Infinity" minWidth="-Infinity" prefHeight="786.0" prefWidth="866.0" spacing="5.0"
+      stylesheets="@theme2.css" xmlns="http://javafx.com/javafx"
+      fx:controller="fr.pasteur.ida.zellige.gui.MainController">
     <padding>
-        <Insets left="10.0"/>
+        <Insets left="10.0" right="10.0" top="5.0"/>
     </padding>
-</AnchorPane>
+    <HBox prefHeight="26.0" prefWidth="774.0" spacing="5.0" VBox.vgrow="ALWAYS">
+        <padding>
+            <Insets left="10.0"/>
+        </padding>
+        <Label text="File : "/>
+        <ComboBox fx:id="activeDatasets" minHeight="-Infinity" minWidth="-Infinity" prefHeight="26.0"
+                  prefWidth="262.0"/>
+    </HBox>
+    <fx:include fx:id="selection" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                minHeight="-Infinity" minWidth="-Infinity" source="Selection.fxml" VBox.vgrow="ALWAYS"/>
+    <HBox alignment="CENTER_LEFT" prefHeight="319.0" prefWidth="700.0" spacing="5.0">
+        <fx:include fx:id="construction" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                    minHeight="-Infinity" minWidth="-Infinity" source="Construction.fxml" HBox.hgrow="ALWAYS"/>
+        <fx:include fx:id="projection" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                    minHeight="-Infinity" minWidth="-Infinity" source="Projection.fxml" HBox.hgrow="ALWAYS"/>
+    </HBox>
+    <StackPane prefHeight="51.0" prefWidth="747.0" VBox.vgrow="ALWAYS">
+        <BorderPane prefHeight="27.0" prefWidth="846.0">
+            <left>
+                <Label fx:id="logInfo" alignment="CENTER" prefHeight="32.0" prefWidth="418.0"
+                       BorderPane.alignment="CENTER"/>
+            </left>
+            <center>
+                <Button fx:id="runButton" mnemonicParsing="false" text="Run Zellige !"
+                        BorderPane.alignment="TOP_CENTER"/>
+            </center>
+        </BorderPane>
+    </StackPane>
+</VBox>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/ParameterSlider.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/ParameterSlider.fxml
index eeda355b..b02a045b 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/ParameterSlider.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/ParameterSlider.fxml
@@ -7,29 +7,31 @@
 <?import javafx.scene.control.Slider?>
 <?import javafx.scene.control.TextField?>
 <?import javafx.scene.layout.*?>
-<fx:root xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-         minWidth="-Infinity" prefHeight="41.0" prefWidth="338.0" styleClass="parameter" stylesheets="@theme2.css"
-         type="GridPane" xmlns="http://javafx.com/javafx/17">
+<fx:root xmlns:fx="http://javafx.com/fxml" alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity"
+         prefHeight="43.0" prefWidth="365.0" styleClass="parameter" stylesheets="@theme2.css" type="GridPane"
+         xmlns="http://javafx.com/javafx">
     <columnConstraints>
-        <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="130.1999755859375" minWidth="10.0"
-                           prefWidth="56.79996337890625"/>
-        <ColumnConstraints hgrow="ALWAYS" maxWidth="415.5999755859375" minWidth="10.0" prefWidth="251.20003662109374"/>
-        <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="242.79998779296875" minWidth="10.0"
-                           prefWidth="36.20002441406251"/>
+        <ColumnConstraints halignment="CENTER" hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity"
+                           prefWidth="70.0"/>
+        <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" minWidth="-Infinity" prefWidth="250.0"/>
+        <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="48.80000000000001" minWidth="-Infinity"
+                           prefWidth="48.80000000000001"/>
     </columnConstraints>
     <rowConstraints>
         <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
     </rowConstraints>
 
-    <Label fx:id="label" alignment="CENTER_RIGHT" prefHeight="35.0" prefWidth="71.0" text="Parameter Name"
-           textAlignment="RIGHT" wrapText="true" GridPane.halignment="RIGHT" GridPane.valignment="CENTER"/>
-    <Slider fx:id="slider" stylesheets="@theme2.css" GridPane.columnIndex="1" GridPane.valignment="BOTTOM">
+    <Label fx:id="label" alignment="CENTER_RIGHT" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
+           minWidth="-Infinity" prefHeight="35.0" prefWidth="65.0" text="Parameter Name" textAlignment="RIGHT"
+           wrapText="true" GridPane.halignment="RIGHT" GridPane.hgrow="NEVER" GridPane.valignment="CENTER"
+           GridPane.vgrow="NEVER"/>
+    <Slider fx:id="slider" stylesheets="@theme2.css" GridPane.columnIndex="1" GridPane.valignment="CENTER">
         <padding>
             <Insets left="5.0" right="5.0"/>
         </padding>
     </Slider>
-    <TextField fx:id="textField" alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-               minWidth="-Infinity" prefHeight="26.0" prefWidth="30.0" GridPane.columnIndex="2"
-               GridPane.halignment="CENTER" GridPane.valignment="CENTER"/>
+    <TextField fx:id="textField" alignment="CENTER" maxHeight="26.0" maxWidth="40.0" minHeight="-Infinity"
+               minWidth="-Infinity" prefHeight="26.0" prefWidth="30.0" stylesheets="@theme2.css"
+               GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.valignment="CENTER"/>
 
 </fx:root>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Projection.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Projection.fxml
index 2c8d1d4c..f96f29fd 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Projection.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Projection.fxml
@@ -1,15 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import fr.pasteur.ida.zellige.gui.StepPanel?>
+<?import fr.pasteur.ida.zellige.gui.*?>
 <?import javafx.geometry.*?>
 <?import javafx.scene.control.*?>
 <?import javafx.scene.layout.*?>
-<StepPanel xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-           minWidth="-Infinity" name="Projection" prefHeight="342.0" prefWidth="390.0"
-           xmlns="http://javafx.com/javafx/17" fx:controller="fr.pasteur.ida.zellige.gui.ProjectionController">
+<StepPanel xmlns:fx="http://javafx.com/fxml" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+           minHeight="-Infinity" minWidth="-Infinity" name="Projection" prefHeight="342.0" prefWidth="400.0"
+           stylesheets="@theme2.css" xmlns="http://javafx.com/javafx"
+           fx:controller="fr.pasteur.ida.zellige.gui.ProjectionController">
     <children>
-        <VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" prefHeight="312.0"
-              prefWidth="389.0">
+        <VBox alignment="CENTER" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+              minHeight="-Infinity" prefHeight="312.0" prefWidth="389.0">
             <children>
                 <StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" prefHeight="313.0"
                            prefWidth="362.0">
@@ -20,28 +21,36 @@
                                 <Insets/>
                             </opaqueInsets>
                             <center>
-                                <HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-                                      minWidth="-Infinity" prefHeight="61.0" prefWidth="342.0"
-                                      BorderPane.alignment="CENTER">
-                                    <children>
-                                        <VBox alignment="CENTER" prefHeight="108.0" prefWidth="220.0" spacing="5.0">
+                                <BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                                            minHeight="-Infinity" minWidth="-Infinity" prefHeight="94.0"
+                                            prefWidth="365.0" BorderPane.alignment="CENTER">
+                                    <left>
+                                        <VBox alignment="CENTER" maxHeight="1.7976931348623157E308"
+                                              maxWidth="1.7976931348623157E308" minHeight="-Infinity"
+                                              minWidth="-Infinity" prefHeight="108.0" prefWidth="202.0" spacing="5.0"
+                                              BorderPane.alignment="CENTER">
                                             <children>
                                                 <Label contentDisplay="CENTER" text="Method"/>
-                                                <ComboBox fx:id="methodComboBox" prefWidth="150.0"/>
+                                                <ComboBox fx:id="methodComboBox" maxHeight="-Infinity"
+                                                          maxWidth="-Infinity" prefHeight="26.0" prefWidth="150.0"/>
                                             </children>
                                         </VBox>
-                                        <VBox alignment="CENTER" prefHeight="108.0" prefWidth="216.0" spacing="5.0">
+                                    </left>
+                                    <right>
+                                        <VBox alignment="CENTER" prefHeight="94.0" prefWidth="167.0" spacing="5.0"
+                                              BorderPane.alignment="CENTER">
                                             <children>
                                                 <Label text="Delta Z"/>
-                                                <Spinner fx:id="deltaSpinner" prefHeight="27.0" prefWidth="119.0"/>
+                                                <Spinner fx:id="delta1" maxHeight="-Infinity" maxWidth="-Infinity"
+                                                         prefHeight="27.0" prefWidth="119.0"/>
                                             </children>
                                         </VBox>
-                                    </children>
-                                </HBox>
+                                    </right>
+                                </BorderPane>
                             </center>
                             <bottom>
                                 <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-                                            minWidth="-Infinity" prefHeight="222.0" prefWidth="342.0"
+                                            minWidth="-Infinity" prefHeight="222.0" prefWidth="298.0"
                                             BorderPane.alignment="CENTER">
                                     <top>
                                         <Label alignment="TOP_LEFT" styleClass="step-title" text="Output display"
@@ -59,20 +68,20 @@
                                               minHeight="-Infinity" minWidth="-Infinity" prefHeight="201.0"
                                               prefWidth="286.0" spacing="10.0" BorderPane.alignment="CENTER">
                                             <children>
-                                                <CheckBox fx:id="projection" mnemonicParsing="false" selected="true"
-                                                          text="2D selectedPixels projection"/>
-                                                <CheckBox fx:id="rawHeightMap" mnemonicParsing="false" selected="true"
-                                                          text="Raw height map"/>
-                                                <CheckBox fx:id="extractedHeightMap" mnemonicParsing="false"
-                                                          text="Extracted height map"/>
-                                                <CheckBox fx:id="segmentedSurface" mnemonicParsing="false"
-                                                          text="3D extracted selectedPixels"/>
-                                                <CheckBox fx:id="reduced3DSpace" mnemonicParsing="false"
-                                                          text="Height map stack(± delta)"/>
+                                                <CheckBoxDisplay fx:id="projection" mnemonicParsing="false"
+                                                                 selected="true" text="2D selectedPixels projection"/>
+                                                <CheckBoxDisplay fx:id="rawHeightMap" mnemonicParsing="false"
+                                                                 selected="true" text="Raw height map"/>
+                                                <CheckBoxDisplay fx:id="extractedHeightMap" mnemonicParsing="false"
+                                                                 text="Extracted height map"/>
+                                                <CheckBoxDisplay fx:id="segmentedSurface" mnemonicParsing="false"
+                                                                 text="3D extracted selectedPixels"/>
+                                                <CheckBoxDisplay fx:id="reduced3DSpace" mnemonicParsing="false"
+                                                                 text="Height map stack(± delta)"/>
                                                 <HBox prefHeight="26.0" prefWidth="194.0" spacing="30.0">
                                                     <children>
-                                                        <CheckBox fx:id="segmentedSurfaceMask" mnemonicParsing="false"
-                                                                  text="Surface mask"/>
+                                                        <CheckBoxDisplay fx:id="segmentedSurfaceMask"
+                                                                         mnemonicParsing="false" text="Surface mask"/>
                                                         <Spinner fx:id="delta2" prefHeight="26.0" prefWidth="65.0"/>
                                                     </children>
                                                 </HBox>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
index efcc3e81..1eb97384 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/Selection.fxml
@@ -4,109 +4,66 @@
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Label?>
 <?import javafx.scene.layout.*?>
-<StepPanel xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-           minWidth="-Infinity" name="Selection" prefHeight="327.0" prefWidth="800.0"
-           xmlns="http://javafx.com/javafx/17" fx:controller="fr.pasteur.ida.zellige.gui.SelectionController">
+<StepPanel xmlns:fx="http://javafx.com/fxml" fillWidth="true" maxHeight="-Infinity" maxWidth="-Infinity"
+           minHeight="-Infinity" minWidth="-Infinity" name="Selection" prefHeight="336.0" prefWidth="815.0"
+           spacing="5.0" stylesheets="@theme2.css" xmlns="http://javafx.com/javafx"
+           fx:controller="fr.pasteur.ida.zellige.gui.SelectionController">
     <children>
-        <GridPane prefHeight="296.0" prefWidth="766.0">
-            <columnConstraints>
-                <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="10.0" prefWidth="390.0"/>
-                <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="10.0" prefWidth="390.0"/>
-            </columnConstraints>
-            <rowConstraints>
-                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-            </rowConstraints>
+        <HBox alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="293.0" prefWidth="815.0">
             <children>
-                <Pane maxHeight="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="224.0"
-                      prefWidth="390.0" GridPane.halignment="CENTER" GridPane.valignment="CENTER">
-                    <children>
-                        <GridPane alignment="CENTER" layoutX="1.0" prefHeight="223.0" prefWidth="397.0" vgap="15.0">
-                            <columnConstraints>
-                                <ColumnConstraints hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="0.0"
-                                                   prefWidth="44.0"/>
-                                <ColumnConstraints hgrow="SOMETIMES" maxWidth="542.9999614715576" minWidth="10.0"
-                                                   prefWidth="353.5999816894531"/>
-                            </columnConstraints>
-                            <rowConstraints>
-                                <RowConstraints maxHeight="203.59998168945313" minHeight="10.0"
-                                                prefHeight="150.40000610351564" vgrow="SOMETIMES"/>
-                                <RowConstraints maxHeight="187.99998779296874" minHeight="10.0"
-                                                prefHeight="114.39999389648438" vgrow="SOMETIMES"/>
-                            </rowConstraints>
-                            <children>
-                                <VBox alignment="CENTER" prefHeight="148.0" prefWidth="352.0" GridPane.columnIndex="1"
-                                      GridPane.halignment="CENTER" GridPane.valignment="CENTER">
-                                    <children>
-                                        <GridPane prefHeight="165.0" prefWidth="370.0">
-                                            <columnConstraints>
-                                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
-                                            </columnConstraints>
-                                            <rowConstraints>
-                                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                            </rowConstraints>
-                                            <children>
-                                                <ParameterSliderInteger fx:id="amplitude" default="10" increment="1"
-                                                                        interval="%INTERVAL1" major="10" max="50"
-                                                                        min="0" minor="9" name="Amplitude"/>
-                                                <ParameterSliderInteger fx:id="otsu" default="10" increment="1"
-                                                                        interval="%INTERVAL1" major="10" max="50"
-                                                                        min="0" minor="1" name="Otsu"
-                                                                        GridPane.rowIndex="1"/>
-                                                <ParameterSliderInteger fx:id="island" default="5" increment="1"
-                                                                        interval="%INTERVAL1" major="10" max="50"
-                                                                        min="0" minor="1" name="Island Search"
-                                                                        GridPane.rowIndex="2"/>
-                                            </children>
-                                        </GridPane>
-                                    </children>
-                                </VBox>
-                                <VBox alignment="CENTER" prefHeight="69.0" prefWidth="366.0" spacing="10.0"
-                                      GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="1"
-                                      GridPane.valignment="CENTER">
-                                    <children>
-                                        <GridPane alignment="CENTER" prefHeight="66.0" prefWidth="352.0">
-                                            <columnConstraints>
-                                                <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
-                                            </columnConstraints>
-                                            <rowConstraints>
-                                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES"/>
-                                            </rowConstraints>
-                                            <children>
-                                                <ParameterSliderInteger default="1" increment="1" interval="%INTERVAL2"
-                                                                        major="5" max="10" min="0" minor="4"
-                                                                        name="XY Blur" prefHeight="30.0"
-                                                                        fx:id="xyBlur"/>
-                                                <ParameterSliderInteger fx:id="zBlur" default="1" increment="1"
-                                                                        interval="%INTERVAL2" major="5" max="10" min="0"
-                                                                        minor="4" name="Z Blur " GridPane.rowIndex="1"/>
-                                            </children>
-                                        </GridPane>
-                                    </children>
-                                </VBox>
-                                <Label alignment="TOP_CENTER" minWidth="-Infinity" prefHeight="16.0" prefWidth="121.0"
-                                       rotate="-90.0" text="CLASSIFICATION" GridPane.halignment="CENTER"
-                                       GridPane.valignment="CENTER"/>
-                                <Label alignment="TOP_CENTER" minWidth="-Infinity" prefHeight="16.0" prefWidth="121.0"
-                                       rotate="-90.0" text="SMOOTHING" GridPane.halignment="CENTER"
-                                       GridPane.rowIndex="1" GridPane.valignment="CENTER"/>
-                            </children>
-                        </GridPane>
-                    </children>
-                    <GridPane.margin>
-                        <Insets top="10.0"/>
-                    </GridPane.margin>
-                </Pane>
-                <VBox prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1">
-                    <children>
-                        <FlowPane fx:id="stack" prefHeight="352.0" prefWidth="346.0"/>
-                        <ZSlicesSlider fx:id="zSlices" alignment="TOP_CENTER" maxHeight="-Infinity" maxWidth="-Infinity"
-                                       minHeight="-Infinity" minWidth="-Infinity" prefHeight="42.0" prefWidth="390.0"/>
-                    </children>
+                <GridPane alignment="CENTER" gridLinesVisible="false" maxHeight="1.7976931348623157E308"
+                          maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity"
+                          prefHeight="265.0" prefWidth="414.0" vgap="5.0" HBox.hgrow="ALWAYS">
+                    <columnConstraints>
+                        <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="130.0" minWidth="10.0"
+                                           percentWidth="5.0" prefWidth="20.0"/>
+                        <ColumnConstraints hgrow="SOMETIMES" maxWidth="235.0" minWidth="10.0" percentWidth="95.0"
+                                           prefWidth="214.0"/>
+                    </columnConstraints>
+                    <rowConstraints>
+                        <RowConstraints maxHeight="338.0" minHeight="10.0" prefHeight="205.0" vgrow="SOMETIMES"/>
+                        <RowConstraints maxHeight="446.0" minHeight="10.0" prefHeight="121.0" valignment="CENTER"
+                                        vgrow="SOMETIMES"/>
+                    </rowConstraints>
+
+                    <Label alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="16.0"
+                           prefWidth="100.0" rotate="-90.0" text="CLASSIFICATION" GridPane.halignment="CENTER"
+                           GridPane.valignment="CENTER"/>
+                    <Label alignment="CENTER" minHeight="-Infinity" minWidth="-Infinity" prefHeight="16.0"
+                           prefWidth="100.0" rotate="-90.0" text="SMOOTHING" GridPane.halignment="CENTER"
+                           GridPane.rowIndex="1" GridPane.valignment="CENTER"/>
+                    <VBox alignment="CENTER" prefHeight="168.0" prefWidth="400.0" GridPane.columnIndex="1"
+                          GridPane.halignment="CENTER" GridPane.valignment="CENTER">
+                        <ParameterSliderInteger fx:id="amplitude" default="10" increment="1" interval="%INTERVAL1"
+                                                major="10" max="50" min="0" minor="9" name="Amplitude"/>
+                        <ParameterSliderInteger fx:id="otsu" default="10" increment="1" interval="%INTERVAL1" major="10"
+                                                max="50" min="0" minor="1" name="Otsu" GridPane.rowIndex="1"/>
+                        <ParameterSliderInteger fx:id="island" default="5" increment="1" interval="%INTERVAL1"
+                                                major="10" max="50" min="0" minor="1" name="Island Search"
+                                                GridPane.rowIndex="2"/>
+                    </VBox>
+                    <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="1"
+                          GridPane.rowIndex="1">
+                        <ParameterSliderInteger default="1" increment="1" interval="%INTERVAL2" major="5" max="10"
+                                                min="0" minor="4" name="XY Blur " GridPane.rowIndex="1" fx:id="xyBlur"/>
+                        <ParameterSliderInteger fx:id="zBlur" default="2" increment="1" interval="%INTERVAL2" major="5"
+                                                max="10" min="0" minor="4" name="Z Blur " GridPane.rowIndex="1"/>
+                    </VBox>
+
+                    <padding>
+                        <Insets left="5.0" right="5.0" top="5.0"/>
+                    </padding>
+                </GridPane>
+                <VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity"
+                      minWidth="-Infinity" prefHeight="293.0" prefWidth="386.0" HBox.hgrow="ALWAYS">
+                    <FlowPane fx:id="stack" alignment="CENTER" columnHalignment="CENTER" prefHeight="254.0"
+                              prefWidth="401.0" VBox.vgrow="NEVER"/>
+                    <ZSlicesSlider fx:id="zSlices" alignment="CENTER" columnHalignment="CENTER"
+                                   maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+                                   minHeight="-Infinity" minWidth="-Infinity" prefHeight="30.0" prefWidth="401.0"
+                                   VBox.vgrow="ALWAYS"/>
                 </VBox>
             </children>
-        </GridPane>
+        </HBox>
     </children>
 </StepPanel>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/StepPanel.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/StepPanel.fxml
index a4e1cd37..12605455 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/StepPanel.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/StepPanel.fxml
@@ -5,18 +5,18 @@
 <?import javafx.scene.control.Separator?>
 <?import javafx.scene.layout.VBox?>
 <?import java.lang.String?>
-<fx:root xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
-         minWidth="-Infinity" prefHeight="303.0" prefWidth="600.0" stylesheets="@theme2.css" type="VBox"
-         xmlns="http://javafx.com/javafx/17">
+<fx:root xmlns:fx="http://javafx.com/fxml" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"
+         minHeight="-Infinity" minWidth="-Infinity" prefHeight="303.0" prefWidth="322.0" stylesheets="@theme2.css"
+         type="VBox" xmlns="http://javafx.com/javafx">
     <children>
-        <Label fx:id="Label2" alignment="CENTER_RIGHT" contentDisplay="RIGHT" prefHeight="7.0" prefWidth="131.0"
-               stylesheets="@theme2.css">
+        <Label fx:id="Label2" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" maxWidth="-Infinity"
+               minHeight="-Infinity" minWidth="-Infinity" prefHeight="24.0" prefWidth="131.0" stylesheets="@theme2.css">
             <styleClass>
                 <String fx:value="step"/>
                 <String fx:value="label"/>
             </styleClass>
         </Label>
-        <Separator prefWidth="200.0">
+        <Separator maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefWidth="200.0">
             <VBox.margin>
                 <Insets left="5.0" right="10.0"/>
             </VBox.margin>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/ZSlicesSlider.fxml b/src/main/resources/fr.pasteur.ida.zellige.gui.view/ZSlicesSlider.fxml
index bd3b7250..7207d188 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/ZSlicesSlider.fxml
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/ZSlicesSlider.fxml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-
 <?import javafx.scene.control.Slider?>
 <?import javafx.scene.layout.FlowPane?>
-<fx:root xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" columnHalignment="CENTER" prefHeight="47.0"
-         prefWidth="400.0" stylesheets="@theme2.css" type="FlowPane" xmlns="http://javafx.com/javafx/17">
+<fx:root xmlns:fx="http://javafx.com/fxml" alignment="CENTER" columnHalignment="CENTER" prefHeight="47.0"
+         prefWidth="400.0" stylesheets="@theme2.css" type="FlowPane" xmlns="http://javafx.com/javafx">
     <children>
-        <Slider fx:id="slider" prefHeight="14.0" prefWidth="400.0" visible="false"/>
+        <Slider fx:id="slider" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="14.0"
+                prefWidth="400.0" visible="false"/>
     </children>
 </fx:root>
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme1.css b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme1.css
index e84320af..f2bf5f5d 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme1.css
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme1.css
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 .background {
     -fx-background-color: #733785;
 }
@@ -37,4 +65,4 @@
 
 .spinner {
     -fx-font: 10px System;
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
index b768c11e..039321b6 100644
--- a/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
+++ b/src/main/resources/fr.pasteur.ida.zellige.gui.view/theme2.css
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 
 .root {
     -fx-base: #ececec;
@@ -45,7 +73,7 @@ parameter-slider-integer.label {
 
 .label {
     -fx-text-fill: #252526;
-    -fx-font-size: 0.9em;
+    -fx-font-size: 0.7em;
     -fx-font-weight: normal;
 }
 
@@ -113,6 +141,7 @@ parameter-slider-integer.label {
     -fx-text-fill: #252526;
     -fx-font-size: 0.8em;
     -fx-font-weight: normal;
+    -fx-alignment: center;
 }
 
 .text-input:error {
@@ -149,4 +178,4 @@ parameter-slider-integer.label {
 .step.vbox {
     -fx-border-radius: 0.5em 2em 0.5em 0.5em;
     -fx-border-color: lightgrey;
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/gui.properties b/src/main/resources/gui.properties
index d2b3367b..b559d6b7 100644
--- a/src/main/resources/gui.properties
+++ b/src/main/resources/gui.properties
@@ -1,7 +1,35 @@
+###
+# #%L
+# Zellige
+# %%
+# Copyright (C) 2020 - 2022 Institut Pasteur
+# %%
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# 
+# 1. Redistributions of source code must retain the above copyright notice,
+#    this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+# #L%
+###
 #[0-50]
 INTERVAL1=[0-9]|[1-4][0-9]|[5][0]
 #[0-10]
 INTERVAL2=[0-9]|[1][0]
 #[0.0 - 1.0]
 INTERVAL3=0?\\.[0-9]|[1]\\.[0]?|[0]|[1]
-#
\ No newline at end of file
+#
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 00000000..5f1c55a5
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,48 @@
+<!--
+  #%L
+  Zellige
+  %%
+  Copyright (C) 2020 - 2022 Institut Pasteur
+  %%
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+  
+  1. Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the following disclaimer in the documentation
+     and/or other materials provided with the distribution.
+  
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+  #L%
+  -->
+<configuration>
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are assigned the type
+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-2level %logger{20} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="info" class="fr.pasteur.ida.zellige.gui.LogAppender">
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-2level %logger{36} - %msg%n</pattern>
+        </encoder>
+    </appender>
+    <root level="debug">
+        <appender-ref ref="info"/>
+        <appender-ref ref="STDOUT"/>
+    </root>
+</configuration>
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/DoubleParameterSweep.java b/src/test/java/fr/pasteur/ida/zellige/behavior/DoubleParameterSweep.java
index f09d3619..dba9cef9 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/DoubleParameterSweep.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/DoubleParameterSweep.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 //package fr.pasteur.ida.zellige.behavior;
 //
 //import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/OneSurfaceConstructionTest.java b/src/test/java/fr/pasteur/ida/zellige/behavior/OneSurfaceConstructionTest.java
index e50563fa..b076b1a9 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/OneSurfaceConstructionTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/OneSurfaceConstructionTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 class OneSurfaceConstructionTest
@@ -5,4 +33,4 @@ class OneSurfaceConstructionTest
 
 
 
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java
index 71c61933..622deaee 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweep.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
@@ -34,7 +62,7 @@ public class ParameterSweep< T extends RealType< T > & NativeType< T >, R extend
     static ArrayList< Img > ref;
     static Img tested;
     private final int delta = 0;
-    private double surfaceMinSizeFactor = 0.05;
+    private final double surfaceMinSizeFactor = 0.05;
     private static final int MIN_TIMEOUT = 200;
     public String[] errorLine =
             new String[]{
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCochlee2.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCochlee2.java
index b8f285c4..833947d9 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCochlee2.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCochlee2.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCulture.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCulture.java
index cc6c8b11..085ad523 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCulture.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepCulture.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepMouche.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepMouche.java
index 555e356f..41822cff 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepMouche.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepMouche.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepOrganoid.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepOrganoid.java
index 723c6d14..719db557 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepOrganoid.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepOrganoid.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepPhantom.java b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepPhantom.java
index 019eb98d..5e8dd59e 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepPhantom.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/ParameterSweepPhantom.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.utils.test.*;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/PipelineTest.java b/src/test/java/fr/pasteur/ida/zellige/behavior/PipelineTest.java
index 4f3ad999..2014e845 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/PipelineTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/PipelineTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 //package fr.pasteur.ida.zellige.behavior;
 //
 //import fr.pasteur.ida.zellige.ReferenceSurfaceExtraction;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/StartingOSE_SameSurfaceTest.java b/src/test/java/fr/pasteur/ida/zellige/behavior/StartingOSE_SameSurfaceTest.java
index 587095c7..29003a12 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/StartingOSE_SameSurfaceTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/StartingOSE_SameSurfaceTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import fr.pasteur.ida.zellige.element.Pixels;
@@ -23,6 +51,8 @@ import net.imglib2.type.numeric.RealType;
 import org.junit.Ignore;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.TreeMap;
@@ -31,6 +61,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 public class StartingOSE_SameSurfaceTest
 {
+    private final static Logger LOGGER = LoggerFactory.getLogger( StartingOSE_SameSurfaceTest.class );
     @Ignore
     @DisplayName( "Two starting OSE from the same surface don't necessarily produce the exact same surface" )
     @Test
@@ -65,19 +96,19 @@ public class StartingOSE_SameSurfaceTest
 
         ArrayList< AbstractOSE > osePartOfSurface = list1;
         osePartOfSurface.removeAll( list2 );
-        System.out.println( "surface starting ose : " + osePartOfSurface.size() );
+        LOGGER.debug( "surface starting ose : " + osePartOfSurface.size() );
         TreeMap< Double, Integer > uniqueSurface = new TreeMap<>();
         for ( AbstractOSE ose : osePartOfSurface )
         {
             oseLists.reset();
             Surface s = SurfaceConstruction.run( oseLists, ose, width, overlap, connexity );
             double overlappingRate = overlappingRate( reference, s );
-            System.out.println( " This surface has an overlap rate of " + overlappingRate + " with the reference surface" );
+            LOGGER.debug( " This surface has an overlap rate of " + overlappingRate + " with the reference surface" );
             Integer j = uniqueSurface.get(overlappingRate);
             uniqueSurface.put( overlappingRate, ( j == null ) ? 1 : j + 1 );
         }
-        System.out.println(uniqueSurface );
-        assertThat( uniqueSurface.size()> 1 );
+        LOGGER.debug( String.valueOf( uniqueSurface ) );
+        assertThat( uniqueSurface.size() > 1 );
     }
 
 
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceConstructionBehaviorTest.java b/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceConstructionBehaviorTest.java
index b185f666..9be2483d 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceConstructionBehaviorTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceConstructionBehaviorTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 import net.imglib2.type.NativeType;
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceLineConstructionBehaviorTest.java b/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceLineConstructionBehaviorTest.java
index fb40f4f0..3f0465fc 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceLineConstructionBehaviorTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/SurfaceLineConstructionBehaviorTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 public class SurfaceLineConstructionBehaviorTest
diff --git a/src/test/java/fr/pasteur/ida/zellige/behavior/Utils.java b/src/test/java/fr/pasteur/ida/zellige/behavior/Utils.java
index 458ccc85..fee5a488 100644
--- a/src/test/java/fr/pasteur/ida/zellige/behavior/Utils.java
+++ b/src/test/java/fr/pasteur/ida/zellige/behavior/Utils.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.behavior;
 
 public class Utils
diff --git a/src/test/java/fr/pasteur/ida/zellige/element/PixelsTest.java b/src/test/java/fr/pasteur/ida/zellige/element/PixelsTest.java
index 6fd4b887..867573f6 100644
--- a/src/test/java/fr/pasteur/ida/zellige/element/PixelsTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/element/PixelsTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import org.junit.jupiter.api.DisplayName;
@@ -75,4 +103,4 @@ class PixelsTest
     void testToString()
     {
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/element/SurfaceTest.java b/src/test/java/fr/pasteur/ida/zellige/element/SurfaceTest.java
index f03cc851..fe78a753 100644
--- a/src/test/java/fr/pasteur/ida/zellige/element/SurfaceTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/element/SurfaceTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.element;
 
 import org.junit.jupiter.api.Test;
@@ -65,4 +93,4 @@ class SurfaceTest
     void getHeight()
     {
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/parameters/ClassificationParametersTest.java b/src/test/java/fr/pasteur/ida/zellige/parameters/ClassificationParametersTest.java
index 0029d1df..57e64c64 100644
--- a/src/test/java/fr/pasteur/ida/zellige/parameters/ClassificationParametersTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/parameters/ClassificationParametersTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.parameters;
 
 import fr.pasteur.ida.zellige.steps.selection.classification.ClassificationParameters;
diff --git a/src/test/java/fr/pasteur/ida/zellige/parameters/PixelSelectionParametersTest.java b/src/test/java/fr/pasteur/ida/zellige/parameters/PixelSelectionParametersTest.java
index 567a98da..31fd7d43 100644
--- a/src/test/java/fr/pasteur/ida/zellige/parameters/PixelSelectionParametersTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/parameters/PixelSelectionParametersTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.parameters;
 
 public class PixelSelectionParametersTest
diff --git a/src/test/java/fr/pasteur/ida/zellige/parameters/PretreatmentParametersTest.java b/src/test/java/fr/pasteur/ida/zellige/parameters/PretreatmentParametersTest.java
index fd9968b0..479fbb42 100644
--- a/src/test/java/fr/pasteur/ida/zellige/parameters/PretreatmentParametersTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/parameters/PretreatmentParametersTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.parameters;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
diff --git a/src/test/java/fr/pasteur/ida/zellige/parameters/ProjectionParametersTest.java b/src/test/java/fr/pasteur/ida/zellige/parameters/ProjectionParametersTest.java
index 17661d08..b3cd0c57 100644
--- a/src/test/java/fr/pasteur/ida/zellige/parameters/ProjectionParametersTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/parameters/ProjectionParametersTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.parameters;
 
 import fr.pasteur.ida.zellige.steps.projection.ProjectionParameters;
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/PixelClassificationTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/PixelClassificationTest.java
index cf45ff44..8ac51074 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/PixelClassificationTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/PixelClassificationTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection;
 
 class PixelClassificationTest
@@ -66,4 +94,4 @@ class PixelClassificationTest
 //        Mockito.verify( classificationSpy, Mockito.times( 1 ) ).processAmplitudeClassification( rai, factory, amplitudeThreshold );
 //    }
 
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/IslandTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/IslandTest.java
index dd3624e7..d8b495e8 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/IslandTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/IslandTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.islandSearch;
 
 import fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch.Island;
@@ -59,4 +87,4 @@ class IslandTest
         island.reset();
         assertTrue( island.get( 0 ).isNotVisited() );
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/SandTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/SandTest.java
index a8fe7356..003149f6 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/SandTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/SandTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.islandSearch;
 
 import fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch.Sand;
@@ -60,4 +88,4 @@ class SandTest
         Sand sand2 = new Sand( 0, 0, 0 );
         assertTrue( sand.equals( sand2 ) );
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/WorldTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/WorldTest.java
index c33e313d..bcde1efd 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/WorldTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/islandSearch/WorldTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.islandSearch;
 
 import fr.pasteur.ida.zellige.steps.selection.postTreatment.islandSearch.Sand;
@@ -35,11 +63,6 @@ class WorldTest
         world.setSand( 2, 2, 1 );
 
 
-
-//        world.run();
-//        assertEquals( world.getSand( 0, 1, 0 ).getIslandStatus(), 1 );
-//        assertEquals( world.getSand( 8, 0, 0 ).getIslandStatus(), - 1 );
-//        assertEquals( world.getSand( 0, 0, 1 ).getIslandStatus(), 1 );
     }
 
     @Test
@@ -84,4 +107,4 @@ class WorldTest
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/postTreatment/PostTreatmentTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/postTreatment/PostTreatmentTest.java
index c1f9d3a9..f5b17baa 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/postTreatment/PostTreatmentTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/postTreatment/PostTreatmentTest.java
@@ -1,6 +1,34 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.postTreatment;
 
 class PostTreatmentTest
 {
 
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/pretreatment/PreTreatmentTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/pretreatment/PreTreatmentTest.java
index a7100966..8ff4d20b 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/pretreatment/PreTreatmentTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/pretreatment/PreTreatmentTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.pretreatment;
 
 public class PreTreatmentTest
diff --git a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/util/ExtremaDetectionTest.java b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/util/ExtremaDetectionTest.java
index 4f5b031f..53dd58b7 100644
--- a/src/test/java/fr/pasteur/ida/zellige/pixelSelection/util/ExtremaDetectionTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/pixelSelection/util/ExtremaDetectionTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.pixelSelection.util;
 
 import fr.pasteur.ida.zellige.steps.selection.exception.DataValidationException;
@@ -60,20 +88,6 @@ public class ExtremaDetectionTest
         assertThat( exception ).hasMessageContaining( "min" );
     }
 
-//    @DisplayName( "The chosen method is 'forward', 'backward' or 'central'" )
-//    @Test
-//    void wrongMethodWhenProvidedRaisesAnException()
-//    {
-//        Img< IntType > input = new ArrayImgFactory<>( new IntType() ).create( 5, 5, 5 );
-//        ImgFactory< IntType > factory = input.factory();
-//        String type = "min";
-//        String method = "gradient";
-//        DataValidationException exception =
-//                assertThrows( DataValidationException.class,
-//                        () -> new ExtremaDetection( input, factory, type ) );
-//        assertThat( exception ).hasMessageContaining( method );
-//    }
-
     @DisplayName( "A good set of parameters don't raise any exception" )
     @Test
     void rightParametersWhenProvidedDoNotRaiseAnException()
diff --git a/src/test/java/fr/pasteur/ida/zellige/utils/LocalExtremaDetectionTest.java b/src/test/java/fr/pasteur/ida/zellige/utils/LocalExtremaDetectionTest.java
index 9a2e2793..52b895b7 100644
--- a/src/test/java/fr/pasteur/ida/zellige/utils/LocalExtremaDetectionTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/utils/LocalExtremaDetectionTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils;
 
 import org.junit.jupiter.api.Test;
@@ -16,4 +44,4 @@ class LocalExtremaDetectionTest
     void findMaxima()
     {
     }
-}
\ No newline at end of file
+}
diff --git a/src/test/java/fr/pasteur/ida/zellige/utils/RMSEAndCoverageComputationTest.java b/src/test/java/fr/pasteur/ida/zellige/utils/RMSEAndCoverageComputationTest.java
index e4fa4438..73e48eb8 100644
--- a/src/test/java/fr/pasteur/ida/zellige/utils/RMSEAndCoverageComputationTest.java
+++ b/src/test/java/fr/pasteur/ida/zellige/utils/RMSEAndCoverageComputationTest.java
@@ -1,3 +1,31 @@
+/*-
+ * #%L
+ * Zellige
+ * %%
+ * Copyright (C) 2020 - 2022 Institut Pasteur
+ * %%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ * #L%
+ */
 package fr.pasteur.ida.zellige.utils;
 
 import fr.pasteur.ida.zellige.utils.test.RMSEAndCoverageComputation;
-- 
GitLab