diff --git a/frontend/package.json b/frontend/package.json
index 26eabfaa98b868937689e423ba821b8b708d3f3b..3cb7fbbd3ebed9f20fda68fa6336a95cf695e562 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -17,7 +17,9 @@
     "bootstrap-vue": "^2.0.0",
     "cookieparser": "^0.1.0",
     "debounce": "^1.2.0",
+    "file-saver": "^2.0.2",
     "js-cookie": "^2.2.1",
+    "jszip": "^3.4.0",
     "nuxt": "^2.0.0",
     "nuxt-dropzone": "^1.0.4",
     "vue-json-viewer": "^2.2.11",
diff --git a/frontend/pages/main/pascal.vue b/frontend/pages/main/pascal.vue
index e5190986912531765329998a2a485b7a668653ad..4c104a4b385b903f30ba6e2f230e2db535ab957f 100644
--- a/frontend/pages/main/pascal.vue
+++ b/frontend/pages/main/pascal.vue
@@ -52,6 +52,8 @@ import pascalMethods from '~/mixins/outputs/pascalMethods'
 import Convert from 'xml-js'
 import Label from '~/components/label/Label'
 import Dropdown from '~/components/dropdown/Dropdown'
+import JSZip from 'jszip'
+import { saveAs } from 'file-saver'
 
 export default {
   components: {
@@ -70,17 +72,22 @@ export default {
   methods: {
     async getPascalXML () {
       this.pascalJSON = {}
-      var newPascalJSON = {"annotation": []}
       var allImages = await this.getAllImages()
       if (allImages) {
+        // Generate zip file
+        var zip = new JSZip()
+        // Get information about labels
         var allLabels = await this.getAllLabel()
+        // These methods are available in mixins
         await this.setImagesAttr(allImages)
         await this.getObjectsAttr(allLabels)
-        console.log('pascal: ', this.pascalJSON)
         for (var key in this.pascalJSON) {
-          newPascalJSON["annotation"].push(this.pascalJSON[key])
+          var xml = this.convertToXML(this.pascalJSON[key])
+          zip.file(this.pascalJSON[key].filename + '.xml', xml)
         }
-        return newPascalJSON
+        zip.generateAsync({type:'blob'}).then((content) => {
+          saveAs(content, this.dataset)
+        })
       }
     },
     async setImagesAttr (allImages) {
@@ -99,16 +106,7 @@ export default {
       return result
     },
     async downloadXML() {
-      var filename = 'XMLFile.xml'
-      var element = document.createElement('a')
-      var newPascalJSON = await this.getPascalXML()
-      var xml = this.convertToXML(newPascalJSON)
-      element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(xml))
-      element.setAttribute('download',filename)
-      element.style.display = 'none'
-      document.body.appendChild(element)
-      element.click()
-      document.body.removeChild(element)
+      await this.getPascalXML()
     } 
   }
 }