Index: gc_lang/fr/webext/panel/lex_editor.css
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.css
+++ gc_lang/fr/webext/panel/lex_editor.css
@@ -220,21 +220,22 @@
     margin: 5px 0px;
     background-color: hsl(210, 10%, 90%);
     border-radius: 5px;
     padding: 15px;
 }
-#save_button, #export_button {
+#save_button, #export_button, #import_button {
     display: none;
     float: right;
-    padding: 2px 20px;
+    padding: 2px 10px;
     background-color: hsl(150, 50%, 50%);
     color: hsl(150, 0%, 100%);
     border-radius: 3px;
     cursor: pointer;
 }
-#export_button {
+#export_button, #import_button {
     display: block;
+    margin-left: 5px;
     background-color: hsl(210, 50%, 50%);
     color: hsl(210, 0%, 100%);
 }
 
 #build_progress {
@@ -241,18 +242,18 @@
     display: none;
     width: 100%;
 }
 
 th {
-    padding: 5px 20px;
+    padding: 5px 10px;
     border-left: 1px solid hsl(210, 10%, 90%);
     text-align: left;
 }
 td {
-    padding: 0 20px;
+    padding: 0 10px;
 }
 
 .delete_entry {
     cursor: pointer;
     font-weight: bold;
     color: hsl(0, 100%, 50%);
 }

Index: gc_lang/fr/webext/panel/lex_editor.html
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.html
+++ gc_lang/fr/webext/panel/lex_editor.html
@@ -276,21 +276,20 @@
                     </div>
                     <h3>Lexique</h3>
                     <p>Nombre d’entrées ajoutées : <i id="num_added_entries">0</i>.</p>
                     <p>Nombre d’entrées supprimées : <i id="num_deleted_entries">0</i>.</p>
                     <p>Nombre d’entrées : <i id="num_entries">0</i>.</p>
+                    <p><progress id="build_progress" value="0"></p>
+                    <div id="export_button" class="fright">
+                        Exporter
+                    </div>
+                    <div id="import_button" class="fright">
+                        Importer
+                    </div>
                     <h3>Dictionnaire enregistré</h3>
                     <p>Dernière sauvegarde : <i id="save_date">néant</i>.</p>
                     <p>Nombre d’entrées : <i id="num_entries_saved">0</i>.</p>
-                    <p><progress id="build_progress" value="0"></p>
-                    <div id="export_div">
-                        <div id="export_button" class="fright">
-                            Exporter
-                        </div>
-                        <h3>Export</h3>
-                        <p>Export de votre dictionnaire personnel au format JSON.</p>
-                    </div>
                 </div>
                 
 
                 <p id="no_elem_line">Aucun élément.</p>
 

Index: gc_lang/fr/webext/panel/lex_editor.js
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.js
+++ gc_lang/fr/webext/panel/lex_editor.js
@@ -208,24 +208,11 @@
                 n += 1;
             }
         } else {
             this.showElement("no_elem_line");
         }
-    },
-
-    addEntriesToTable: function (n, lFlex) {
-        let xTable = document.getElementById("table");
-        if (lFlex.length > 0) {
-            if (document.getElementById("no_elem_line").style.display !== "none") {
-                this.hideElement("no_elem_line");
-                xTable.appendChild(this.createTableHeader());
-            }
-            for (let [sFlexion, sLemma, sTags] of lFlex) {
-                xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags));
-                n += 1;
-            }
-        }
+        this.updateData();
     },
 
     clearTable: function () {
         let xTable = document.getElementById("table");
         while (xTable.firstChild) {
@@ -236,20 +223,50 @@
     onTableClick: function (xEvent) {
         try {
             let xElem = xEvent.target;
             if (xElem.className) {
                 if (xElem.className == "delete_entry") {
-                    let iEntry = xElem.dataset.id_entry
-                    oLexicon.lFlexion[parseInt(iEntry)] = null;
-                    this.hideElement("row_"+iEntry);
-                    this.showElement("save_button");
+                    this.deleteEntry(xElem.dataset.id_entry);
                 }
             }
         }
         catch (e) {
             showError(e);
         }
+    },
+
+    addEntriesToTable: function (n, lFlex) {
+        let xTable = document.getElementById("table");
+        if (lFlex.length > 0) {
+            if (document.getElementById("no_elem_line").style.display !== "none") {
+                this.hideElement("no_elem_line");
+                xTable.appendChild(this.createTableHeader());
+            }
+            for (let [sFlexion, sLemma, sTags] of lFlex) {
+                xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags));
+                n += 1;
+            }
+        }
+        this.updateData();
+    },
+
+    deleteEntry: function (iEntry) {
+        oLexicon.deleteEntry(iEntry);
+        this.hideElement("row_"+iEntry);
+        this.showElement("save_button");
+        this.updateData();
+    },
+
+    updateData: function () {
+        document.getElementById("num_added_entries").textContent = oLexicon.nAddedEntries;
+        document.getElementById("num_deleted_entries").textContent = oLexicon.nDeletedEntries;
+        document.getElementById("num_entries").textContent = oLexicon.nEntries;
+    },
+
+    setDictData: function (nEntries, sDate) {
+        document.getElementById("num_entries_saved").textContent = nEntries;
+        document.getElementById("save_date").textContent = sDate;
     }
 }
 
 
 
@@ -489,33 +506,56 @@
 
 
 const oLexicon = {
 
     lFlexion: [],
-
-    addFlexions: function (lFlex) {
-        let n = this.lFlexion.length;
-        for (let aFlex of lFlex) {
-            this.lFlexion.push(aFlex);
-        }
-        oWidgets.addEntriesToTable(n, lFlex);
-    },
+    nEntries: 0,
+    nDeletedEntries: 0,
+    nAddedEntries: 0,
 
     load: function () {
         if (bChrome) {
-            browser.storage.local.get("lexicon_list", this._setList);
+            browser.storage.local.get("lexicon", this._load);
             return;
         }
-        let xPromise = browser.storage.local.get("lexicon_list");
-        xPromise.then(this._setList.bind(this), showError);
+        let xPromise = browser.storage.local.get("lexicon");
+        xPromise.then(this._load.bind(this), showError);
+    },
+
+    _load: function (dResult) {
+        if (dResult.hasOwnProperty("lexicon")) {
+            this.lFlexion = dResult.lexicon.lEntry;
+            oWidgets.setDictData(this.lFlexion, dResult.lexicon.sDate);    
+            oWidgets.displayTable(this.lFlexion);
+        }
+        if (this.lFlexion.length > 0) {
+            oWidgets.showElement("export_button");
+        } else {
+            oWidgets.hideElement("export_button");
+        }
+    },
+
+    addFlexions: function (lFlex) {
+        let n = lFlex.length;
+        for (let aFlex of lFlex) {
+            this.lFlexion.push(aFlex);
+        }
+        this.nAddedEntries += n;
+        this.nEntries += n;
+        oWidgets.addEntriesToTable(n, lFlex);
+    },
+
+    deleteEntry: function (iEntry) {
+        this.lFlexion[parseInt(iEntry)] = null;
+        this.nDeletedEntries++;
+        this.nEntries--;
     },
 
-    _setList: function (dResult) {
-        if (dResult.hasOwnProperty("lexicon_list")) {
-            this.lFlexion = dResult.lexicon_list;
-        }
-        oWidgets.displayTable(this.lFlexion);
+    resetData: function () {
+        this.nAddedEntries = 0;
+        this.nDeletedEntries = 0;
+        this.nEntries = this.lFlexion.length;
     },
 
     save: function () {
         oWidgets.hideElement("save_button");
         let lEntry = [];
@@ -522,20 +562,33 @@
         for (let e of this.lFlexion) {
             if (e !== null) {
                 lEntry.push(e);
             }
         }
-        browser.storage.local.set({ "lexicon_list": lEntry });
+        let sDate = this._getDate();
+        browser.storage.local.set({ "lexicon": {"lEntry": lEntry, "sDate": sDate} });
         this.lFlexion = lEntry;
-        oWidgets.displayTable(this.lFlexion);
         this.build();
+        this.resetData();
+        oWidgets.displayTable(this.lFlexion);
+        oWidgets.updateData();
+        oWidgets.setDictData(lEntry.length, sDate);
+    },
+
+    _getDate: function () {
+        let oDate = new Date();
+        let sMonth = (oDate.getMonth() + 1).toString(); // Because JS always sucks somehow.
+        if (sMonth.length == 1) sMonth =  "0" + sMonth;
+        let sDay = (oDate.getDay() < 10) ? "0"+oDate.getDay() : oDate.getDay();
+        return `${oDate.getFullYear()}-${sMonth}-${sDay} (${oDate.getHours()}:${oDate.getMinutes()})`;
     },
 
     build: function () {
         oWidgets.showElement("build_progress");
         let xProgressNode = document.getElementById("build_progress");
         let oDAWG = new DAWG(this.lFlexion, "Français - dictionnaire personnel", "S", xProgressNode);
+        oWidgets.hideElement("build_progress");
         let lMorph = oDAWG.morph("finis");
         console.log(lMorph);
     },
 
     export: function () {

Index: graphspell-js/dawg.js
==================================================================
--- graphspell-js/dawg.js
+++ graphspell-js/dawg.js
@@ -132,13 +132,12 @@
         lWord.sort();
         if (xProgressBarNode) {
             xProgressBarNode.value = 0;
             xProgressBarNode.max = lWord.length;
         }
-        let i = 0;
+        let i = 1;
         for (let aEntry of lWord) {
-            console.log(aEntry);
             this.insert(aEntry);
             if (xProgressBarNode) {
                 xProgressBarNode.value = i;
                 i += 1;
             }