diff --git a/deepfinder/utils/objl.py b/deepfinder/utils/objl.py
index e94fa01ad3b0b4ec46773083c9b04a785963c6ee..301e23e041548262213929699d56d50a9a580155 100644
--- a/deepfinder/utils/objl.py
+++ b/deepfinder/utils/objl.py
@@ -5,6 +5,7 @@
 # License: GPL v3.0. See <https://www.gnu.org/licenses/>
 # =============================================================================================
 
+import os
 import numpy as np
 
 import warnings
@@ -62,6 +63,42 @@ def disp(objlIN):
 
         print(strout)
 
+
+def read(filename):
+    """Reads object list. Handles .xml and .xlsx files, according to what extension the file has.
+
+    Args:
+        filename (str): '/path/to/file.ext' with '.ext' either '.xml' or '.xlsx'
+
+    Returns:
+        list of dict
+    """
+    data_format = os.path.splitext(filename)
+    if data_format[1] == '.xml':
+        objl = read_xml(filename)
+    elif data_format[1] == '.xlsx':
+        objl = read_excel(filename)
+    else:
+        print('/!\ DeepFinder can only read object lists in .xml and .xlsx formats')
+    return objl
+
+
+def write(objl, filename):
+    """Writes object list. Can write .xml and .xlsx files, according to the extension specified in filename.
+
+    Args:
+        objl (list of dict)
+        filename (str): '/path/to/file.ext' with '.ext' either '.xml' or '.xlsx'
+    """
+    data_format = os.path.splitext(filename)
+    if data_format[1] == '.xml':
+        write_xml(objl, filename)
+    elif data_format[1] == '.xlsx':
+        write_excel(objl, filename)
+    else:
+        print('/!\ DeepFinder can only write object lists in .xml and .xlsx formats')
+
+
 def read_xml(filename):
     tree = etree.parse(filename)
     objl_xml = tree.getroot()
diff --git a/pyqt/annotation/gui_annotation.py b/pyqt/annotation/gui_annotation.py
index 4b29399e33477c49f6d4d8bfa20901eaa6e07b08..bfc658c31a7bb5a2303eaae2712c6907b9d49111 100644
--- a/pyqt/annotation/gui_annotation.py
+++ b/pyqt/annotation/gui_annotation.py
@@ -208,7 +208,7 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow):
         self.winDisp.dwidget.goto_coord(coord)  # to refresh lmap display
 
         # Test:
-        ol.disp(self.objl)
+        #ol.disp(self.objl)
 
 
     def on_object_remove_secure(self):
@@ -288,9 +288,10 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow):
                 filename = filename[0]
             else:
                 filename = self.path_objl
-            s = os.path.splitext(filename)
-            filename = s[0]+'.xml' # force extension to be xml
-            ol.write_xml(self.objl, filename)
+            #s = os.path.splitext(filename)
+            #filename = s[0]+'.xml' # force extension to be xml
+            #ol.write_xml(self.objl, filename)
+            ol.write(self.objl, filename)
 
             message = 'Object list saved! Quit?'
             reply = QtGui.QMessageBox.question(self, 'Quit?', message,
@@ -305,7 +306,7 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow):
         else:
             path_objl = ('', '')
             if len(self.objl)!=0:
-                message = 'This will overwrite current object list. Proceed?'
+                message = 'This will overwrite current object list. Proceed?' # TODO: DOES NOT OVERWRITE OBJL!!
                 reply = QtGui.QMessageBox.question(self, 'Remove class', message,
                                                    QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
                 if reply == QtGui.QMessageBox.Yes:
@@ -320,7 +321,8 @@ class AnnotationWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 
 
     def load_objl(self, path_objl):
-        objl = ol.read_xml(path_objl)
+        #objl = ol.read_xml(path_objl)
+        objl = ol.read(path_objl)
         self.label_list = ol.get_labels(objl)
 
         for idx in range(len(objl)):