diff --git a/.gitignore b/.gitignore
index cfc34f0a3b795e77e26409b41458bf46078fe736..6a9a64253e75cf08ceb4132c80ddae245501d15b 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 51db6d2097e9a9cf2229497980dcf985f030c641..2bfccc5a8f4a20b65a9dbf34e492593c114754ff 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 b2933c0db3268856f3112662bce8738b16e8ca35..c777eaa51f89e1e70287de876dc3965ad40dfbe5 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 b48a91a5b49c870bad44928a102d5029d2d828cb..59cc04cce15792eb0cf66c8bb8608dc811b60512 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 e094ffe92641945fb23c0e9c170ba689dcc783a0..eb5afa19cc8fbd3f5a1cbd3075003a2685ea78ed 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 2d26a67db57ad126ab29996dd79ccc98a11a772c..2d4471f7b6a7e8bd73c16c5a268d4f37e7a29546 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 ac863a1a4a9269b4f5a4ed5da7bc24e8274e2408..0000000000000000000000000000000000000000
--- 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 0c1cc1dee9ff3e4dc5d263fcc40d6a74902825de..0000000000000000000000000000000000000000
--- 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 834f14c87c8da4947a95847397172400be6d4583..43a74d8e9a4ceb5eb96dd6a89d6298c7f452663c 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 3417cb2084820e43ba9151b3d7a05e0a72cf5030..6237d12a9f34fb894bcb5cada2191e7ae7a040bb 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 1a7b9ce4ab1aecf0ba3cfed5f95c1cd06eba7f3f..633db90615943890b30e8d1845bdbfaef0c7b23b 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 8ca4cfc50ee763327a4baff301ceb7b4f1279966..f6ef54cddd18310e84e979feefe1dfa753c14e66 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 b99ebd67b26690b1abbfc037b43a9d2981bf0b2c..541781e997fb581c4ac3b59d4c69d6638002d6d6 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 32325503e4354917d66fb08ef74a2cb19fb766a4..eaf9c1fc3d52ab1791ae8d76e2debb40ea333da5 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 4bdcb78af93acd1882f5e167807c1e94b365ecc9..b13cbc7b387e8b6c4987c3e234447b9f2185aaee 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 88cd264434653c8e3e62ca59fd68586998994838..c58ebc0bcd343e6357c270c8a8e8049d868e702d 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 12d85f2b1fcd8dea37f6a8282befa186fff4ec17..9e66e997da1071c384e1691d3e9ce7fa90b8e466 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 d2d948c9de8e1d71f11b37b395b81d3642272143..b1ec087eae42de012ff52a47bd6899a811bbbb87 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 101175ab10743d3b1afe68972a5a51f0e501344e..ac47c6b7d1fdfd33436e6e8593d919612fde25de 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 c55213584b9a79e59c36233817568c25c33556fe..e2720c4551502648ea890cad758794179927772d 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 5b3e144280084d1e78997a9ec8c5bcb35de9c454..29fd5b6575f4ebddeea8f5eb4dda2a1665312f2c 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 7aededb101ccdacb43cbe64812f50a9a7b75fbd2..2966f6286bd8a5ab0f135b853b2948b4f05bd8e1 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 0000000000000000000000000000000000000000..ecc08c3c0a0a3fc5060e77c56c6a408c75e12441
--- /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 0000000000000000000000000000000000000000..3e9d186355a15028cf16e8670e82dc9d573a8952
--- /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 a12299d0b10c9f3ec3294cf68bbb51db3eb8feef..1414654ec11f2cbbc85c5213c2e5cc36f1c0b7a6 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 782c99c42d0fb8756e896d5ad0c91d43313966f8..d239a7d56bf955a4177d1e712dec1bd43b33a4c9 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 f427c2b53468d3e80097df5f4b34df4dd95db89d..0000000000000000000000000000000000000000
--- 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 fabbfa8e81fc68ba308afd6e9324071eeb49962d..744bb682c48c9dc388c6ff621654a588d617c258 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 0000000000000000000000000000000000000000..c8c4477d53b620cde9ea0f5bf953fcba07716f07
--- /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 e1fb9fcf3f68fada41ec4c51fad46b3232b384c8..f0058a2adf138fbb71485c3f6fe7e02aaadb6adc 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 ee21be338d3334d4c05f5d8f265b49c758a2e8f7..971797c45ff0cd3266a2d1a272ce7ce43ae20b05 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 a561753c562ad92bd439bfbe86f98597adcce954..63cba688cb12509ca161b2817ee99bd6c6b7622b 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 4d1f6ac3061d4fb2eca497bfcefdd676ffa473ae..33be7c2c1bbd71446c3ab4266110dde9598a12f0 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 8674d64ba070898640132767cfb5f2dc0e467035..566a098fd07ed30f1619084368f2d71669b5a655 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 a3dbfcbf9793c2aae224927f3a051624006900b6..25a3ae2c2a9911c5f86d9e75eee1427106533823 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 4e3e70805e265c01a834792d6cd280c9c3b3d72a..6db4d22d344183fe3e6930e638ae5d8948355675 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 a9d8c8387924085f314994d7ef375ae11b37a225..997c6c2b7ee5000906d77c0f8b58dd9476a8c7da 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 f2b5beb860c71039ab9f9e74407bacc4bad39725..80e66f279474426e1e55867d9fa991c1405632f2 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 20711ebd3c8b09e6d6554c04c852ae9ff0159ecc..b483102433fa18eab3d4175ad570dd43b42c5358 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 e491f0135d6df7c99bedfaef759467ebd3bfa5a4..29b26f5fd33c0865c5da0af9176c38fc3b7577a9 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 3e871564c10bc3f1dff0b3f620d1662959ef4564..c434df0f0b69b45340efb3ba4c2a71ccfdf6416b 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 dc5e4970766af30d55d96181cabb76c262ec49e0..0000000000000000000000000000000000000000
--- 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 d39077c4cc052bcd9f6cb205fbebd32c2ca87f49..0000000000000000000000000000000000000000
--- 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 fe2aa273869a9f6fe7dc0642c18040138870eb76..0000000000000000000000000000000000000000
--- 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 74b0ee9ee1960d56ad0065bb76a6102b74e9477b..63367d5fdcdeb87941553777365c8023e1367d89 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 0000000000000000000000000000000000000000..5e68372ca03bda790d4e31c520f7228e9e2667f3
--- /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 0c5364f65c98827bc52a667cf7533543e3fb9879..0000000000000000000000000000000000000000
--- 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 0000000000000000000000000000000000000000..65c4082906fc1b2923f1f7873cb1d4a3ec24af3e
--- /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 1a1596e71310d424edcbf4c5edd98f29ad8dd6a7..0000000000000000000000000000000000000000
--- 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 c6f9ed1a13f72183d099316705ad03040a703a85..0000000000000000000000000000000000000000
--- 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 ceb55dea8245fb2703d1d5a79637bb15a57a1406..0181077e2d9bf66e0fe9433ebd3e46407882fc2c 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 7af123d760e9c90af617e9d97774deb50c202755..0000000000000000000000000000000000000000
--- 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 1993dbcbf33918c79d8b171bf5af894420f9a327..b3826bd0bb3af32b7f6a457551c42ea9ce084039 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 a3fc2e9d39248763df8418e5c9fd35fbda744c11..1a92c8479ec842b7f822129d70cd3739486d052a 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 0000000000000000000000000000000000000000..7fbe48400d1cbf89f54f82d8b24954c6516e44fe
--- /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 0000000000000000000000000000000000000000..2f5d8d41e2517557e879f8a6edf7cb6750f8acda
--- /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 0fcf8f8b306e41a0a3ef2c0bfa6f4fe6c0696d53..0000000000000000000000000000000000000000
--- 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 0000000000000000000000000000000000000000..32e3fb20f780deb6c60ca77bf4028d1d5b4476e8
--- /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 0000000000000000000000000000000000000000..f23053a020d010a1899fbf0ab8ce08ea54244bf9
--- /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 0d72d43ab73657a66b204c32f76ecd855b0bd882..0000000000000000000000000000000000000000
--- 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 dcbc9023f4657b6022b35c2d6485ad046fe52038..f4572b2a2c9a5227d11d0c18ddbc2cd00b28d5c5 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 c36ab37a6e2c0cc3862b8a21b9fa70582db8f128..0000000000000000000000000000000000000000
--- 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 d0062e0c839403304adb008f69794bca5990e389..c30b4800fbf4ecaa0ef1c3e67f94ddfcbe7d1ecf 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 1763e6fe3b1c399e75b1b719aab09dc9b2980e30..7a83c081b7c73b94c3d8fa50d857930eb70cac74 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 0000000000000000000000000000000000000000..d53594afb5cafe81fe27f06047a0a9a2b4ea354a
--- /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 17e6dbbfed1864c6382a0df52027be3ebb4f9da0..fc8cb4befa639d97bb2d56d963566c69a819d2a1 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 d61951dba538debecdf8b1aaba2652415493c6ef..7bcfadfdf0062beff482ba6daa728a3d66eaf5cd 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 3faa344b41ab080e69dd1162c7e4ae0dccc3b4f5..3c624ad6740fb4d92fa0c9787fe220d84fce7340 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 238ab751f0798f52e3c9760e46f70778f1a182a9..f024b9560bdf53d6818c5338812dddea9212b3d5 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 92272c8ea307b076870124781888f1127e055ef2..7effc462b233842614a1e1e641e5d00477ff0628 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 32b0a2434256c75df1eca96147b23142df632e1d..a651e7fce689588280ceabf20125695e735c2d7f 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 ff75096703c6231c44b6d3379540445b5fc3092b..9607bec078e5734335b29c5fedbd04ffc2e091cd 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 452cdb03e93595020080075b2db2608136924d36..e43a6282511b69195f5285a8917d3731ab13e8ac 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 832b87f4c55fd90209b907c9b12b8764de52a927..c5b689c0d6a03b2462e2e1bfe8b8fb293c8a244f 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 688f2e50f69e8c57e806bd2de6966150a49779ef..7ef1c3b177226f6175134feb905e691954a7d652 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 b13dbc43e49e6a5affdeb305ae65a9b99117594f..7f22314c37d86cbfd260ca2c6ee2fa14eba8c3f6 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 5c85d4906f40e8f6f64f7d7ccf0064326aa4460b..56b47602f0e597a1588e398a7d995f6f874549fd 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 def41f2b5f9b7e6384e773fcc6be19f6de257cb8..9e124fdc5441904daf36907923825446464b75f7 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 5626215afcd96a559bed8a54c9f7903f499d1977..991e97c66f3920ac6fd828853c9995d2e84d23d9 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 c07800936323dc6f2383fbef719063cb2cbf3828..0192b47719fa3fee98d4f30b8498576b40abe5f0 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 1134e1356037bf2ea6a101dfc7913392cf542958..87dc30e092d64c2257f0c9c3479d65ec5c33f19a 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 ac88bb9051656961f5500d23df562befe3deef3e..1f87da2441042de668014aa8bf724050f96a6446 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 75ec9dbe3015e20fc9ec74544bed7fd7cf9b2b56..92ee3d79a886670b6637bc52847abaeb1a3cd96b 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 5e5693f37a6555e6f7e3e8401d3aaec5d44eed87..60b33a7021f8fdbda3628600646dcaaa2ebdd312 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 50d92f1d4c8c29be24e35565085e084d7b81cfad..5f96d0769d0d0e44b901ba861c7674d4c3a7267a 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 b5d2ca8adcf1ba9bdd14b272c6f53004e37e294c..37c2ace40228a29a75e84d182686d5ffaebff3ea 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 d199728cb4916f6f5f4c53add34baf4b9b4df85c..678409ca69099c2944b2195d4709d65fb05d4c44 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 1147477ccfe7ed9e7fd824596a516e00c5fc6b35..1c66f0ecb95ac66d66188bc591e511db09ab54a4 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 fe5da0c07487f5d3bec6e503100fbed2cea7f00b..b6e4419910e97cef4b6facc06bee5a45cc0300d8 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 8dc0cfa475d8f8ed93fd5b2df99a441caa0d4897..046434a8c83c9988da954c5a8946fcf4f15ec255 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 a59eab2becd92b67cb804086a75773c85870a42a..654db06b2bae346cc4a17d34f7f59874ae5b02ac 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 10ddd6f7c1e6692f837c72b6c9b403a283e66dcb..8ee22b82bf4fbc2e0978645b67690590e361fa4b 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 5db6709273ca9b0753d5e5ffe882de2f928f8604..d312c649a186ce033942bb49909b35cd9b8abbc1 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 20ade7e36aac8eb481ce80be537699a9fb9fc1bb..e044fb1c61fb39adb50a44488ee071efc730979c 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 0884a9c32f888204b754eb11c1a688d9a25cb5de..5612fe1854d31e434a244c22dfcbd89e58e04a48 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 492b5a19db47984a45a937bc2c222c9913cc4aa9..2e53cd32f4aa95ddc0aa4c33e52c85c4b6425567 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 9ec464eef190b5d34c1261846512e5c4c540bcd3..012afcc6fed2fc0894f43b99e2fcec77ecb79496 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 434e6c4a4dc6edeace29ea1db74711abc940c2a9..5e743ad6f2ce7b9ab5f566016fe7a644214dce74 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 203db928678b0f85b97652f30fe7fff88471ac69..7ef954790535ac7c203997059e90edce924c09c5 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 436ae40803dd4dc9d0c83f35a9e0bb033e9a12fe..dd2118df3c82d845bf9fe83bc8ee76050ef078c0 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 621bce163badef64a60d5eb43c657f303a292dd6..cc09070677c4a8f0e6aff563e4ca192c37363d43 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 b3873e153572416ea93877df5e92ef0702fbabaf..b8fcda26ebc0c7988f26b6df5b00800f134ed0af 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 77845e725b8d9560f48444e0e6918f729508c367..7b78c63564b9023ec0be88e88f5de8f2df8f2e45 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 0e507fc329bdc92d737af84e78fe4ddb896fddd7..62e90f955b178bbe7949e0a348d71f4aaf3ebb52 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 a4ac1dbef2e1531eb334ac8a1704d963276a06f0..2b9d671c51708059eb443124a5fac36ea4a7ece3 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 38352416038c25a84faac6a1ae11d89da425067d..0fdf64270ffad43d14182e4a70755be5e1b1902e 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 a42de62822f3eb400d3008ee12c327b7450344d6..45a937baa1eab953e1225d3f6b85a2a76213af72 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 dd55b4b05c61f4de12f1f565e601b5ac82b9df2a..842b7268d20396202adf8bcce2d35572b8547b95 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 a6d0d47545b6eb0c8d100203816d6e8996367531..3548086a2b5715000612503e92958a9d194de981 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 6ceda52d9759886efcc9318f403f4297214abd37..ce43c76d8e8865830aa758d2c6a70df24061efb4 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 c498d0056ce2e5d371ff962ffb4cc8d60e127b5b..d70d85e4a8d7ef7fa7cb3b50906e5bc6de99fa35 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 74ea63d827204c1ee8e6db4bd5ddefe1ab52dbbf..f18d3d6c0cce1eb6afd7c6543712f513be814781 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 0808a25536d8fae62e6168eb3af3cd60e63904d8..856a9c59c995f642e86126199f40d1fcb265b475 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 9982250744a686f9fbae5995bb4d6793a1f4360e..98c5acd7e539acb4f3631d05cbd3b7bfe19580dc 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 98f0e6d77e14ed36e519c9a3ebd79eb573922af7..130e380f11b39d2ee8c0752460a474a47adc4301 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 cabd568368b53a1c6cdac5f806a4f6b8f0f64b72..62ee29723c666e1127dd18157c2806867e623d92 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 25a4ad900c7688dfdf31f5ffbe1d3213612d87f8..307232b822085c9b58eda78e84c4038ba973fded 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 3db1451afef2208ee67a85efed543bf9bd7572a3..a0957a6a8749a27f3a7e37ee9e1bb0f156c71b60 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 a8ca6e91379a6426444983c42bf1d747f40b8a03..ac303450bccc749d4a1cbd59e0b159b0e6ad45cf 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 d5095dea73cb24daf9a498fc4ed832a8e9c0f3b1..3d458fae73e9d65aacf741f3458ac071936ecefd 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 c69547ae575bde2346d6bbf26e45b1cd0f496ddb..510c1ada9ec740047f397afa0bc73a783098b7ac 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 829629349d6949b1276abf44c76a683590ba1dc3..9d5fab1b420f93f6ae127e277cabb7385eaf4bc8 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 49a4e267f7b4e2713795e46dcb06acf00f303b79..0399011f2ab3aeb166d6594b3f1e642ad962c2a8 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 ff670809cf94a1952ea19ab298cf2a77c6883563..61b7968acd21b2a340d53b8de6b05246d647bc92 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 3bf7ba8f94042f00a9fb919330540380c15fade1..96700df097e147f3f749d92ad5086803957d6c65 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 61bb77e9fac0cef81c837589160f1ce5a2d418e6..c92c97df160795995a1971866c40b6f0ad8bc8c2 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 3b2609348266d00fc28ca7d970170584c2e4aa59..01895380d6590db1bc4ab5bc07abc421807165c1 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 8fbf673e2986726fc4642edcc40b5a66a8479b9a..5e765d980b8addcb269ced33599d87cde9c0fa7c 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 d0c7e15b204dafe46f41c367ce48460ee62971b4..6daef4a3cf2b317049f9d10bd6564adfb80fb010 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 d558902c17346586eb3bb6b4db8c9bebf67594b0..564444e31d4695a1ff3cc5f5f2662b5acb55a7ed 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 eeda355b0c28bb0f7d4bc59c83bc7a06a12c5b57..b02a045b2de30f8d565bb364b6be2e4a7b41182d 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 2c8d1d4cd257a0d397c315ad805dc46a792bc4b5..f96f29fd022265a0f2a639bcb5cb51143c7887bc 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 efcc3e81cdf443fb61cacc919629175e6405bb30..1eb973844eb09ebb30dafacf13abb296aed0ef0a 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 a4e1cd37b69d2763d8f38b243a834cb430f9e3f3..1260545552c3b9ca2643961b5b6f467fa5f4bf14 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 bd3b7250821220405a112282eadf0b4318714661..7207d188abdcaf802102f1714048d39a62b577a2 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 e84320af31f37de9294286b1fed29cff4305fdd8..f2bf5f5d8d0e7262f65016ae38146a419dc83e5b 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 b768c11eddf671d70cc3e708dc910edc73f934d7..039321b6db31eb0c605b437f3cd5cd2d367d69e2 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 d2b3367b8a90a1ae3c10a4c16844a623b5878333..b559d6b7142be08fb7f9350fe826b80d9e48cb7f 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 0000000000000000000000000000000000000000..5f1c55a5d92d4890a7398d88eaf98b1d035161ba
--- /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 f09d3619a5b26b603c8e3da70a503c922b49c62c..dba9cef9a6cda36abedcba346b1c835b0275e2f4 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 e50563fa1342103f7c90645f996c45dff554a6dd..b076b1a9ad1d475c5c4fa020f7267fa855e4c048 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 71c61933cf38db75ca049e8ba97bfee8d1ab9b5a..622deaee639baea4e5d5ae380b6cb3a96e5dbba3 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 b8f285c4be28a3a3a49cb1f37d7cc3e798d7ef8a..833947d9c82ae6e32c84e8f481b66fe814d94fba 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 cc6c8b1189a3b834e955232da8b02d053bb1e1a9..085ad523558a280adc6a74f093435917e531ba6a 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 555e356f8403de4b664fb718790689d83a861931..41822cff07bf9e08df1b1b3a58d2aada4e09de06 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 723c6d144b940b2f32268cd9c037c28edadb23db..719db557eb490e74c849f888a302cda4ed2455f8 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 019eb98df43d9a8e2141d8bae7ad060652681479..5e8dd59ecc7411e7e8828b0891953f86f64e9386 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 4f3ad999356c2b6cc9ed6ad8a5e225fea450c22f..2014e845c5228ac9fc036d9419bc1f2c073579f1 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 587095c7957aed4ca0582a060cff940d72e2e798..29003a125b59e020d2a1a1595f908101521bd4bd 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 b185f666c43fb84516b2b5a651b68e2095554613..9be2483db031cc37d57a42e50a012ad292b350fd 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 fb40f4f00b0ac454ce033294094ff3b5c79c323e..3f0465fc5e781b7c815405131d9bd777f11d67d5 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 458ccc8533e9cafed1b4a9be78a004fa951c61d3..fee5a488b8cb0e66f4351a39fc47293ffc9f18df 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 6fd4b8875536895707495c3eec64d49cec995080..867573f6621f930310ff1bff14e0ad1f3f2a1c26 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 f03cc851678bfc5971e54562ca467ded7dcb8498..fe78a7532a94d5b0a217073841f73ab03f837065 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 0029d1df97a487e3c726c5f07a2d5c44f46045f5..57e64c641ffedcbfb32201435e99ad06863b67d7 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 567a98da03b0d64ee0d037a61e7e7c58cd68e62b..31fd7d439805ac12f393152aa9d880ec922ebdb1 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 fd9968b0efa8389f4f21e66ee161bbfe0741c3be..479fbb424b3d5125ec32688897001071414816c8 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 17661d08e1ed653b9491ea3d5094578e966aaba2..b3cd0c57b863825b4674f3a1457f973bcbf9b495 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 cf45ff446e9a013b443ce3cd36a6914d3eb729e5..8ac5107482c236d9cbf002349c267faefe2a969a 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 dd3624e75c8f48fc4624428659262b42212f5801..d8b495e87de9a02dbf7134006120b50d931af236 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 a8fe73568ae5a0fa9f6213632adb88ec4be9de4b..003149f6c2ee1cc5ade3d146ef334dbb9e7b6429 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 c33e313dc9f6404c7680c4d79f6ea6087b15ede2..bcde1efdb3f9c28c1e0f7fa80ca78cfedc0bd756 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 c1f9d3a97ed9adccdc6a4a360ffa46d133ead6ef..f5b17baa23b296a335af6a6752419dbb93142ea0 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 a7100966bd1be9c4c9dc5a41c1556223aa0b2964..8ff4d20b92a22b11ef479a965527526fa2824e8d 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 4f5b031f0da7d76b4503c80d29895f68b3576140..53dd58b78ff65116fe5631fe653180909eba9843 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 9a2e2793e2cfa9e805bbd078b3b30380647bca23..52b895b755aa0d7ac2007e0db595c3c8df22ac0a 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 e4fa44386287f237056fa022c68c38f2ac3863e5..73e48eb8c7c83de0c46cd3063bf42b26422a708e 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;