diff --git a/frontend/src/components/mixins/mixins.ts b/frontend/src/components/mixins/mixins.ts
index bee6fc96f26736009064cc15d2944432acaedf2d..4b93f298605e53630e007eda72b1fba7206d89a1 100644
--- a/frontend/src/components/mixins/mixins.ts
+++ b/frontend/src/components/mixins/mixins.ts
@@ -1,4 +1,4 @@
-import { Vue, Component } from 'vue-property-decorator'
+import { Vue, Component, Mixins } from 'vue-property-decorator'
 import { fetchStudentExportData, StudentExportItem, InstanceExportData, fetchInstanceExportData } from '@/api'
 import { getters } from '@/store/getters'
 import { mutations as mut } from '@/store/mutations'
@@ -9,21 +9,9 @@ export enum ExportType {
 }
 
 @Component
-export class exportMixin extends Vue {
-  exportDialog = true
-  mapFile: File | null = null
-  setPasswords = false
-  exportType = ExportType.CSV
-
-  get mapFileLoaded () {
-    return Object.keys(getters.state.studentMap).length > 0
-  }
-
-  get availableExportTypes (): ExportType[] {
-    return Object.values(ExportType)
-  }
-
+export class parseCSVMapMixin extends Vue {
   parseCSVMap (csvMap: string) {
+    console.log('parsing')
     let lines = csvMap.split('\n')
     lines.shift() // drop the first line since it contains only headings
     // TODO remove any type
@@ -35,6 +23,22 @@ export class exportMixin extends Vue {
       return acc
     }, {})
   }
+}
+
+@Component
+export class exportMixin extends Mixins(Vue, parseCSVMapMixin) {
+  exportDialog = true
+  mapFile: File | null = null
+  setPasswords = false
+  exportType = ExportType.CSV
+
+  get mapFileLoaded () {
+    return Object.keys(getters.state.studentMap).length > 0
+  }
+
+  get availableExportTypes (): ExportType[] {
+    return Object.values(ExportType)
+  }
 
   async getExportFile (type: string) {
     let studentData