diff --git a/.travis.yml b/.travis.yml
index 4f63cd409b8b585b53a94d3c717eb09b0fa74e0f..5dbf907d875e61eeae9e582c76638cf0a19f8596 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,6 @@
 dist: xenial
 language: node_js
-install: npm install
+install: npm ci
 
 cache:
   directories:
diff --git a/package-lock.json b/package-lock.json
index 9ccda10e755fe948c68a70ce7e7d9103f5ad4743..46e7c65662ff90a3a8fc3990ecf4f141fda27cf8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -375,9 +375,9 @@
       }
     },
     "@types/chai": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.5.2.tgz",
-      "integrity": "sha1-wRzSgX06QBt7oPWkIPNcVhObHB4=",
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz",
+      "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==",
       "dev": true
     },
     "@types/color-name": {
@@ -426,9 +426,9 @@
       "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
     },
     "@types/js-yaml": {
-      "version": "3.12.1",
-      "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.1.tgz",
-      "integrity": "sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==",
+      "version": "3.12.5",
+      "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.5.tgz",
+      "integrity": "sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==",
       "dev": true
     },
     "@types/keyv": {
@@ -440,14 +440,14 @@
       }
     },
     "@types/mime": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz",
-      "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw=="
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz",
+      "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q=="
     },
     "@types/mocha": {
-      "version": "5.2.7",
-      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
-      "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz",
+      "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==",
       "dev": true
     },
     "@types/node": {
diff --git a/src/discordas.ts b/src/discordas.ts
index fa4d5b5f3f022e10f8724d71c5ed1e46d8d21a7f..be4b204cf177d799216fb1616a6c9c982417c2c6 100644
--- a/src/discordas.ts
+++ b/src/discordas.ts
@@ -133,7 +133,11 @@ async function run() {
     if (!port) {
         throw Error("Port not given in command line or config file");
     }
-    config.applyConfig(yaml.safeLoad(fs.readFileSync(configPath, "utf8")));
+    const readConfig = yaml.safeLoad(fs.readFileSync(configPath, "utf8"));
+    if (typeof readConfig !== "object") {
+        throw Error("Config is not of type object");
+    }
+    config.applyConfig(readConfig);
     Log.Configure(config.logging);
     if (config.database.roomStorePath || config.database.userStorePath) {
         log.error("The keys 'roomStorePath' and/or 'userStorePath' is still defined in the config. " +
diff --git a/tools/addbot.ts b/tools/addbot.ts
index 2dda777537df95d53e6cbb8bdaed47175e89b2f6..d505fddd9045036e4822aa37bf62889509803ec8 100644
--- a/tools/addbot.ts
+++ b/tools/addbot.ts
@@ -23,6 +23,7 @@ import * as fs from "fs";
 import * as args from "command-line-args";
 import * as usage from "command-line-usage";
 import { Util } from "../src/util";
+import { DiscordBridgeConfig } from "../src/config";
 
 const optionDefinitions = [
   {
@@ -59,9 +60,8 @@ if (options.help) {
 }
 
 const yamlConfig = yaml.safeLoad(fs.readFileSync(options.config, "utf8"));
-if (yamlConfig === null) {
-  console.error("You have an error in your discord config.");
+if (yamlConfig === null || typeof yamlConfig !== "object") {
+  throw Error("You have an error in your discord config.");
 }
-
-const url = Util.GetBotLink(yamlConfig);
+const url = Util.GetBotLink(yamlConfig as DiscordBridgeConfig);
 console.log(`Go to ${url} to invite the bot into a guild.`);
diff --git a/tools/toolshelper.ts b/tools/toolshelper.ts
index 1449f13aa0e5c7293c50ac170b7d54572df179e2..1bd3c49b317d94203cc5b45d677d9acb99bc40b8 100644
--- a/tools/toolshelper.ts
+++ b/tools/toolshelper.ts
@@ -1,5 +1,5 @@
 import { DiscordBridgeConfig } from "../src/config";
-import { Appservice } from "matrix-bot-sdk";
+import { Appservice, IAppserviceRegistration } from "matrix-bot-sdk";
 import { DiscordStore } from "../src/store";
 import * as yaml from "js-yaml";
 import * as fs from "fs";
@@ -15,7 +15,7 @@ export class ToolsHelper {
         const config: DiscordBridgeConfig = Object.assign(
             new DiscordBridgeConfig(), yaml.safeLoad(fs.readFileSync(configFile, "utf8")));
         config.applyEnvironmentOverrides(process.env);
-        if (registration === null) {
+        if (registration === null || typeof registration !== "object") {
             throw Error("Failed to parse registration file");
         }
 
@@ -24,7 +24,8 @@ export class ToolsHelper {
             homeserverName: config.bridge.domain,
             homeserverUrl: config.bridge.homeserverUrl,
             port: 0,
-            registration,
+            // We assume the registration is well formed
+            registration: registration as IAppserviceRegistration,
         });
 
         const store = needsStore ? new DiscordStore(config.database ? config.database.filename : "discord.db") : null;
diff --git a/tools/userClientTools.ts b/tools/userClientTools.ts
index 0aadc222ea6f8f4e4aa73d43429e922de2e8e409..a6d923f7899075f7ebb8eba544735d94f2ac87fa 100644
--- a/tools/userClientTools.ts
+++ b/tools/userClientTools.ts
@@ -71,7 +71,7 @@ if (options.help || (options.add && options.remove) || !(options.add || options.
     process.exit(0);
 }
 
-const config: DiscordBridgeConfig = yaml.safeLoad(fs.readFileSync(options.config, "utf8"));
+const config: DiscordBridgeConfig = yaml.safeLoad(fs.readFileSync(options.config, "utf8")) as DiscordBridgeConfig;
 const discordstore = new DiscordStore(config.database ? config.database : "discord.db");
 discordstore.init().then(() => {
     log.info("Loaded database.");