diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index 94cbf5a3f2a7664ef3ca2fa8b650d512909ef4f6..370a3a2fb7effe974b6f2500759a3b74980e7fb9 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -4,13 +4,11 @@ import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
-import javafx.scene.control.Button;
-import javafx.scene.control.Spinner;
-import javafx.scene.control.SpinnerValueFactory;
-import javafx.scene.control.TextFormatter;
+import javafx.scene.control.*;
 import javafx.stage.Stage;
 
 import java.io.IOException;
+import java.text.ParseException;
 import java.util.function.UnaryOperator;
 
 public class AddDataController {
@@ -57,6 +55,8 @@ public class AddDataController {
     public void validate() throws IOException {
         System.out.println("validé");
         mainStageView.getController().getClassifyData().setDisable(false);
+
+
         ClassificationModel.getClassificationModel().ajouterDonnee(sepalLengthSpinner.getValue(), sepalWidthSpinner.getValue(), petalLengthSpinner.getValue(), petalWidthSpinner.getValue());
         stage.close();
     }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
index ed9dce682fca628abf16efc38c63fc0c5c6823e9..8c890f287f75bcf97175c66402b68f004278a50e 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -42,6 +42,8 @@ public class AxesSettingsController{
     public void validate(){
         mainStageView.setActualX(selectAbs.getValue().toString());
         mainStageView.setActualY(selectOrd.getValue().toString());
+        mainStageView.getController().getScatterChart().getXAxis().setLabel(mainStageView.getActualX());
+        mainStageView.getController().getScatterChart().getYAxis().setLabel(mainStageView.getActualY());
 
         mainStageView.update(ClassificationModel.getClassificationModel());
         stage.close();
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index 02e47544575b2899a8a4f3137ea98d591e74182e..bf9f71772b2d4d293772505e2f4e0b38e2b9f693 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -84,6 +84,7 @@ public class MainStageController {
 
     public void classifyDatas() {
         ClassificationModel.getClassificationModel().classifierDonnees();
+        classifyData.setDisable(true);
     }
 
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 73799df432a25c04602d9e922d4367f738120ea6..8e5f9f110d98f6a657aa882db786ec2ad320cfac 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -9,6 +9,8 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
+import java.util.concurrent.ConcurrentSkipListSet;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 
 public class ClassificationModel extends Observable {
@@ -39,7 +41,7 @@ public class ClassificationModel extends Observable {
 
     private ClassificationModel(DataType type) {
         this.datas = new ArrayList<>();
-        this.dataToClass = new ArrayList<>();
+        this.dataToClass = new CopyOnWriteArrayList<>();
         this.type = type;
     }
 
@@ -90,6 +92,7 @@ public class ClassificationModel extends Observable {
         Random rdm = new Random();
         data.setClassification(classes.get(rdm.nextInt(classes.size())));
         notifyObservers(data);
+        dataToClass.remove(data);
 
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index 38fee8aaec1cb3331041ed8a01370ac63f7a1482..94e39725ac51f4eb727c22827f5da24c2b79d7a0 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -7,19 +7,20 @@ import java.util.Random;
 
 public class Iris extends LoadableData{
 
-    @CsvBindByName(column = "sepal.width")
-    private double sepalWidth;
+
     @CsvBindByName(column = "sepal.length")
     private double sepalLength;
-    @CsvBindByName(column = "petal.width")
-    private double petalWidth;
+    @CsvBindByName(column = "sepal.width")
+    private double sepalWidth;
     @CsvBindByName(column = "petal.length")
     private double petalLength;
+    @CsvBindByName(column = "petal.width")
+    private double petalWidth;
     @CsvBindByName(column = "variety")
     private String variety;
 
-    public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength) {
-        this(sepalWidth, sepalLength, petalWidth, petalLength, "undefined");
+    public Iris(double sepalLength, double sepalWidth, double petalLength, double petalWidth) {
+        this(sepalLength, sepalWidth, petalLength, petalWidth, "undefined");
     }
 
     public Iris() {
@@ -36,7 +37,7 @@ public class Iris extends LoadableData{
         this.variety = classification;
     }
 
-    public Iris(double sepalWidth, double sepalLength, double petalWidth, double petalLength, String variety) {
+    public Iris(double sepalLength, double sepalWidth, double petalLength, double petalWidth, String variety) {
         super();
         this.sepalWidth = sepalWidth;
         this.sepalLength = sepalLength;
@@ -92,10 +93,10 @@ public class Iris extends LoadableData{
 
     public String[] getAttributesName() {
         String[] names = new String[]{
-                "sepalWidth",
                 "sepalLength",
-                "petalWidth",
-                "petalLength"
+                "sepalWidth",
+                "petalLength",
+                "petalWidth"
         };
         return names;
     }
@@ -103,10 +104,10 @@ public class Iris extends LoadableData{
     @Override
     public String toString() {
         return "Iris{" +
-                "sepalWidth=" + sepalWidth +
-                ", sepalLength=" + sepalLength +
-                ", petalWidth=" + petalWidth +
+                "sepalLength=" + sepalLength +
+                ", sepalWidth=" + sepalWidth +
                 ", petalLength=" + petalLength +
+                ", petalWidth=" + petalWidth +
                 '}';
     }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 177c991efb1313a5b41d2e674c154d111bcfe510..9fe2d12ccfa1a9f28748a435b0db46fd9fc83443 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -13,6 +13,8 @@ import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuItem;
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Circle;
 import javafx.stage.Stage;
@@ -30,6 +32,7 @@ public class MainStageView implements Observer {
 
     private String actualX;
     private String actualY;
+    private Stage root;
 
     public MainStageView(ClassificationModel model) {
         this.model = model;
@@ -47,7 +50,7 @@ public class MainStageView implements Observer {
             System.exit(-1);
         }
         loader.setLocation(fxmlFileUrl);
-        Stage root = loader.load();
+        root = loader.load();
         root.setResizable(false);
         root.setTitle("SAE3.3 - Logiciel de classification");
         root.show();
@@ -56,38 +59,68 @@ public class MainStageView implements Observer {
         controller.setMainStageView(this);
         scatterChart = controller.getScatterChart();
         controller.setAxesSelected("Aucun fichier sélectionné");
+
     }
 
 
     @Override
     public void update(Observable observable) {
         if(scatterChart == null) throw new IllegalStateException();
-        scatterChart.getData().clear();
         if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
+        //on vide le nuage pour s'assurer que celui-ci est bien vide
+        scatterChart.getData().clear();
+
         XYChart.Series series1 = new XYChart.Series();
         series1.setName("Iris");
+
+        //Jalon 1: on verifie que le type de donnée est bien IRIS
         if(model.getType() == DataType.IRIS) {
-            controller.setAxesSelected("");
+
+
             if(actualX==null && actualY==null){
                 controller.setAxesSelected("Aucuns axes sélectionnés");
             }
             else{
+                controller.setAxesSelected("");
+                // On ajoute la serie au nuage
                 scatterChart.getData().add(series1);
+
+                //On recupere les données du model
                 List<LoadableData> points = new ArrayList<>(model.getDatas());
                 points.addAll(model.getDataToClass());
+                // on ajoute chaque point a la serie
                 for(LoadableData i : points) {
+
                     Iris iris = (Iris)i;
                     XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
                             iris.getDataType(actualY));
-                    Circle circle = new Circle(5);
-                    circle.setFill(iris.getColor());
-                    dataPoint.setNode(circle);
+
+                    dataPoint.setNode(getCircle(iris));
+
                     series1.getData().add(dataPoint);
+
                 }
             }
         }
     }
 
+
+    private Circle getCircle(Iris iris) {
+        Circle circle = new Circle(5);
+        circle.setFill(iris.getColor());
+        circle.setOnMouseClicked(e -> {
+            ContextMenu contextMenu = new ContextMenu();
+            for(String attributes : iris.getAttributesName()) {
+                contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
+            }
+            contextMenu.show(root, e.getScreenX(), e.getScreenY());
+        });
+
+        return  circle;
+    }
+
+
+
     @Override
     public void update(Observable observable, Object data) {
         if(scatterChart == null) throw new IllegalStateException();
@@ -102,9 +135,8 @@ public class MainStageView implements Observer {
                     iris.getDataType(actualX),
                     iris.getDataType(actualY)
             );
-            Circle circle = new Circle(5);
-            circle.setFill(iris.getColor());
-            dataPoint.setNode(circle);
+
+            dataPoint.setNode(getCircle(iris));
             if (!scatterChart.getData().isEmpty()) {
                 XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
                 series.getData().add(dataPoint);