diff --git a/frontend/src/components/SubmissionTests.vue b/frontend/src/components/SubmissionTests.vue
index 222bcfc0a298118af20910b87dd68ee06890e5ee..d782693f54b81eb141b0c4dc9d480c4ec049e103 100644
--- a/frontend/src/components/SubmissionTests.vue
+++ b/frontend/src/components/SubmissionTests.vue
@@ -38,7 +38,7 @@ export default {
     },
     expand: {
       type: Boolean,
-      default: false
+      default: true
     }
   },
   data () {
diff --git a/frontend/src/components/SubmissionType.vue b/frontend/src/components/SubmissionType.vue
index 65f694bd08a8db6a027e6443427555abca458925..77baa06c517699677d734ef1c2ae1d2370ee8938 100644
--- a/frontend/src/components/SubmissionType.vue
+++ b/frontend/src/components/SubmissionType.vue
@@ -2,11 +2,10 @@
   <v-layout column>
     <v-card>
       <v-card-title class="title mb-2">{{ name }} - Full score: {{ fullScore }}</v-card-title>
-      <v-expansion-panel expand>
+      <v-expansion-panel expand v-model="expanded">
         <v-expansion-panel-content
           v-for="(item, i) in typeItems"
           :key="i"
-          :value="expandedByDefault[item.title]"
         >
           <div slot="header"><b>{{ item.title }}</b></div>
           <v-card
@@ -31,72 +30,74 @@
   </v-layout>
 </template>
 
-<script>
+<script lang="ts">
+import {Vue, Component, Prop} from 'vue-property-decorator'
 import {highlight} from 'highlight.js'
 import {UI} from '@/store/modules/ui'
 
-export default {
-  name: 'submission-type',
-  props: {
-    name: {
-      type: String,
-      required: true
-    },
-    description: {
-      type: String,
-      required: true
-    },
-    solution: {
-      type: String,
-      required: true
-    },
-    fullScore: {
-      type: Number,
-      required: true
-    },
-    programmingLanguage: {
-      type: String,
-      default: 'c'
-    },
-    reverse: {
-      type: Boolean,
-      default: false
-    },
-    expandedByDefault: {
-      type: Object,
-      default: function () {
-        return {
-          Description: true,
-          Solution: true
-        }
+@Component
+export default class SubmissionType extends Vue {
+  @Prop({
+    type: String,
+    required: true
+  }) name!: string
+  @Prop({
+    type: String,
+    required: true
+  }) description!: string
+  @Prop({
+    type: String,
+    required: true
+  }) solution!: string
+  @Prop({
+    type: Number,
+    required: true
+  }) fullScore!: number
+  @Prop({
+    type: String,
+    default: 'c'
+  }) programmingLanguage!: string
+  @Prop({
+    type: Boolean,
+    default: false
+  }) reverse!: boolean
+  @Prop({
+    type: Object,
+    default: function () {
+      return {
+        Description: true,
+        Solution: true
       }
     }
-  },
-  computed: {
-    typeItems () {
-      let items = [
-        {
-          title: 'Description',
-          text: this.description
-        },
-        {
-          title: 'Solution',
-          text: this.solution
-        }
-      ]
-      if (this.reverse) {
-        return items.reverse()
-      } else {
-        return items
+  }) expandedByDefault!: {Description: boolean, Solution: boolean}
+
+  expanded = this.reverse
+    ? [this.expandedByDefault.Description, this.expandedByDefault.Solution]
+    : [this.expandedByDefault.Solution, this.expandedByDefault.Description]
+
+  get typeItems () {
+    let items = [
+      {
+        title: 'Description',
+        text: this.description
+      },
+      {
+        title: 'Solution',
+        text: this.solution
       }
-    },
-    highlightedSolution () {
-      return highlight(this.programmingLanguage, this.solution, true).value
-    },
-    backgroundColor () {
-      return UI.state.darkMode ? 'grey' : '#F3F3F3'
+    ]
+    if (this.reverse) {
+      return items.reverse()
+    } else {
+      return items
     }
   }
+  get highlightedSolution () {
+    return highlight(this.programmingLanguage, this.solution, true).value
+  }
+  get backgroundColor () {
+    return UI.state.darkMode ? 'grey' : '#F3F3F3'
+  }
 }
 </script>
 
diff --git a/frontend/src/components/student/ExamInformation.vue b/frontend/src/components/student/ExamInformation.vue
index 6c079e8fed3207b282375c72347978d9e9da2020..a2656442904a862395c6a903f533d33d7859c982 100644
--- a/frontend/src/components/student/ExamInformation.vue
+++ b/frontend/src/components/student/ExamInformation.vue
@@ -20,9 +20,12 @@
   </table>
 </template>
 
-<script>
-export default {
-  name: 'exam-information',
-  props: ['exam']
+<script lang="ts">
+import {Vue, Component, Prop} from 'vue-property-decorator'
+import { Exam } from '@/models';
+
+@Component
+export default class ExamInformation extends Vue {
+  @Prop(Object) exam!: Exam
 }
 </script>
diff --git a/frontend/src/components/student_list/StudentList.vue b/frontend/src/components/student_list/StudentList.vue
index 1e2c0e72ff2b84ebe36520afa72debb9b6c8ff53..3ef8a6ef7a48383fbbc54565f0e2205a7713f84a 100644
--- a/frontend/src/components/student_list/StudentList.vue
+++ b/frontend/src/components/student_list/StudentList.vue
@@ -109,6 +109,7 @@ import {mapActions, mapState} from 'vuex'
 import StudentListMenu from '@/components/student_list/StudentListMenu'
 import StudentListReverseMapper from '@/components/student_list/StudentListReverseMapper'
 import { changeActiveForUser } from '@/api'
+import { getters } from '@/store/getters';
 
 export default {
   components: {
@@ -137,7 +138,7 @@ export default {
       'students'
     ]),
     submissionTypeHeaders () {
-      const subTypes = Object.values(this.$store.state.submissionTypes)
+      const subTypes = Object.values(getters.state.submissionTypes)
       return subTypes.map(type => {
         return {
           pk: type.pk,