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 584de904d69758cd79417e2b66daf9cb09f1d98d..21c7e41752c372ff4c8c1e47add3812f136d0e00 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -5,19 +5,18 @@ import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
 import javafx.geometry.Pos;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Label;
-import javafx.scene.control.Spinner;
-import javafx.scene.control.SpinnerValueFactory;
+import javafx.scene.control.*;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
 import javafx.stage.Stage;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
+import java.time.temporal.Temporal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Controlleur pour le FXML add-data-stage, pour ajouter une nouvelle donnée
@@ -35,35 +34,66 @@ public class AddDataController {
      */
     MainStageView mainStageView;
 
-    private List<Spinner<Double>> spinners;
+    private List<Object> components;
 
     /**
      * Méthode d'intitialisation du controlleur
      */
     @FXML
     public void initialize() {
-        this.spinners = new ArrayList<>();
+        this.components = new ArrayList<>();
         ClassificationModel model = ClassificationModel.getClassificationModel();
         if (!model.getDatas().isEmpty()) {
-            String[] attributes = model.getDatas().get(0).getAttributesNames().keySet().toArray(new String[0]);
-            for (String attribute : attributes) {
-                Label label = new Label(attribute);
+            Map<String, Object> attrMap = model.getDatas().get(0).getAttributesNames();
+            for (Map.Entry<String, Object> entry : attrMap.entrySet()) {
+                String attrName = entry.getKey();
+                Object attrValue = entry.getValue();
 
-                Spinner<Double> spinner = new Spinner<>();
-                spinner.setEditable(true);
-                SpinnerValueFactory<Double> valueFactory =
-                        new SpinnerValueFactory.DoubleSpinnerValueFactory(
-                                0,
-                                Double.POSITIVE_INFINITY,
-                                0.0,
-                                0.1
-                        );
-                spinner.setValueFactory(valueFactory);
-                HBox hbox = new HBox(10, label, spinner);
+                Label label = new Label(attrName);
+                HBox hbox = new HBox(10, label);
                 hbox.setAlignment(Pos.CENTER);
-                hbox.setSpacing(10.0);
-                entries.getChildren().addAll(hbox);
-                spinners.add(spinner);
+                hbox.setSpacing(10);
+
+                if (attrValue instanceof Double) {
+                    Spinner<Double> doubleSpinner = new Spinner<>();
+                    doubleSpinner.setEditable(true);
+                    SpinnerValueFactory<Double> valueFactory =
+                            new SpinnerValueFactory.DoubleSpinnerValueFactory(
+                                    0.0,
+                                    9999,
+                                    0.0,
+                                    0.5
+                            );
+                    doubleSpinner.setValueFactory(valueFactory);
+                    hbox.getChildren().add(doubleSpinner);
+                    components.add(doubleSpinner);
+                }
+                else if (attrValue instanceof Integer) {
+                    Spinner<Integer> integerSpinner = new Spinner<>();
+                    integerSpinner.setEditable(true);
+                    SpinnerValueFactory<Integer> valueFactory =
+                            new SpinnerValueFactory.IntegerSpinnerValueFactory(
+                                    0,
+                                    Integer.MAX_VALUE,
+                                    0,
+                                    1
+                            );
+                    integerSpinner.setValueFactory(valueFactory);
+                    hbox.getChildren().add(integerSpinner);
+                    components.add(integerSpinner);
+                }
+                else if (attrValue instanceof String) {
+                    TextField textField = new TextField();
+                    hbox.getChildren().add(textField);
+                    components.add(textField);
+                }
+                else if (attrValue instanceof Boolean) {
+                    ChoiceBox<String> choiceBox = new ChoiceBox<>();
+                    choiceBox.getItems().addAll("VRAI", "FAUX");
+                    hbox.getChildren().add(choiceBox);
+                    components.add(choiceBox);
+                }
+                entries.getChildren().add(hbox);
             }
         }
     }
@@ -83,8 +113,18 @@ public class AddDataController {
         mainStageView.getController().getClassifyData().setDisable(false);
 
         try {
-            Double[] values = spinners.stream().map(Spinner::getValue).toArray(Double[]::new);
-            ClassificationModel.getClassificationModel().ajouterDonnee((Object[]) values);
+            Object[] values = components.stream().map(component -> {
+                if (component instanceof Spinner) {
+                    return ((Spinner<?>) component).getValue();
+                } else if (component instanceof TextField) {
+                    return ((TextField) component).getText();
+                } else if (component instanceof ChoiceBox) {
+                    return ((ChoiceBox<String>) component).getValue().equals("VRAI");
+                }
+                return null;
+            }).toArray();
+
+            ClassificationModel.getClassificationModel().ajouterDonnee(values);
         }catch (IllegalArgumentException e){
             Alert alert = new Alert(Alert.AlertType.ERROR);
             alert.setTitle("Erreur");
diff --git a/src/main/java/fr/univlille/sae/classification/model/DataType.java b/src/main/java/fr/univlille/sae/classification/model/DataType.java
index 99e9113443a7261fb700889692fe4c8c6194e7bb..0881c8866aee02eeaf5db1b27dc328bdaad5fc14 100644
--- a/src/main/java/fr/univlille/sae/classification/model/DataType.java
+++ b/src/main/java/fr/univlille/sae/classification/model/DataType.java
@@ -3,7 +3,7 @@ package fr.univlille.sae.classification.model;
 public enum DataType {
 
     IRIS(4, Iris.class),
-    POKEMON(12, Pokemon.class);
+    POKEMON(11, Pokemon.class);
 
     private final int argumentSize;
     private final Class<? extends LoadableData> clazz;
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 27d271a25e4898f4b7eeaa38beaf45610cd686a5..abf271abb8ef1ba9bb655bab997a826b774bb18d 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -4,6 +4,7 @@ import com.opencsv.bean.CsvBindByName;
 import javafx.scene.paint.Color;
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
@@ -164,8 +165,8 @@ public class Iris extends LoadableData {
      */
 
     @Override
-    public Map<String, Double> getAttributesNames() {
-        Map<String, Double> attrNames = new HashMap<>();
+    public Map<String, Object> getAttributesNames() {
+        Map<String, Object> attrNames = new LinkedHashMap<>();
         attrNames.put("Longueur des sépales", sepalLength);
         attrNames.put("Largeur des sépales", sepalWidth);
         attrNames.put("Longueur des pétales", petalLength);
@@ -179,12 +180,12 @@ public class Iris extends LoadableData {
      */
     @Override
     public String toString() {
-        return "Iris{" +
-                "sepalLength=" + sepalLength +
-                ", sepalWidth=" + sepalWidth +
-                ", petalLength=" + petalLength +
-                ", petalWidth=" + petalWidth +
-                ", variety='" + getClassification() + '\'' +
-                '}';
+        return (
+                "Sepal length: " + sepalLength + "\n" +
+                "Sepal width: " + sepalWidth + "\n" +
+                "Petal length: " + petalLength + "\n" +
+                "Petal width: " + petalWidth + "\n" +
+                "Variety: " + getClassification()
+        );
     }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index dcf9b00c05b5b192c5d44b0f99653bf0ce70e66b..4aa25be2e34b88f7db8b244d80410cc4299d6e3c 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -46,7 +46,7 @@ public abstract class LoadableData {
      */
     public abstract void setClassification(String classification);
 
-    public abstract Map<String, Double> getAttributesNames();
+    public abstract Map<String, Object> getAttributesNames();
 
     /**
      * Renvoie la couleur associée à l'objet.
diff --git a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
index 878091653fd2348f366334f8ed5c9f1ad804403b..bddf6995eb5e17c5e48b7de573ec1fa00dbac038 100644
--- a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
+++ b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
@@ -25,9 +25,15 @@ public class PointFactory {
                     break;
                 case POKEMON:
                     if(size != DataType.POKEMON.getArgumentSize()) {
-                        throw new IllegalArgumentException("Le nombre de coordonnées doit être de 12 pour le type IRIS.");
+                        throw new IllegalArgumentException("Le nombre de coordonnées doit être de 11 pour le type POKEMON.");
+                    }
+                    data = null;
+                    if (coords.length == 13) {
+                        data = new Pokemon(coords);
+                    }
+                    else if (coords.length == 11) {
+                        data = new Pokemon((String) coords[0], (Integer) coords[1], (Integer) coords[2], (Double) coords[3], (Integer) coords[4], (Integer) coords[5], (Integer) coords[6], (Integer) coords[7], (Integer) coords[8], "", "", (Double) coords[9], (Boolean) coords[10]);
                     }
-                    data = new Pokemon(coords);
                     break;
                 default:
                     throw new IllegalArgumentException("Type de données non supporté : " + type);
diff --git a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
index 63c236b479d1c5b4730d4e8956799d0f0c7658c1..f52f5b1a285687aab16c03cb5f9ff2c41298ef8d 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
@@ -4,6 +4,7 @@ import com.opencsv.bean.CsvBindByName;
 import javafx.scene.paint.Color;
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class Pokemon extends LoadableData {
@@ -95,18 +96,19 @@ public class Pokemon extends LoadableData {
      */
 
     @Override
-    public Map<String, Double> getAttributesNames() {
-        Map<String, Double> attrNames = new HashMap<>();
-        attrNames.put("Attaque", (double) attack);
-        attrNames.put("Base egg steps", (double) baseEggSteps);
+    public Map<String, Object> getAttributesNames() {
+        Map<String, Object> attrNames = new LinkedHashMap<>();
+        attrNames.put("Name", name);
+        attrNames.put("Attaque", attack);
+        attrNames.put("Base egg steps", baseEggSteps);
         attrNames.put("Capture rate", captureRate);
-        attrNames.put("Defense", (double) defense);
-        attrNames.put("Experience growth", (double) experienceGrowth);
-        attrNames.put("HP", (double) hp);
-        attrNames.put("Special attack", (double) spAttack);
-        attrNames.put("Special defense", (double) spDefense);
+        attrNames.put("Defense", defense);
+        attrNames.put("Experience growth", experienceGrowth);
+        attrNames.put("HP", hp);
+        attrNames.put("Special attack", spAttack);
+        attrNames.put("Special defense", spDefense);
         attrNames.put("Speed", speed);
-        attrNames.put("Is legendary", isLegendary ? 1.0 : 0.0);
+        attrNames.put("Is legendary", isLegendary);
         return attrNames;
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
index 7100e254021975aede6f6af63f3e6b676c7fa479..041cafc01de1f11ccd76de9a4578c943ea2a06fe 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
@@ -12,6 +12,7 @@ import javafx.stage.Stage;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.ArrayList;
 
 /**
  * Classe responsable de la création et de l'affichage de la vue de configuration des axes.
@@ -68,8 +69,16 @@ public class AxesSettingsView {
             }
 
             LoadableData dataType = model.getDatas().get(0);
-            controller.setSelectAbs(dataType.getAttributesNames().keySet().toArray(new String[0]));
-            controller.setSelectOrd(dataType.getAttributesNames().keySet().toArray(new String[0]));
+            String[] attributes = dataType.getAttributesNames().keySet().toArray(new String[0]);
+            ArrayList<String> finalAttrList = new ArrayList<>();
+            for (String attribute : attributes) {
+                if ((dataType.getAttributesNames().get(attribute) instanceof Integer) || (dataType.getAttributesNames().get(attribute) instanceof Double)) {
+                    finalAttrList.add(attribute);
+                }
+            }
+            String[] finalAttributes = finalAttrList.toArray(new String[0]);
+            controller.setSelectAbs(finalAttributes);
+            controller.setSelectOrd(finalAttributes);
 
             controller.setAbsSizeUpper(((NumberAxis)dataVisualizationView.getScatterChart().getXAxis()).getUpperBound());
             controller.setAbsSizeLower(((NumberAxis)dataVisualizationView.getScatterChart().getXAxis()).getLowerBound());
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index 2325405ffc564ddab0b157577d175e7f577dbf27..973c2088541cc0b848e649fe3482c9e6703ef087 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -103,9 +103,9 @@ public class DataStageView extends DataVisualizationView implements Observer {
                 System.err.println("Erreur de mise à jour.");
                 return;
             }
-            // On vide le nuage pour s'assurer qu'il est bien vide
-            ObservableList<XYChart.Series> series = scatterChart.getData();
-            for(XYChart.Series serie : series) {serie.getData().clear();}
+
+            scatterChart.getData().clear();
+            serieList.clear();
 
             if (actualX == null && actualY == null) {
                 controller.setAxesSelected("Aucuns axes sélectionnés");
@@ -116,7 +116,24 @@ public class DataStageView extends DataVisualizationView implements Observer {
                 List<LoadableData> points = new ArrayList<>(model.getDatas());
                 points.addAll(model.getDataToClass().keySet());
                 for (LoadableData data : points) {
-                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(data.getAttributesNames().get(actualX), data.getAttributesNames().get(actualY));
+                    Object xValue = data.getAttributesNames().get(actualX);
+                    Object yValue = data.getAttributesNames().get(actualY);
+
+                    Double x = 0.0;
+                    if (xValue instanceof Integer) {
+                        x = ((Integer) xValue).doubleValue();
+                    } else if (xValue instanceof Double) {
+                        x = (Double) xValue;
+                    }
+
+                    Double y = 0.0;
+                    if (yValue instanceof Integer) {
+                        y = ((Integer) yValue).doubleValue();
+                    } else if (yValue instanceof Double) {
+                        y = (Double) yValue;
+                    }
+
+                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(x, y);
 
                     Node nodePoint = ViewUtil.getForm(data, new Circle(5), controller);
 
@@ -159,9 +176,17 @@ public class DataStageView extends DataVisualizationView implements Observer {
                 controller.setAxesSelected("Aucuns axes sélectionnés");
                 return;
             }
+            Object attrX = newData.getAttributesNames().get(actualX);
+            Object attrY = newData.getAttributesNames().get(actualY);
+            if (attrX instanceof Integer) {
+                attrX = ((Integer) attrX).doubleValue();
+            }
+            if (attrY instanceof Integer) {
+                attrY = ((Integer) attrY).doubleValue();
+            }
             XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    newData.getAttributesNames().get(actualX),
-                    newData.getAttributesNames().get(actualY)
+                    (Double) attrX,
+                    (Double) attrY
             );
 
             dataPoint.setNode(ViewUtil.getForm(newData, new Rectangle(10, 10), controller));
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 43ac5a948165c0ff14484f446a762780b2bafb5a..d87d6d9deccfdc8aa22aa0150bee66b6f69d0817 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -116,7 +116,24 @@ public class MainStageView extends DataVisualizationView implements Observer {
                 List<LoadableData> points = new ArrayList<>(model.getDatas());
                 points.addAll(model.getDataToClass().keySet());
                 for (LoadableData data : points) {
-                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(data.getAttributesNames().get(actualX), data.getAttributesNames().get(actualY));
+                    Object xValue = data.getAttributesNames().get(actualX);
+                    Object yValue = data.getAttributesNames().get(actualY);
+
+                    Double x = 0.0;
+                    if (xValue instanceof Integer) {
+                        x = ((Integer) xValue).doubleValue();
+                    } else if (xValue instanceof Double) {
+                        x = (Double) xValue;
+                    }
+
+                    Double y = 0.0;
+                    if (yValue instanceof Integer) {
+                        y = ((Integer) yValue).doubleValue();
+                    } else if (yValue instanceof Double) {
+                        y = (Double) yValue;
+                    }
+
+                    ScatterChart.Data<Double, Double> dataPoint = new ScatterChart.Data<>(x, y);
 
                     Node nodePoint = ViewUtil.getForm(data, new Circle(5), controller);
 
@@ -158,9 +175,17 @@ public class MainStageView extends DataVisualizationView implements Observer {
                 controller.setAxesSelected("Aucuns axes sélectionnés");
                 return;
             }
+            Object attrX = newData.getAttributesNames().get(actualX);
+            Object attrY = newData.getAttributesNames().get(actualY);
+            if (attrX instanceof Integer) {
+                attrX = ((Integer) attrX).doubleValue();
+            }
+            if (attrY instanceof Integer) {
+                attrY = ((Integer) attrY).doubleValue();
+            }
             XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    newData.getAttributesNames().get(actualX),
-                    newData.getAttributesNames().get(actualY)
+                    (Double) attrX,
+                    (Double) attrY
             );
 
             dataPoint.setNode(ViewUtil.getForm(newData, new Rectangle(10, 10), controller));