diff --git a/src/index.js b/src/index.js
index 1c5f9133df5ca1dd1ba723c09b8262c3efe98d54..e0de0ad7e003496804b6639baef4450389d9d5d7 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,10 +1,11 @@
 // src/index.js
+import m from 'mithril';
 import studydocList from './views/studydocList';
 import studydocNew from './views/studydocNew';
 import eventList from './views/eventList';
 import eventDetails from './views/eventDetails';
 import profile from './views/profile';
-import Layout from './views/layout';
+import layout from './views/layout';
 import amivLayout from './views/amiv/amivLayout';
 import amiv from './views/amiv';
 import login from './views/login';
@@ -13,62 +14,60 @@ import contact from './views/contact';
 import aufenthaltsraum from './views/amiv/aufenthaltsraum';
 import board from './views/amiv/board';
 
-const m = require('mithril');
-
 m.route(document.body, '/', {
   '/': {
     render() {
-      return m(Layout, m(amivLayout, m(amiv)));
+      return m(layout, m(amivLayout, m(amiv)));
     },
   },
   '/amiv/statuten': {
     render() {
-      return m(Layout, m(amivLayout, m(statuten)));
+      return m(layout, m(amivLayout, m(statuten)));
     },
   },
   '/contact': {
     render() {
-      return m(Layout, m(contact));
+      return m(layout, m(contact));
     },
   },
   '/amiv/aufenthaltsraum': {
     render() {
-      return m(Layout, m(amivLayout, m(aufenthaltsraum)));
+      return m(layout, m(amivLayout, m(aufenthaltsraum)));
     },
   },
   '/login': {
     render() {
-      return m(Layout, m(login));
+      return m(layout, m(login));
     },
   },
   '/amiv/board': {
     render() {
-      return m(Layout, m(amivLayout, m(board)));
+      return m(layout, m(amivLayout, m(board)));
     },
   },
   '/studydocuments': {
     render() {
-      return m(Layout, m(studydocList));
+      return m(layout, m(studydocList));
     },
   },
   '/studydocuments/new': {
     render() {
-      return m(Layout, m(studydocNew));
+      return m(layout, m(studydocNew));
     },
   },
   '/events': {
     render() {
-      return m(Layout, m(eventList));
+      return m(layout, m(eventList));
     },
   },
   '/events/:eventId': {
     render(vnode) {
-      return m(Layout, m(eventDetails, vnode.attrs));
+      return m(layout, m(eventDetails, vnode.attrs));
     },
   },
   '/profile': {
     render(vnode) {
-      return m(Layout, m(profile, vnode.attrs));
+      return m(layout, m(profile, vnode.attrs));
     },
   },
 });
diff --git a/src/models/auth.js b/src/models/auth.js
index c5afccdf4aa4211b5d5daedb861d9cfc7946eae9..a0844b653fd50186ba46d07ca8c4ea753710a572 100644
--- a/src/models/auth.js
+++ b/src/models/auth.js
@@ -1,8 +1,7 @@
+import m from 'mithril';
 import { apiUrl } from './config';
 import { log } from './log';
 
-const m = require('mithril');
-
 const APISession = {
   username: '',
   userId: '',
diff --git a/src/models/config.js b/src/models/config.js
index 53aeb3104aa261abc13eac0f7cdfa1476b0e3a68..32b291acecfb8830516649b7b97934440dd63067 100644
--- a/src/models/config.js
+++ b/src/models/config.js
@@ -1,3 +1,2 @@
-
 export const apiUrl = 'https://amiv-api.ethz.ch';
 export const verbose = true;
diff --git a/src/models/events.js b/src/models/events.js
index 197931b89bc7bf4cf036c6801ffe44845be93f8e..5c4fadbec433e461b3adcf3683c6097e42dc29eb 100644
--- a/src/models/events.js
+++ b/src/models/events.js
@@ -1,9 +1,8 @@
+import m from 'mithril';
 import { apiUrl } from './config';
 import { getToken, getUserId, isLoggedIn } from './auth';
 import { log } from './log';
 
-const m = require('mithril');
-
 const lang = 'de';
 const date = `${new Date().toISOString().split('.')[0]}Z`;
 
diff --git a/src/models/groups.js b/src/models/groups.js
index b33be04aa5cc589d28ad8f2df5da8dd1575a3d21..3b9fd88752e946d1e4c685cf645b19c25944efed 100644
--- a/src/models/groups.js
+++ b/src/models/groups.js
@@ -1,9 +1,8 @@
+import m from 'mithril';
 import { apiUrl } from './config';
 import { getToken, getUserId } from './auth';
 import { error } from './log';
 
-const m = require('mithril');
-
 let querySaved = '';
 
 export function getList() {
diff --git a/src/models/studydocs.js b/src/models/studydocs.js
index 004de969a9c4dead172efb2b9809f33d0787ddf0..7869724f91b60b9dddd318a732c4a88bd0846729 100644
--- a/src/models/studydocs.js
+++ b/src/models/studydocs.js
@@ -1,8 +1,7 @@
+import m from 'mithril';
 import { apiUrl } from './config';
 import { getToken } from './auth';
 
-const m = require('mithril');
-
 let querySaved = {};
 
 
diff --git a/src/models/user.js b/src/models/user.js
index 1e397c288616dfc05745e49505bbae7c03204cd9..916dc0f5c80bb5b2356f3a48aa8b200d11e48b06 100644
--- a/src/models/user.js
+++ b/src/models/user.js
@@ -1,9 +1,8 @@
+import m from 'mithril';
 import { apiUrl } from './config';
 import { getToken, getUserId } from './auth';
 import { log, error } from './log';
 
-const m = require('mithril');
-
 // update data of logged in user
 export function update(options) {
   log(this.user._etag);
diff --git a/src/views/amiv.js b/src/views/amiv.js
index 86f9ea239aee36633d58d0d4f0560fe1bd7e499e..9825ab7337a3d9543d568428a7bc74a463fdd55e 100644
--- a/src/views/amiv.js
+++ b/src/views/amiv.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 module.exports = {
   view() {
diff --git a/src/views/amiv/amivLayout.js b/src/views/amiv/amivLayout.js
index e8041447f139a2a568fc8d2b3bd0c7dcb90f2f3d..4acc8296cc9d16622f9255079db839a93ffe58f8 100644
--- a/src/views/amiv/amivLayout.js
+++ b/src/views/amiv/amivLayout.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 module.exports = {
   view(vnode) {
diff --git a/src/views/amiv/aufenthaltsraum.js b/src/views/amiv/aufenthaltsraum.js
index 2342b5859ef3968f80cab47e92f40ce3d0fe15ae..0947fb3a65f60c093df36b035aa19cc53b757f02 100644
--- a/src/views/amiv/aufenthaltsraum.js
+++ b/src/views/amiv/aufenthaltsraum.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 //  Link welcher zur Registrierung des Kaffe- und Bierautomaten.
 function getLink() {
diff --git a/src/views/amiv/board.js b/src/views/amiv/board.js
index ba67b2ac8b38190c74972161ea59ddb35827db4f..f7b667a5d2c512184fa346ec3a8225c28eada263 100644
--- a/src/views/amiv/board.js
+++ b/src/views/amiv/board.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 // TODO: Insert images
 
diff --git a/src/views/amiv/statuten.js b/src/views/amiv/statuten.js
index 72d55d1e877af7cac814c81ee459630c15148e63..b203bb12285c5c53b66948f12d33a234a2dab81f 100644
--- a/src/views/amiv/statuten.js
+++ b/src/views/amiv/statuten.js
@@ -2,7 +2,7 @@
 // HTML obtained by converting the 'statuten' LaTeX file using
 // pandoc amiv-statuten.tex -s -o amiv-statuten.html -t html5
 // TODO: As soon as we decide on a css framework we'll have to add some typography
-const m = require('mithril');
+import m from 'mithril';
 
 module.exports = {
   view() {
diff --git a/src/views/contact.js b/src/views/contact.js
index 607c3d34ae2e41d28dd31695673fa6ccb78961a4..375709743c2ac8d1adaa130426f27dcd37d84d6b 100644
--- a/src/views/contact.js
+++ b/src/views/contact.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 module.exports = {
   view() {
diff --git a/src/views/errors.js b/src/views/errors.js
index 8cd0124eadee5065c18fd2c687977580c683ada3..c868997d406b318e6bb4b4adcf3d9c154d554a8a 100644
--- a/src/views/errors.js
+++ b/src/views/errors.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 export class Error401 {
   static view() {
diff --git a/src/views/eventDetails.js b/src/views/eventDetails.js
index 31d045a91b5b85f7ea9f8e9e67e7dbd30d4e7e09..9beabaa46be1a7160c47d2faa9f80f1c6ee054af 100644
--- a/src/views/eventDetails.js
+++ b/src/views/eventDetails.js
@@ -1,3 +1,4 @@
+import m from 'mithril';
 import * as EmailValidator from 'email-validator';
 import * as events from '../models/events';
 import { log } from '../models/log';
@@ -5,8 +6,6 @@ import { isLoggedIn } from '../models/auth';
 import { inputGroup, submitButton } from './formFields';
 import JSONSchemaForm from './jsonSchemaForm';
 
-const m = require('mithril');
-
 class EventSignupForm extends JSONSchemaForm {
   oninit(vnode) {
     super.oninit(vnode);
diff --git a/src/views/eventList.js b/src/views/eventList.js
index 6943b18352b60335ef9edcbb855b07ce802e6948..a2d26d1520f7367cc21c9703cfd9ce9fa337820a 100644
--- a/src/views/eventList.js
+++ b/src/views/eventList.js
@@ -1,7 +1,6 @@
+import m from 'mithril';
 import * as events from '../models/events';
 
-const m = require('mithril');
-
 const date = `${new Date().toISOString().split('.')[0]}Z`;
 
 export default class EventList {
diff --git a/src/views/formFields.js b/src/views/formFields.js
index 5db38ae99d8516e88ecede8182bc175d2baf9750..8e5ae6bf439dc449991a796ae80fd9343feb8156 100644
--- a/src/views/formFields.js
+++ b/src/views/formFields.js
@@ -1,4 +1,4 @@
-const m = require('mithril');
+import m from 'mithril';
 
 export class inputGroup {
   constructor(vnode) {
diff --git a/src/views/jsonSchemaForm.js b/src/views/jsonSchemaForm.js
index 98887168b16231060edd4c7808314c5068652158..d3d010c01481efbd916b8d95d787c1834cbeae5c 100644
--- a/src/views/jsonSchemaForm.js
+++ b/src/views/jsonSchemaForm.js
@@ -1,9 +1,8 @@
+import m from 'mithril';
 import Ajv from 'ajv';
+import jsonSchemaDraft04 from 'ajv/lib/refs/json-schema-draft-04.json';
 import { inputGroup, selectGroup } from './formFields';
 
-const m = require('mithril');
-const jsonSchemaDraft04 = require('ajv/lib/refs/json-schema-draft-04.json');
-
 export default class JSONSchemaForm {
   constructor() {
     this.data = {};
diff --git a/src/views/layout.js b/src/views/layout.js
index fbe89b96ce4df48b349b9794a013a9f6fd62993b..6884b7d053b797b478d97558fcc53a4c82e0c3bb 100644
--- a/src/views/layout.js
+++ b/src/views/layout.js
@@ -1,6 +1,6 @@
+import m from 'mithril';
 import { checkLogin, isLoggedIn, logout } from '../models/auth';
 
-const m = require('mithril');
 
 const layoutLoggedOut = vnode => m('div', [
   m('nav', [
diff --git a/src/views/login.js b/src/views/login.js
index c4f2a1d51563a5b5155110dc2c3fb6d1dfa4e21f..f2855ae0cb0b0cbb6f6c00e1fa1c42ea42cd8352 100644
--- a/src/views/login.js
+++ b/src/views/login.js
@@ -1,7 +1,6 @@
+import m from 'mithril';
 import { login } from '../models/auth';
 
-const m = require('mithril');
-
 module.exports = {
   username: '',
   password: '',
diff --git a/src/views/profile.js b/src/views/profile.js
index 9194e11ea99d1709eaa27aad0773bbea0667e100..652f472cb363d29c004fb67c3ef1347b35f6139b 100644
--- a/src/views/profile.js
+++ b/src/views/profile.js
@@ -1,8 +1,8 @@
+import m from 'mithril';
 import { isLoggedIn } from '../models/auth';
 import * as user from '../models/user';
 import * as groups from '../models/groups';
 
-const m = require('mithril');
 
 // shows all relevant user information
 class showUserInfo {
diff --git a/src/views/studydocList.js b/src/views/studydocList.js
index bf404e1d6f2c4851bf1301cdd3786772875ee8fa..6368107c9e6910569685837f67353f616cc72b45 100644
--- a/src/views/studydocList.js
+++ b/src/views/studydocList.js
@@ -1,9 +1,9 @@
+import m from 'mithril';
 import * as studydocs from '../models/studydocs';
 import { apiUrl } from '../models/config';
 import { isLoggedIn } from '../models/auth';
 import { Error401 } from './errors';
 
-const m = require('mithril');
 
 const tableHeadings = [
   'title', 'lecture', 'professor', 'semester', 'author', 'download',
diff --git a/src/views/studydocNew.js b/src/views/studydocNew.js
index c18b804032490c1520f405c03016723ad9b41c89..ab41b23f228d11780d496543c69d116015dd8364 100644
--- a/src/views/studydocNew.js
+++ b/src/views/studydocNew.js
@@ -1,3 +1,4 @@
+import m from 'mithril';
 // import Ajv from 'ajv';
 import * as studydocs from '../models/studydocs';
 // import { apiUrl } from '../models/config';
@@ -5,7 +6,6 @@ import { isLoggedIn } from '../models/auth';
 import { log } from '../models/log';
 import { Error401 } from './errors';
 
-const m = require('mithril');
 
 // TODO: add validate