diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
index 7f93baf9d9ad94cb154a1f2a8e08d56d3d02e0c4..46cab511b2bf038c58e52d0f1f359cfc79f29523 100644
--- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
+++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java
@@ -39,6 +39,7 @@ import javafx.scene.paint.Color;
 import javafx.scene.text.Text;
 import javafx.stage.FileChooser;
 import javafx.stage.Modality;
+import javafx.stage.Stage;
 import javafx.util.Callback;
 import javafx.util.Pair;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -316,6 +317,23 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
     }
 
 
+    private static void newItineraryObsImport(ItineraryFile iti) {
+        File fileImport = getFile(MainApp.primaryStage);
+        if (fileImport == null) {
+            return;
+        }
+        MainApp.logger.info("start importing/create file " + fileImport.getName());
+        Report r = iti.checkCreateObservationFromXLSX(fileImport);
+        if(r.success()) {
+            ObservationFile obs = iti.createObservationFromXLSX(fileImport);
+            handleInterfaceUpdate(obs.getItineraryFile().getProcessFile(), r.success(), "File import completed");
+            MainApp.getDataControler().selectNode(obs);
+            MainApp.logger.info("import done with sucess");
+        } else {
+            showErrorImportAlert(r.prettyPrintError());
+        }
+    }
+
     @Override
     public void updateItem(DataNode item, boolean empty) {
         super.updateItem(item, empty);
@@ -442,18 +460,18 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                                                     Alert errorImport = new Alert(Alert.AlertType.INFORMATION);
                                                     errorImport.setTitle("IMPORT RESULT");
                                                     errorImport.setHeaderText("Number of errors by type, complete list of errors, complete list of warning.\n\"Download log file\" for an exhaustive list of warnings and errors.\n\"Download Help file\" for your file with highlighted problematic cells in yellow or orange.");
-                                                    errorImport.setResizable(true); 
+                                                    errorImport.setResizable(true);
 
                                                     //TextArea ta = new TextArea(finalReport.prettyPrintInfos());
                                                     TreeItem<String> tiInfos = new TreeItem<String> ("Errors and warnings by categories");
                                                     tiInfos.setExpanded(true);
                                                     tiInfos.getChildren().add(new TreeItem<String> (finalReport.prettyPrintInfos()));
-                                                    
-                                                    TreeItem<String> tiErrors = new TreeItem<String> ("List of errors");            
+
+                                                    TreeItem<String> tiErrors = new TreeItem<String> ("List of errors");
                                                     tiErrors.setExpanded(false);
                                                     tiErrors.getChildren().add(new TreeItem<String> (finalReport.prettyPrintError()));
 
-                                                    TreeItem<String> tiWarnings = new TreeItem<String> ("List of warning");            
+                                                    TreeItem<String> tiWarnings = new TreeItem<String> ("List of warning");
                                                     tiWarnings.setExpanded(false);
                                                     tiWarnings.getChildren().add(new TreeItem<String> (finalReport.prettyPrintWarning()));
 
@@ -475,7 +493,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                                                     rootItem.getChildren().add(tiErrors);
                                                     rootItem.getChildren().add(tiWarnings);
                                                     TreeView<String> tv = new TreeView<String> (rootItem);
-                                                    tv.showRootProperty().set(false);                                                     
+                                                    tv.showRootProperty().set(false);
                                                     errorImport.getDialogPane().setContent(tv);
 
                                                     ButtonType saveLog = new ButtonType("Download log file", javafx.scene.control.ButtonBar.ButtonData.LEFT);
@@ -562,13 +580,13 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                                             RDF4JTools.updateShaclGraph(ID, stream);
                                             long finish = System.nanoTime();
                                             long timeElapsed = (long)((finish - start)*0.000001);
-                                            
+
                                             // Autre option pour mesurer le temps
-                                            //Instant start = Instant.now();    
+                                            //Instant start = Instant.now();
                                             //...
-                                            //Instant finish = Instant.now();   
+                                            //Instant finish = Instant.now();
                                             //long timeElapsed = Duration.between(start, finish).toMillis();
-                                            
+
                                             Alert okImport = new Alert(Alert.AlertType.INFORMATION);
                                             okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png")));
                                             okImport.setHeaderText(null);
@@ -603,7 +621,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                                     Platform.runLater(() -> {
                                         try {
                                             OutputStream stream = new FileOutputStream(schaclConstraintsFile);
-                                            
+
                                             RDF4JTools.downloadShaclGraph(repositoryID, stream);
 
                                             Alert okImport = new Alert(Alert.AlertType.INFORMATION);
@@ -883,49 +901,33 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                     importObs.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
                     importObs.setOnAction(event -> {
                         ObservationFile file = (ObservationFile) item.getFile();
-                        FileChooser fileChooser = new FileChooser();
-                        fileChooser.setTitle("Import file");
-                        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx"));
-                        File fileImport = fileChooser.showOpenDialog(mainApp.primaryStage);
+                        File fileImport = getFile(mainApp.primaryStage);
                         if (fileImport != null) {
-                            MainApp.logger.info("start importing file " + fileImport.getName());
+                            MainApp.logger.info("start importing/update file " + fileImport.getName());
                             // temp obs file
                             ObservationFile tempF = null;
                             if(file.getStepFile() != null) {
-                                tempF = new ObservationFile(file.getStepFile());
+                                Report r = file.getStepFile().checkUpdateObservationFromXLSX(fileImport, file);
+                                if(r.success()) {
+                                    file.getStepFile().updateObservationFromXLSX(fileImport, file);
+                                    MainApp.getDataControler().refreshTree();
+                                    MainApp.getDataControler().showNodeDetails(file, file);
+                                    MainApp.logger.info("import done with sucess");
+                                } else {
+                                    showErrorImportAlert(r.prettyPrintError());
+                                }
                             }
                             if(file.getItineraryFile() != null) {
-                                tempF = new ObservationFile((file.getItineraryFile()));
-                            }
-                            if(tempF.constructDataFromImport(fileImport)) {
-                                if(tempF.getUuid().equalsIgnoreCase(file.getUuid())) {
-                                    // ok on peut importer
-                                    if(file.constructDataFromImport(fileImport)) {
-                                        // on rachaichi l'arbre
-                                        MainApp.getDataControler().refreshTree();
-                                        // on rafraichi l'observation
-                                        MainApp.getDataControler().showNodeDetails(file, file);
-                                        if(file.getStepFile() != null) {
-                                            file.getStepFile().getGeneralFile().getData().setModified(true);
-                                        } else {
-                                            if(file.getItineraryFile() != null) {
-                                                file.getItineraryFile().getProcessFile().getData().setModified(true);
-                                            }
-                                        }
-                                    }
+                                Report r = file.getItineraryFile().checkUpdateObservationFromXLSX(fileImport, file);
+                                if(r.success()) {
+                                    file.getItineraryFile().updateObservationFromXLSX(fileImport, file);
+                                    MainApp.getDataControler().refreshTree();
+                                    MainApp.getDataControler().showNodeDetails(file, file);
+                                    MainApp.logger.info("import done with sucess");
                                 } else {
-                                    // error lors de l'import
-                                    showErrorImportAlert("Bad UUID file. You are trying to import on a wrong observation file");
+                                    showErrorImportAlert(r.prettyPrintError());
                                 }
-                            } else {
-                                // error lors de l'import
-                                showErrorImportAlert("An error occured. Please check your import file");
                             }
-
-                            if(tempF != null) {
-                                tempF.removeFile();
-                            }
-
                         }
                     });
                     menu.getItems().add(importObs);
@@ -1053,6 +1055,14 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                     });
                     menu.getItems().add(newObs);
 
+                    MenuItem addNewStepObservationFromCsv = new MenuItem("Import New Observation from CSV");
+                    addNewStepObservationFromCsv.setGraphic(new ImageView(UITools.getImage("resources/images/treeview/observation_csv.png")));
+                    addNewStepObservationFromCsv.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
+                    addNewStepObservationFromCsv.setOnAction(event -> {
+                        newStepObsImport(s);
+                    });
+                    menu.getItems().add(addNewStepObservationFromCsv);
+
                     MenuItem newMix = new MenuItem("Add Composition");
                     newMix.setGraphic(new ImageView(UITools.getImage("resources/images/treeview/composition.png")));
                     newMix.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
@@ -1420,10 +1430,19 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
 
                     });
 
+                    MenuItem addNewItineraryObservationFromCsv = new MenuItem("Import New Observation from CSV");
+                    addNewItineraryObservationFromCsv.setGraphic(new ImageView(UITools.getImage("resources/images/treeview/observation_csv.png")));
+                    addNewItineraryObservationFromCsv.disableProperty().bind(Bindings.not(mainApp.getEditProperty()));
+                    addNewItineraryObservationFromCsv.setOnAction(event -> {
+                        ItineraryFile iti = (ItineraryFile) item.getFile();
+                        newItineraryObsImport(iti);
+                    });
+
                     menu.getItems().add(addProcessStep);
                     menu.getItems().add(addProcessStepFromCSV);
                     menu.getItems().add(addProcessExistingStep);
                     menu.getItems().add(newObsIti);
+                    menu.getItems().add(addNewItineraryObservationFromCsv);
                     menu.getItems().add(new SeparatorMenuItem());
                     menu.getItems().add(delItinerary);
                     break;
@@ -1435,11 +1454,32 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
         }
     }
 
-    private static void newStepImport(ItineraryFile iti) {
+    private void newStepObsImport(StepFile step) {
+        File fileImport = getFile(MainApp.primaryStage);
+        if (fileImport == null) {
+            return;
+        }
+        MainApp.logger.info("start importing/create file " + fileImport.getName());
+        Report r = step.checkCreateObservationFromXLSX(fileImport);
+        if(r.success()) {
+            ObservationFile obs = step.createObservationFromXLSX(fileImport);
+            handleInterfaceUpdate(obs.getStepFile().getGeneralFile(), r.success(), "File import completed");
+            MainApp.getDataControler().selectNode(obs);
+            MainApp.logger.info("import done with sucess");
+        } else {
+            showErrorImportAlert(r.prettyPrintError());
+        }
+    }
+
+    private static File getFile(Stage primaryStage) {
         FileChooser fileChooser = new FileChooser();
         fileChooser.setTitle("Import file");
-        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx"));
-        File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage);
+        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)", "*.xlsx"));
+        return fileChooser.showOpenDialog(primaryStage);
+    }
+
+    private static void newStepImport(ItineraryFile iti) {
+        File fileImport = getFile(MainApp.primaryStage);
         if (fileImport == null) {
             return;
         }
@@ -1447,18 +1487,15 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
         ImportReport importReport = iti.checkImportStepFromXLSX(fileImport);
         if(importReport.success()) {
             StepFile step = iti.importStepFromXLSX(fileImport);
-            handleInterfaceUpdate(step, importReport.success(), importReport.toString());
+            handleInterfaceUpdate(step.getGeneralFile(), importReport.success(), importReport.toString());
         } else {
             showErrorImportAlert(importReport.toString());
         }
     }
 
         private static void stepImport(StepFile file, boolean isNewStep) {
-        FileChooser fileChooser = new FileChooser();
-        fileChooser.setTitle("Import file");
-        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx"));
-        File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage);
-        if (fileImport != null) {
+            File fileImport = getFile(MainApp.primaryStage);
+            if (fileImport != null) {
             MainApp.logger.info("start importing file " + fileImport.getName());
             ImportReport importReport = file.realPreConst(fileImport, isNewStep);
             if(importReport.success()) {
@@ -1546,8 +1583,8 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
                 if (isNewStep || result.isPresent() && result.get() == importButtonType) {
                     // l'utilisateur valide la la mise à jour
                     Report report = file.constructDataFromImport(fileImport, isNewStep);
-                    handleInterfaceUpdate(file, report.success(), report.toString());
-                } else {
+                    handleInterfaceUpdate(file.getGeneralFile(), report.success(), report.toString());
+                    MainApp.getDataControler().selectNode(file);
                 }
 
             } else {
@@ -1557,20 +1594,15 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> {
         }
     }
 
-    private static void handleInterfaceUpdate(StepFile file, boolean reportBoolean, String reportString) {
+    private static void handleInterfaceUpdate(GeneralFile file, boolean reportBoolean, String reportString) {
         if(reportBoolean) {
-            updateAndNotifyInterfaceOfModification(file);
+            MainApp.getDataControler().buildProcessTree(file);
             showOkImportAlert();
         } else {
             showErrorImportAlert(reportString);
         }
     }
 
-    private static void updateAndNotifyInterfaceOfModification(StepFile file) {
-        MainApp.getDataControler().buildProcessTree(file.getGeneralFile());
-        MainApp.getDataControler().selectNode(file);
-    }
-
     private static void showErrorImportAlert(String report) {
         Alert errorImport = new Alert(Alert.AlertType.ERROR);
         errorImport.setTitle("Import error");
diff --git a/src/main/resources/resources/images/treeview/observation_csv.png b/src/main/resources/resources/images/treeview/observation_csv.png
new file mode 100644
index 0000000000000000000000000000000000000000..d496ff88dae5c5e5ecd4e403e1d19758fb84eba4
Binary files /dev/null and b/src/main/resources/resources/images/treeview/observation_csv.png differ