diff --git a/Gruntfile.js b/Gruntfile.js
index 99fcd0489cb882da26d91768849d049bf9d007bc..c508723793692e5e9776a75d9cf3596e484ef7c1 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,4 +1,6 @@
 module.exports = function (grunt) {
+  "use strict";
+
   grunt.loadTasks("tasks");
 
   grunt.registerTask("default", ["bower-install-simple", "lint", "copy", "sass", "postcss", "requirejs:default", "inline"]);
diff --git a/app.js b/app.js
index d6a1227046a4d497727f361e8b2ae5480be74c8b..f2d4e3ca6c81f4b9e3808ada05fe6b55d3105ac7 100644
--- a/app.js
+++ b/app.js
@@ -1,3 +1,5 @@
+"use strict";
+
 require.config({
   baseUrl: "lib",
   paths: {
diff --git a/bower.json b/bower.json
index 717ee9b61dc0b4ff3752ee52ea28886bb0434904..99a54d227c4e5a1351c93649c7f9c540572e4237 100644
--- a/bower.json
+++ b/bower.json
@@ -18,7 +18,7 @@
     "es6-shim": "~0.35.1",
     "almond": "~0.3.2",
     "d3": "~3.5.17",
-    "roboto-fontface": "~0.3.0",
+    "roboto-fontface": "~0.4.5",
     "virtual-dom": "~2.1.1",
     "leaflet-providers": "~1.1.10",
     "rbush": "https://github.com/mourner/rbush.git#~1.4.3"
diff --git a/lib/about.js b/lib/about.js
index 5c2af90e2f5fe01ded6418d6651ada387c562e5a..6187421e26b184d49f836d6d0dda7fc7c925ac65 100644
--- a/lib/about.js
+++ b/lib/about.js
@@ -1,4 +1,6 @@
 define(function () {
+  "use strict";
+
   return function () {
     this.render = function (d) {
       var el = document.createElement("div");
diff --git a/lib/container.js b/lib/container.js
index 4f32a84a96ff4231ebd136db648af2b0ed381333..d799167c53bffc130c459f3d8c279748a325d89a 100644
--- a/lib/container.js
+++ b/lib/container.js
@@ -1,4 +1,6 @@
 define([], function () {
+  "use strict";
+
   return function (tag) {
     if (!tag) {
       tag = "div";
diff --git a/lib/datadistributor.js b/lib/datadistributor.js
index 3edeaf639dc5991d94c1a1289e4969f705ceb570..ea79341c00d0e4204a81426cf4ab6daaeaf44e28 100644
--- a/lib/datadistributor.js
+++ b/lib/datadistributor.js
@@ -1,4 +1,6 @@
 define(["filters/nodefilter"], function (NodeFilter) {
+  "use strict";
+
   return function () {
     var targets = [];
     var filterObservers = [];
diff --git a/lib/filters/filtergui.js b/lib/filters/filtergui.js
index 10629d7f05910e0a164e762cb05c9fc81fb3d9dd..4db1b4b4352e82eada019c7cfbe835e7ee1c0532 100644
--- a/lib/filters/filtergui.js
+++ b/lib/filters/filtergui.js
@@ -1,4 +1,6 @@
-define([], function () {
+define(function () {
+  "use strict";
+
   return function (distributor) {
     var container = document.createElement("ul");
     container.classList.add("filters");
diff --git a/lib/filters/genericnode.js b/lib/filters/genericnode.js
index c4fe7a9ea82cad0884b1861fcb339f3c42ea7e2c..253c38bafc83e3669f7f96bf79edd5088505b9a8 100644
--- a/lib/filters/genericnode.js
+++ b/lib/filters/genericnode.js
@@ -1,4 +1,6 @@
 define(["helper"], function (helper) {
+  "use strict";
+
   return function (name, key, value, f) {
     var negate = false;
     var refresh;
diff --git a/lib/filters/nodefilter.js b/lib/filters/nodefilter.js
index 1d6bf5fd6fcae0849dd5009ef3434f63767f1c79..68da15968f62dd60dc398b5a24f26ae127e2e211 100644
--- a/lib/filters/nodefilter.js
+++ b/lib/filters/nodefilter.js
@@ -1,4 +1,6 @@
-define([], function () {
+define(function () {
+  "use strict";
+
   return function (filter) {
     return function (data) {
       var n = Object.create(data);
diff --git a/lib/forcegraph.js b/lib/forcegraph.js
index 84fb39411cf963fa6d192a0218d364867ea11e10..ff944950a92dfcf3ed936c6956620d69ddd199ea 100644
--- a/lib/forcegraph.js
+++ b/lib/forcegraph.js
@@ -1,4 +1,6 @@
 define(["d3", "helper"], function (d3, helper) {
+  "use strict";
+
   var margin = 200;
   var NODE_RADIUS = 15;
   var LINE_RADIUS = 12;
diff --git a/lib/gui.js b/lib/gui.js
index 93ca0fd282effc41ed3e44d02237a397b6507682..43162bf6508b06266542d5749377a359c1218e5f 100644
--- a/lib/gui.js
+++ b/lib/gui.js
@@ -5,6 +5,8 @@ define(["chroma-js", "map", "sidebar", "tabs", "container", "meshstats",
   function (chroma, Map, Sidebar, Tabs, Container, Meshstats, Legend, Linklist,
             Nodelist, SimpleNodelist, Infobox, Proportions, ForceGraph,
             Title, About, DataDistributor, FilterGUI) {
+    "use strict";
+
     return function (config, router) {
       var self = this;
       var content;
diff --git a/lib/infobox/link.js b/lib/infobox/link.js
index 1f6697e02ac9a547268ce2d35bc974e1de1afaa0..990163e2fb23f27f55cbcfec1783b00e21e89c0b 100644
--- a/lib/infobox/link.js
+++ b/lib/infobox/link.js
@@ -1,4 +1,6 @@
 define(["helper"], function (helper) {
+  "use strict";
+
   function showStatImg(o, source, target) {
     var subst = {};
     subst["{SOURCE}"] = source;
diff --git a/lib/infobox/location.js b/lib/infobox/location.js
index 4695ac4f28ccbf927a586d7ac5644c0cbb62b8d9..fe4001185a5825b551e22d5a605c50abba5a77f9 100644
--- a/lib/infobox/location.js
+++ b/lib/infobox/location.js
@@ -1,4 +1,6 @@
 define(["helper"], function (helper) {
+  "use strict";
+
   return function (config, el, router, d) {
     var sidebarTitle = document.createElement("h2");
     sidebarTitle.textContent = "Location: " + d.toString();
diff --git a/lib/infobox/main.js b/lib/infobox/main.js
index 8f1ef4a48f88a366f9174abcf57e25903096966d..9690a2a76c558871f212e17539cfc6e7fb8c73ef 100644
--- a/lib/infobox/main.js
+++ b/lib/infobox/main.js
@@ -1,4 +1,6 @@
 define(["infobox/link", "infobox/node", "infobox/location"], function (Link, Node, Location) {
+  "use strict";
+
   return function (config, sidebar, router) {
     var self = this;
     var el;
diff --git a/lib/infobox/node.js b/lib/infobox/node.js
index a906ff521ef294bd5ba8901fc1a90a058f609c4e..2e854001165e705c1e1cd84c26f872ad4e2672d8 100644
--- a/lib/infobox/node.js
+++ b/lib/infobox/node.js
@@ -1,5 +1,7 @@
 define(["moment", "tablesort", "helper", "moment.de"],
   function (moment, Tablesort, helper) {
+    "use strict";
+
     function showGeoURI(d) {
       function showLatitude(d) {
         var suffix = Math.sign(d) > -1 ? "' N" : "' S";
diff --git a/lib/legend.js b/lib/legend.js
index b01782fdbfa4466e56fec3585a6aac6b14b58dab..20c0e9772a0315cee15c5a7f526e6289f13f7ca3 100644
--- a/lib/legend.js
+++ b/lib/legend.js
@@ -1,4 +1,6 @@
 define(function () {
+  "use strict";
+
   return function () {
     var self = this;
 
diff --git a/lib/linklist.js b/lib/linklist.js
index 597bc6d583b4c56d8a77b011770213f1ba574dec..c18c6d2518ad4bae1377054ed507cb984515aaf6 100644
--- a/lib/linklist.js
+++ b/lib/linklist.js
@@ -1,4 +1,6 @@
 define(["sorttable", "virtual-dom", "helper"], function (SortTable, V, helper) {
+  "use strict";
+
   function linkName(d) {
     return (d.source.node ? d.source.node.nodeinfo.hostname : d.source.id) + " – " + d.target.node.nodeinfo.hostname;
   }
diff --git a/lib/locationmarker.js b/lib/locationmarker.js
index 0f8c35ab75467bf9729178972277cef6a8e66055..a4a596f044f469c4313c4d673561c49b11fee4b0 100644
--- a/lib/locationmarker.js
+++ b/lib/locationmarker.js
@@ -1,4 +1,6 @@
 define(["leaflet"], function (L) {
+  "use strict";
+
   return L.CircleMarker.extend({
     outerCircle: {
       stroke: false,
diff --git a/lib/main.js b/lib/main.js
index e5bb777885ef4e9c815278d5c4420bccdb46a2d6..950dcc15051731b59801af6908485f5b20dec251 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -1,5 +1,7 @@
 define(["moment", "router", "leaflet", "gui", "helper", "moment.de"],
   function (moment, Router, L, GUI, helper) {
+    "use strict";
+
     return function (config) {
       function handleData(data) {
         var dataNodes = {};
diff --git a/lib/map.js b/lib/map.js
index 8456d1d7cf4e4a6ed49bd9a3bb9ec5024ec39635..4e205d58226ed2531c8db409009c96290cb2ffb5 100644
--- a/lib/map.js
+++ b/lib/map.js
@@ -2,6 +2,8 @@ define(["map/clientlayer", "map/labelslayer",
     "leaflet", "moment", "locationmarker", "rbush", "helper",
     "leaflet.label", "leaflet.providers", "moment.de"],
   function (ClientLayer, LabelsLayer, L, moment, LocationMarker, rbush, helper) {
+    "use strict";
+
     var options = {
       worldCopyJump: true,
       zoomControl: false
diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js
index 7579f4e25cb14476bb879b54cef1200d9c9c9b4d..1dc8cb709f4b03c37fd4f248011772e814805abf 100644
--- a/lib/map/clientlayer.js
+++ b/lib/map/clientlayer.js
@@ -1,5 +1,6 @@
 define(["leaflet"],
   function (L) {
+    "use strict";
 
     return L.TileLayer.Canvas.extend({
       setData: function (d) {
diff --git a/lib/map/labelslayer.js b/lib/map/labelslayer.js
index a6af979b22cf9ab9e9f5712d88f8a0c22daa7171..d54c4af1e48668958a2337dd9bc1e861a2d43393 100644
--- a/lib/map/labelslayer.js
+++ b/lib/map/labelslayer.js
@@ -1,5 +1,7 @@
 define(["leaflet", "rbush"],
   function (L, rbush) {
+    "use strict";
+
     var labelLocations = [["left", "middle", 0 / 8],
       ["center", "top", 6 / 8],
       ["right", "middle", 4 / 8],
diff --git a/lib/meshstats.js b/lib/meshstats.js
index 0501870ab2902df55562ad6ecb2c8242818ff738..1acaf43b190448b6dd31e74b9004e41ca49c1c4b 100644
--- a/lib/meshstats.js
+++ b/lib/meshstats.js
@@ -1,4 +1,6 @@
 define(["helper"], function (helper) {
+  "use strict";
+
   return function (config) {
     var self = this;
     var stats, timestamp;
diff --git a/lib/nodelist.js b/lib/nodelist.js
index c5d685a9ceb7df1534f44528041350d9f1c72a1f..85339863af67a61420be022ad7e3d3249363f973 100644
--- a/lib/nodelist.js
+++ b/lib/nodelist.js
@@ -1,4 +1,6 @@
 define(["sorttable", "virtual-dom", "helper"], function (SortTable, V, helper) {
+  "use strict";
+
   function getUptime(now, d) {
     if (d.flags.online && "uptime" in d.statistics) {
       return Math.round(d.statistics.uptime);
diff --git a/lib/proportions.js b/lib/proportions.js
index 67568299e0aa42ebf26eaee7c3ec3191e48193cd..31d45393fc56c8b2ebdc967999ef455976984d2d 100644
--- a/lib/proportions.js
+++ b/lib/proportions.js
@@ -1,5 +1,6 @@
 define(["chroma-js", "virtual-dom", "filters/genericnode", "helper"],
   function (Chroma, V, Filter, helper) {
+    "use strict";
 
     return function (config, filterManager) {
       var self = this;
diff --git a/lib/router.js b/lib/router.js
index d841d32e05eb2590e4265b6d634319a6d1725fef..7c9fc4a58137b5b9e883e3d603f6d1dec0009a27 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -1,4 +1,6 @@
 define(["helper"], function (helper) {
+  "use strict";
+
   return function () {
     var self = this;
     var objects = {nodes: {}, links: {}};
diff --git a/lib/sidebar.js b/lib/sidebar.js
index 4c839ccfd2a1113ce07c7a4158096f699e3e818e..f644c6ef4a31b638428f228b996c2ec958ae4870 100644
--- a/lib/sidebar.js
+++ b/lib/sidebar.js
@@ -1,4 +1,6 @@
-define([], function () {
+define(function () {
+  "use strict";
+
   return function (el) {
     var self = this;
 
diff --git a/lib/simplenodelist.js b/lib/simplenodelist.js
index 8ed0666d69fd2876a70fef01e5eb7b4dc3783348..30cd97d0dcb9e5ce320bf0bf92f77e5de7b2e5c3 100644
--- a/lib/simplenodelist.js
+++ b/lib/simplenodelist.js
@@ -1,4 +1,6 @@
 define(["moment", "virtual-dom", "helper", "moment.de"], function (moment, V, helper) {
+  "use strict";
+
   return function (nodes, field, router, title) {
     var self = this;
     var el, tbody;
diff --git a/lib/sorttable.js b/lib/sorttable.js
index 881efba6bbdae0d08108792c1ded1a98a151c0c0..2fc7353ed5946b9bb056a1ceb9631431bc8c2e4c 100644
--- a/lib/sorttable.js
+++ b/lib/sorttable.js
@@ -1,4 +1,6 @@
 define(["virtual-dom"], function (V) {
+  "use strict";
+
   return function (headings, sortIndex, renderRow) {
     var data;
     var sortReverse = false;
diff --git a/lib/tabs.js b/lib/tabs.js
index f4fed6d36c8ae495293fc0fae7899c26c1f4067d..701af292f41cd587724f4aecd557f15bec017726 100644
--- a/lib/tabs.js
+++ b/lib/tabs.js
@@ -1,4 +1,6 @@
-define([], function () {
+define(function () {
+  "use strict";
+
   return function () {
     var self = this;
 
diff --git a/lib/title.js b/lib/title.js
index 4c99c2c5ce9aa7276974809d87199d3ecfa2faa9..243c6bd2028b7579de4b74b8ae0e1a1eb0448e0a 100644
--- a/lib/title.js
+++ b/lib/title.js
@@ -1,4 +1,6 @@
 define(function () {
+  "use strict";
+
   return function (config) {
     function setTitle(d) {
       var title = [config.siteName];
diff --git a/lib/utils/helper.js b/lib/utils/helper.js
index 703f86a5698dde8353edf70e475ebc776c86c0e4..6a319322b7c89fde0e71542a5f78226da3f11666 100644
--- a/lib/utils/helper.js
+++ b/lib/utils/helper.js
@@ -1,3 +1,5 @@
+"use strict";
+
 define({
   get: function (url) {
     return new Promise(function (resolve, reject) {
@@ -77,7 +79,7 @@ define({
   },
 
   listReplace: function (s, subst) {
-    for (key in subst) {
+    for (var key in subst) {
       var re = new RegExp(key, "g");
       s = s.replace(re, subst[key]);
     }
diff --git a/tasks/build.js b/tasks/build.js
index 3a70fe88a184704687fea9ec3a740ae9d9b9ab41..4701cfb73fc5efd83d4a69d4d8a9e0ca2fdb948c 100644
--- a/tasks/build.js
+++ b/tasks/build.js
@@ -1,4 +1,6 @@
 module.exports = function (grunt) {
+  "use strict";
+
   grunt.config.merge({
     bowerdir: "bower_components",
     copy: {
diff --git a/tasks/clean.js b/tasks/clean.js
index ed0e2341838b6f263433c8ae68a447b0e15c5523..67181e0c42ae5177eea17b6847f251c733f986c2 100644
--- a/tasks/clean.js
+++ b/tasks/clean.js
@@ -1,4 +1,6 @@
 module.exports = function (grunt) {
+  "use strict";
+
   grunt.config.merge({
     clean: {
       build: ["build/**/*", "node_modules/grunt-newer/.cache"]
diff --git a/tasks/development.js b/tasks/development.js
index e9b312ed45cc1000a8f12aa9c473d03f92c1b1fd..938cd87d894c5edd3570d0bedbbb9a6537b81dea 100644
--- a/tasks/development.js
+++ b/tasks/development.js
@@ -1,4 +1,6 @@
 module.exports = function (grunt) {
+  "use strict";
+
   grunt.config.merge({
     connect: {
       server: {
diff --git a/tasks/linting.js b/tasks/linting.js
index 5409fd58e664a8f5e7bf15d44143e60fcf7248f4..6667d6874d42fbe608166a49382708b9c66d9596 100644
--- a/tasks/linting.js
+++ b/tasks/linting.js
@@ -1,4 +1,6 @@
 module.exports = function (grunt) {
+  "use strict";
+
   grunt.config.merge({
     checkDependencies: {
       options: {