diff --git a/CHANGES.md b/CHANGES.md
index 779201eba3a8b26f26b887d0a9c08ba1007205a5..14507e954a7c11d00e8516ea41f365b8b209eebf 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,9 @@
 # Changes
 
+## Development ()
+
+* **Update**: Updated TEI editor to address duplicate metadata issue
+
 ## 0.8.8 (02.12.2019)
 
 * **Bugfix**: Missing menu options in the editor
diff --git a/editor/static/editor/js/tei-editor.js b/editor/static/editor/js/tei-editor.js
index f99bb69a4cdb65734908ca1fcf0d5316f1a87c58..a8bdf42f97c4ca922e19a3490e04f21c1566660c 100644
--- a/editor/static/editor/js/tei-editor.js
+++ b/editor/static/editor/js/tei-editor.js
@@ -4849,11 +4849,20 @@ else{let r=[]
 for(let n=0;n<t.children.length;n++){let i=this.parseContentNode(t.children[n],e)
 i&&r.push(i)}n.content=r}else{let r=[]
 for(let n=0;n<t.children.length;n++){let i=this.parseContentNode(t.children[n],e)
-i&&r.push(i)}n.content=r}return n}}}}parseHeaderNode(t,e){let n=this.xpath.nodeIterator(t,e.tag),r=[],i=n.iterateNext()
+i&&r.push(i)}n.content=r}return n}}}}generatePermutations(t){if(t.length>1){let e=[]
+return this.generatePermutations(t.slice(1)).forEach(n=>{t[0].forEach(t=>{e.push([t].concat(n.slice(0)))})}),e}return t[0].map(t=>[t])}duplicateNode(t,e){let n=[],r=(e[0],e.map(e=>Xi([t,e.tag.substring(e.tag.indexOf(":")+1)])))
+return this.generatePermutations(r).forEach(r=>{let i=Yi([t])
+for(let t=0;t<e.length;t++)i[e[t].tag.substring(e[t].tag.indexOf(":")+1)]=r[t]
+n.push(i)}),n}parseHeaderNode(t,e){let n=this.xpath.nodeIterator(t,e.tag),r=[],i=n.iterateNext()
 for(;i;){let t={_attrs:{},_text:0===i.children.length?this.xpath.stringValue(i,"text()"):null}
 for(let e=0;e<i.attributes.length;e++)t._attrs[i.attributes[e].name]=i.attributes[e].value
-if(e.children)for(let n=0;n<e.children.length;n++){let r=this.parseHeaderNode(i,e.children[n])
-r&&(t[e.children[n].tag.substring(4)]=r)}r.push(t),i=n.iterateNext()}return 0===r.length?null:e.multiple?r:r[0]}parseHeader(t){let e=this.xpath.firstNode(this.dom.documentElement,t.tag),n={}
+if(e.children){e.deduplicate&&e.children.forEach(t=>{e.deduplicate.merge.forEach(e=>{t.tag===e.tag&&(t.multiple=!0)})})
+for(let n=0;n<e.children.length;n++){let r=this.parseHeaderNode(i,e.children[n])
+r&&(t[e.children[n].tag.substring(e.children[n].tag.indexOf(":")+1)]=r)}e.deduplicate&&e.children.forEach(t=>{e.deduplicate.merge.forEach(e=>{t.tag===e.tag&&(t.multiple=!1)})})}r.push(t),i=n.iterateNext()}if(0===r.length)return null
+if(e.multiple){if(e.deduplicate){let t=[]
+r.forEach(n=>{let r=!1
+e.deduplicate.merge.forEach(t=>{let e=Xi([n,t.tag.substring(t.tag.indexOf(":")+1)])
+e&&e.length>1&&(r=!0)}),r?t=t.concat(this.duplicateNode(n,e.deduplicate.merge)):t.append(n)}),r=t}return r}return r[0]}parseHeader(t){let e=this.xpath.firstNode(this.dom.documentElement,t.tag),n={}
 for(let r=0;r<t.schema.length;r++){let i=this.parseHeaderNode(e,t.schema[r])
 i&&(n[t.schema[r].tag.substring(4)]=i)}return n}parseMultiText(t){let e=this.xpath.firstNode(this.dom.documentElement,t.parser.selector)
 if(e){let n=[],r=this.xpath.nodeIterator(e,t.parts.parser.selector),i=r.iterateNext()
@@ -4879,11 +4888,17 @@ let t=n
 t.node=null,r.forEach(e=>{if(null===t.node||t.node===e.node)t.node=e.node,Object.entries(e.attrs).forEach(e=>{t.attrs[e[0]]?t.attrs[e[0]]=t.attrs[e[0]].concat(e[1]):t.attrs[e[0]]=e[1]})
 else{let n={node:e.node,attrs:e.attrs,children:[],text:t.text}
 t.text=null,t.children.push(n),t=n}})}else r.forEach(t=>{t.node&&(n.node=t.node),t.attrs&&Object.entries(t.attrs).forEach(t=>{n.attrs[t[0]]?n.attrs[t[0]]=n.attrs[t[0]].concat(t[1]):n.attrs[t[0]]=t[1]})})}}else t.content&&t.content.forEach(t=>{n.children.push(this.serializeTextNode(t,e))})
-return n}serializeHeader(t,e){return{node:"tei:TEI",children:[{node:e.tag,children:e.schema.map(e=>this.serializeMetadataNode(t[e.tag.substring(4)],e))}]}}serializeMetadataNode(t,e){if(e.multiple)return t.map(t=>{let n={node:e.tag}
+return n}serializeHeader(t,e){return{node:"tei:TEI",children:[{node:e.tag,children:e.schema.map(e=>this.serializeMetadataNode(t[e.tag.substring(4)],e))}]}}serializeMetadataNode(t,e){if(e.multiple){let n=t.map(t=>{let n={node:e.tag}
 if(t._text&&(n.text=t._text),t._attrs&&(n.attrs={},Object.entries(t._attrs).forEach(t=>{n.attrs[t[0]]=[t[1]]})),e.children){n.children=[]
 for(let r=0;r<e.children.length;r++)if(t[e.children[r].tag.substring(4)]){let i=this.serializeMetadataNode(t[e.children[r].tag.substring(4)],e.children[r])
 Array.isArray(i)?n.children=n.children.concat(i):n.children.push(i)}}return n})
-{let n={node:e.tag}
+if(e.deduplicate){let t=[],r=[]
+n.forEach(n=>{let i=Xi([n,e.deduplicate.key])
+i=i.length>0?i[0]:null
+let s=r.indexOf(i)
+if(s>=0){let r=t[s]
+n.children&&n.children.length>0&&e.deduplicate.merge.forEach(t=>{n.children.forEach(e=>{if(e.node===t.tag){let t=r.children.length,n=0
+r.children.forEach((r,i)=>{0===n&&r.node===e.node?n=1:1===n&&r.node!==e.node&&(n=2,t=i),r.node===e.node&&this.objectsMatch(r,e)&&(n=3)}),3!=n&&r.children.splice(t,0,e)}})})}else r.push(i),t.push(n)}),n=t}return n}{let n={node:e.tag}
 if(t&&(t._text&&(n.text=t._text),t._attrs&&(n.attrs={},Object.entries(t._attrs).forEach(t=>{n.attrs[t[0]]=[t[1]]})),e.children)){n.children=[]
 for(let r=0;r<e.children.length;r++)if(t[e.children[r].tag.substring(4)]){let i=this.serializeMetadataNode(t[e.children[r].tag.substring(4)],e.children[r])
 Array.isArray(i)?n.children=n.children.concat(i):n.children.push(i)}}return n}}serializeMultiText(t,e){let n={node:e.parts.serializer.tag,children:t.map(t=>this.serializeTextNode(t.text,e))}
diff --git a/package.json b/package.json
index 936d93b7b1c91b3e0aa04973cd1d5039c8979886..bbbb72c47825fdbf86daa628a62ddd81ea666b92 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
     "gulp-concat": "^2.6.1",
     "gulp-sass": "^4.0.2",
     "pump": "^3.0.0",
-    "tei-editor": "^0.3.2"
+    "tei-editor": "^0.4.0"
   },
   "browserslist": [
     "last 2 versions",
diff --git a/yarn.lock b/yarn.lock
index a8ea63c99934a833e803362f64087cdfde4298e9..4c3c368d6f83a8ab581324440a2882172a7122af 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2889,10 +2889,10 @@ tar@^4:
     safe-buffer "^5.1.2"
     yallist "^3.0.3"
 
-tei-editor@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/tei-editor/-/tei-editor-0.3.2.tgz#66e43b462d399e8c5681e77d7f1c5b396d388b1d"
-  integrity sha512-KUmfuo3/v+kcnahOa1GT4/x35gxFSzEM280sTEsCNQy+je3Z1pxREe22OfX/BuhqwZu/TEL2JdzGIgvqoxUHAA==
+tei-editor@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/tei-editor/-/tei-editor-0.4.0.tgz#19956b9be21326fba0c8c7c06fe322e5123ad181"
+  integrity sha512-8/vwtzsEoKHX6cBjTV6X5gubEbl7zgq7BaVeqgtVKw38NsUdIjEpOGeXEuOzTAUKzPawtE+K66iHcIj9LpcUcA==
 
 through2-filter@^3.0.0:
   version "3.0.0"