diff --git a/.eslintrc b/.eslintrc
new file mode 100644
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,273 @@
+{
+	"extends": ["prettier"],
+	"parserOptions": {
+		"sourceType": "module",
+		"ecmaFeatures": {
+			"jsx": true
+		},
+		"ecmaVersion": 2018
+	},
+	"plugins": ["react"],
+	"env": {
+		"browser": true,
+		"es6": true,
+		"node": true,
+		"jest": true
+	},
+	"rules": {
+		"for-direction": 0,
+		//: "getter-return": 2,
+		//: "no-async-promise-executor": 1,
+		//: "no-await-in-loop": 1,
+		// "no-compare-neg-zero": 2,
+		// "no-cond-assign": 2,
+		// "no-console": ["error", { "allow": ["warn", "error"] }],
+		// "no-constant-condition": 2,
+		// "no-control-regex": 2,
+		// "no-debugger": 2,
+		// "no-dupe-args": 2,
+		// "no-dupe-keys": 2,
+		// "no-duplicate-case": 2,
+		// "no-empty": 2,
+		// "no-empty-character-class": 2,
+		// "no-ex-assign": 2,
+		"no-extra-boolean-cast": 2,
+		"no-extra-parens": 0,
+		"no-extra-semi": 0,
+		// "no-func-assign": 2,
+		// "no-inner-declarations": 2,
+		// "no-invalid-regexp": 2,
+		"no-irregular-whitespace": 0,
+		// "no-misleading-character-class": 2,
+		// "no-obj-calls": 2,
+		// "no-prototype-builtins": 2,
+		"no-regex-spaces": 0,
+		// "no-sparse-arrays": 2,
+		// "no-template-curly-in-string": 1,
+		// "no-unexpected-multiline": 1,
+		// "no-unreachable": 2,
+		// "no-unsafe-finally": 1,
+		"no-unsafe-negation": 2,
+		// "require-atomic-updates": 2,
+		// "use-isnan": 2,
+		"valid-jsdoc": 0,
+		// "valid-typeof": 2,
+		"accessor-pairs": 0,
+		// FIX: "array-callback-return": 2,
+		// "block-scoped-var": 1,
+		// FIX: "class-methods-use-this": 2,
+		// "complexity": 1,
+		// "consistent-return": 2,
+		"curly": 0,
+		// "default-case": 2,
+		"dot-location": 0,
+		"dot-notation": 2,
+		"eqeqeq": 2,
+		"guard-for-in": 0,
+		"max-classes-per-file": 0,
+		"no-alert": 0,
+		"no-caller": 0,
+		// "no-case-declarations": 1,
+		"no-div-regex": 0,
+		"no-else-return": 2,
+		"no-empty-function": 0,
+		// "no-empty-pattern": 2,
+		// "no-eq-null": 2,
+		// "no-eval": 2,
+		// "no-extend-native": 2,
+		// "no-extra-bind": 0
+		"no-extra-label": 2,
+		// "no-fallthrough": 2,
+		"no-floating-decimal": 2,
+		// "no-global-assign": 2,
+		"no-implicit-coercion": 2,
+		"no-implicit-globals": 0,
+		"no-implied-eval": 0,
+		"no-invalid-this": 0,
+		// "no-iterator": 2,
+		// "no-labels": 2,
+		// "no-lone-blocks": 2,
+		// "no-loop-func": 2,
+		"no-magic-numbers": 0,
+		"no-multi-spaces": 0,
+		// "no-multi-str": 2,
+		"no-new": 0,
+		// "no-new-func": 2,
+		// "no-new-wrappers": 2,
+		// "no-octal": 2,
+		// "no-octal-escape": 2,
+		// "no-param-reassign": 2,
+		// "no-proto": 2,
+		// "no-redeclare": 2,
+		"no-restricted-properties": 0,
+		// "no-return-assign": 2,
+		// "no-return-await": 2,
+		"no-script-url": 0,
+		// "no-self-assign": 2,
+		// "no-self-compare": 2,
+		// "no-sequences": 2,
+		// refactor with assert_async_throws "no-throw-literal": 2,
+		"no-unmodified-loop-condition": 0,
+		// "no-unused-expressions": 2,
+		// "no-unused-labels": 2,
+		"no-useless-call": 0,
+		// "no-useless-concat": 2,
+		// "no-useless-escape": 2,
+		"no-useless-return": 2,
+		// "no-void": 2,
+		"no-warning-comments": 0,
+		// "no-with": 2,
+		// "prefer-promise-reject-errors": 2,
+		// "radix": 2,
+		"require-await": 0,
+		"require-unicode-regexp": 0,
+		"vars-on-top": 0,
+		"wrap-iife": 0,
+		"yoda": 2,
+		"strict": 2,
+		"init-declarations": 0,
+		// "no-delete-var": 2,
+		// "no-label-var": 2,
+		"no-restricted-globals": 0,
+		// "no-shadow": 2,
+		// "no-shadow-restricted-names": 2,
+		// "no-undef": 1,
+		"no-undef-init": 0,
+		// "no-undefined": 2,
+		// "no-unused-vars": ["error", { "args": "none" }],
+		// "no-use-before-define": ["error", { "variables": true }],
+		"callback-return": 0,
+		// "global-require": 2,
+		// "handle-callback-err": 1,
+		"no-buffer-constructor": 0,
+		// "no-mixed-requires": 2,
+		"no-new-require": 0,
+		// "no-path-concat": 1,
+		"no-process-env": 0,
+		"no-process-exit": 0,
+		"no-restricted-modules": 0,
+		// "no-sync": 2,
+		"array-bracket-newline": 0,
+		"array-bracket-spacing": 0,
+		"array-element-newline": 0,
+		"block-spacing": 0,
+		"brace-style": 0,
+		"camelcase": 0,
+		"capitalized-comments": 0,
+		"comma-dangle": 0,
+		"comma-spacing": 0,
+		"comma-style": 0,
+		"computed-property-spacing": 0,
+		"consistent-this": 0,
+		"eol-last": ["error", "always"],
+		"func-call-spacing": 0,
+		"func-name-matching": 0,
+		"func-names": 0,
+		"func-style": 0,
+		"function-paren-newline": 0,
+		"id-blacklist": 0,
+		"id-length": 0,
+		"id-match": 0,
+		"implicit-arrow-linebreak": 0,
+		"indent": 0,
+		"jsx-quotes": 0,
+		"key-spacing": 0,
+		"keyword-spacing": 0,
+		"line-comment-position": 0,
+		"linebreak-style": 0,
+		"lines-around-comment": 0,
+		// FIX "lines-between-class-members": "error",
+		"max-depth": 0,
+		"max-len": 0,
+		// "max-lines": ["error", { "max": 400 }],
+		// "max-lines-per-function": ["error", 60],
+		"max-nested-callbacks": 0,
+		// "max-params": ["error", 3],
+		"max-statements": 0,
+		"max-statements-per-line": 0,
+		"multiline-comment-style": 0,
+		"multiline-ternary": 0,
+		// "new-cap": 2,
+		"new-parens": 2,
+		"newline-per-chained-call": 0,
+		// "no-array-constructor": 2,
+		// "no-bitwise": 2,
+		"no-continue": 0,
+		"no-inline-comments": 0,
+		"no-lonely-if": 2,
+		"no-mixed-operators": 0,
+		"no-mixed-spaces-and-tabs": 0,
+		"no-multi-assign": 0,
+		"no-multiple-empty-lines": 0,
+		// "no-negated-condition": 2,
+		"no-nested-ternary": 2,
+		"no-new-object": 0,
+		"no-plusplus": 0,
+		"no-tabs": 0,
+		"no-ternary": 0,
+		"no-trailing-spaces": 0,
+		"no-underscore-dangle": 0,
+		"no-unneeded-ternary": 2,
+		"no-whitespace-before-property": 0,
+		"nonblock-statement-body-position": 0,
+		"object-curly-newline": 0,
+		"object-curly-spacing": 0,
+		"object-property-newline": 0,
+		"one-var": 0,
+		"one-var-declaration-per-line": 0,
+		"operator-assignment": 0,
+		"operator-linebreak": 0,
+		"padded-blocks": 0,
+		"padding-line-between-statements": 0,
+		// FIX "prefer-object-spread": 1,
+		"quote-props": 0,
+		"quotes": 0,
+		"require-jsdoc": 0,
+		"semi": 0,
+		"semi-spacing": 0,
+		"semi-style": 0,
+		"sort-keys": 0,
+		"sort-vars": 0,
+		"space-before-blocks": 0,
+		"space-before-function-paren": 0,
+		"space-in-parens": 0,
+		"space-infix-ops": 0,
+		"space-unary-ops": 0,
+		"spaced-comment": 0,
+		"switch-colon-spacing": 0,
+		"template-tag-spacing": 0,
+		"unicode-bom": 0,
+		"wrap-regex": 0,
+		"arrow-body-style": 0,
+		"arrow-parens": 0,
+		"arrow-spacing": 0,
+		// "constructor-super": 1,
+		"generator-star-spacing": 0,
+		"no-class-assign": 0,
+		"no-confusing-arrow": 0,
+		// "no-const-assign": 2,
+		// "no-dupe-class-members": 2,
+		// "no-duplicate-imports": 2,
+		// "no-new-symbol": 2,
+		"no-restricted-imports": 0,
+		// "no-this-before-super": 2,
+		"no-useless-computed-key": 2,
+		// "no-useless-constructor": 2,
+		"no-useless-rename": 2,
+		"no-var": 2,
+		"object-shorthand": 2,
+		"prefer-arrow-callback": 2,
+		"prefer-const": 0,
+		"prefer-destructuring": 0,
+		"prefer-numeric-literals": 0,
+		"prefer-rest-params": 0,
+		"prefer-spread": 0,
+		"prefer-template": 2,
+		"require-yield": 0,
+		"rest-spread-spacing": 0,
+		"sort-imports": 0,
+		"symbol-description": 0,
+		"template-curly-spacing": 0,
+		"yield-star-spacing": 0
+	}
+}
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1 @@
+{ "tabWidth": 4, "trailingComma": "es5", "useTabs": true }
diff --git a/lib/action.js b/lib/action.js
--- a/lib/action.js
+++ b/lib/action.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const SubjectPath = locreq("lib/data-structures/subject-path.js");
 const Promise = require("bluebird");
diff --git a/lib/app/app.js b/lib/app/app.js
--- a/lib/app/app.js
+++ b/lib/app/app.js
@@ -106,10 +106,7 @@
 	}
 
 	createChip(constructor, declaration) {
-		const chip = new constructor(
-			this,
-			declaration
-		);
+		const chip = new constructor(this, declaration);
 		this.ChipManager.add_chip(
 			constructor.type_name,
 			declaration.name,
diff --git a/lib/app/base-chips/access-strategy-types/and.js b/lib/app/base-chips/access-strategy-types/and.js
--- a/lib/app/base-chips/access-strategy-types/and.js
+++ b/lib/app/base-chips/access-strategy-types/and.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const AccessStrategy = locreq("lib/chip-types/access-strategy.js");
@@ -11,30 +10,29 @@
 module.exports = function(app) {
 	const and = {
 		name: "and",
-		getRestrictingQuery: async function(context, params) {
+		async getRestrictingQuery(context, params) {
 			const access_strategies = parse_params(app, params);
 			const queries = await Promise.map(access_strategies, strategy =>
 				strategy.getRestrictingQuery(context)
 			);
 			return new Query.And(...queries);
 		},
-		item_sensitive: function(params) {
+		item_sensitive(params) {
 			const access_strategies = parse_params(app, params);
-			return Promise.map(access_strategies, function(access_strategy) {
+			return Promise.map(access_strategies, access_strategy => {
 				return access_strategy.is_item_sensitive();
 			}).reduce((a, b) => a || b);
 		},
-		checker_function: function(context, params, item) {
-			return and.item_sensitive(params).then(function(item_sensitive) {
+		checker_function(context, params, item) {
+			return and.item_sensitive(params).then(item_sensitive => {
 				if (item_sensitive && item === undefined) {
 					return undefined;
-				} else {
-					const access_strategies = parse_params(app, params);
-					const results = access_strategies.map(function(strategy) {
-						return strategy.check(context, item);
-					});
-					return Promise.all(results);
 				}
+				const access_strategies = parse_params(app, params);
+				const results = access_strategies.map(strategy => {
+					return strategy.check(context, item);
+				});
+				return Promise.all(results);
 			});
 		},
 	};
diff --git a/lib/app/base-chips/access-strategy-types/and.subtest.js b/lib/app/base-chips/access-strategy-types/and.subtest.js
--- a/lib/app/base-chips/access-strategy-types/and.subtest.js
+++ b/lib/app/base-chips/access-strategy-types/and.subtest.js
@@ -48,7 +48,7 @@
 
 		for (const { name, strategies } of collections) {
 			app.createChip(Sealious.Collection, {
-				name: name,
+				name,
 				fields: [
 					{
 						name: "number",
diff --git a/lib/app/base-chips/access-strategy-types/logged_in.js b/lib/app/base-chips/access-strategy-types/logged_in.js
--- a/lib/app/base-chips/access-strategy-types/logged_in.js
+++ b/lib/app/base-chips/access-strategy-types/logged_in.js
@@ -1,22 +1,18 @@
-"use strict";
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
 module.exports = {
 	name: "logged_in",
-	getRestrictingQuery: async function(context) {
+	async getRestrictingQuery(context) {
 		if (context.user_id) {
 			return new Query.AllowAll();
 		}
 		return new Query.DenyAll();
 	},
-	checker_function: function(context) {
+	checker_function(context) {
 		if (context.user_id) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(
-				"Only logged-in users can perform this action."
-			);
 		}
+		return Promise.reject("Only logged-in users can perform this action.");
 	},
 };
diff --git a/lib/app/base-chips/access-strategy-types/noone.js b/lib/app/base-chips/access-strategy-types/noone.js
--- a/lib/app/base-chips/access-strategy-types/noone.js
+++ b/lib/app/base-chips/access-strategy-types/noone.js
@@ -1,13 +1,12 @@
-"use strict";
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
 module.exports = {
 	name: "noone",
-	getRestrictingQuery: async function() {
+	async getRestrictingQuery() {
 		return new Query.DenyAll();
 	},
-	checker_function: function() {
+	checker_function() {
 		return Promise.reject("Noone gets in!");
 	},
 	item_sensitive: false,
diff --git a/lib/app/base-chips/access-strategy-types/not.js b/lib/app/base-chips/access-strategy-types/not.js
--- a/lib/app/base-chips/access-strategy-types/not.js
+++ b/lib/app/base-chips/access-strategy-types/not.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const AccessStrategy = locreq("lib/chip-types/access-strategy.js");
@@ -19,29 +18,29 @@
 module.exports = function(app) {
 	return {
 		name: "not",
-		getRestrictingQuery: async function(context, params) {
+		async getRestrictingQuery(context, params) {
 			//assuming "not" can take only one access strategy as a parameter
 			const strategy = parse_params(app, params)[0];
 
 			const query = await strategy.getRestrictingQuery(context);
 			return new Query.Not(query);
 		},
-		item_sensitive: function(params) {
+		item_sensitive(params) {
 			const access_strategies = parse_params(app, params);
-			return Promise.map(access_strategies, function(access_strategy) {
+			return Promise.map(access_strategies, access_strategy => {
 				return access_strategy.is_item_sensitive();
 			}).reduce((a, b) => a || b, false);
 		},
-		checker_function: function(context, params, item) {
+		checker_function(context, params, item) {
 			const strategies = parse_params(app, params);
-			return Promise.map(strategies, function(strategy) {
+			return Promise.map(strategies, strategy => {
 				return strategy.check(context, item);
 			})
 				.any()
-				.then(function() {
+				.then(() => {
 					return Promise.reject("Action not allowed");
 				})
-				.catch({ sealious_error: true }, function() {
+				.catch({ sealious_error: true }, () => {
 					return Promise.resolve();
 				});
 		},
diff --git a/lib/app/base-chips/access-strategy-types/not.subtest.js b/lib/app/base-chips/access-strategy-types/not.subtest.js
--- a/lib/app/base-chips/access-strategy-types/not.subtest.js
+++ b/lib/app/base-chips/access-strategy-types/not.subtest.js
@@ -43,7 +43,7 @@
 
 		for (const { name, strategy } of collections) {
 			app.createChip(Sealious.Collection, {
-				name: name,
+				name,
 				fields: [
 					{
 						name: "number",
@@ -81,7 +81,7 @@
 	function create_less_than_strategy(app, number) {
 		app.createChip(app.Sealious.AccessStrategyType, {
 			name: `less-than(${number})`,
-			getRestrictingQuery: async function() {
+			async getRestrictingQuery() {
 				const query = new app.Query();
 				const id = query.lookup({
 					from: "numbers",
@@ -95,7 +95,7 @@
 				});
 				return query;
 			},
-			checker_function: async function(context, params, item) {
+			async checker_function(context, params, item) {
 				if (item.number.number >= number) {
 					return Promise.reject(
 						`Given value is not lower than ${number}`
diff --git a/lib/app/base-chips/access-strategy-types/or.js b/lib/app/base-chips/access-strategy-types/or.js
--- a/lib/app/base-chips/access-strategy-types/or.js
+++ b/lib/app/base-chips/access-strategy-types/or.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Error = locreq("lib/response/error.js").Error;
@@ -12,7 +11,7 @@
 module.exports = function(app) {
 	const or = {
 		name: "or",
-		getRestrictingQuery: async function(context, params) {
+		async getRestrictingQuery(context, params) {
 			const access_strategies = parse_params(app, params);
 			const queries = await Promise.map(access_strategies, strategy =>
 				strategy.getRestrictingQuery(context)
@@ -22,42 +21,38 @@
 			}
 			return new Query.Or(...queries);
 		},
-		item_sensitive: function(params) {
+		item_sensitive(params) {
 			const access_strategies = parse_params(app, params);
-			return Promise.map(access_strategies, function(access_strategy) {
+			return Promise.map(access_strategies, access_strategy => {
 				return access_strategy.is_item_sensitive();
 			}).reduce((a, b) => a || b);
 		},
-		checker_function: function(context, params, item) {
+		checker_function(context, params, item) {
 			if (context.is_super) {
 				return Promise.resolve();
 			}
-			return or.item_sensitive(params).then(function(item_sensitive) {
+			return or.item_sensitive(params).then(item_sensitive => {
 				if (item_sensitive && item === undefined) {
 					return undefined;
-				} else {
-					const access_strategies = parse_params(app, params);
-					const results = access_strategies.map(function(strategy) {
-						return strategy.check(context, item);
-					});
-					return Promise.any(results).catch(
-						Promise.AggregateError,
-						function(aggregated_errors) {
-							aggregated_errors.forEach(function(error) {
-								if (!(error instanceof Error)) {
-									throw error;
-								}
-							});
-							const error_message = aggregated_errors
-								.map(
-									aggregated_errors =>
-										aggregated_errors.message
-								)
-								.reduce((a, b) => `${a} ${b}`);
-							return Promise.reject(error_message);
-						}
-					);
 				}
+				const access_strategies = parse_params(app, params);
+				const results = access_strategies.map(strategy => {
+					return strategy.check(context, item);
+				});
+				return Promise.any(results).catch(
+					Promise.AggregateError,
+					aggregated_errors => {
+						aggregated_errors.forEach(error => {
+							if (!(error instanceof Error)) {
+								throw error;
+							}
+						});
+						const error_message = aggregated_errors
+							.map(aggregated_errors => aggregated_errors.message)
+							.reduce((a, b) => `${a} ${b}`);
+						return Promise.reject(error_message);
+					}
+				);
 			});
 		},
 	};
diff --git a/lib/app/base-chips/access-strategy-types/or.subtest.js b/lib/app/base-chips/access-strategy-types/or.subtest.js
--- a/lib/app/base-chips/access-strategy-types/or.subtest.js
+++ b/lib/app/base-chips/access-strategy-types/or.subtest.js
@@ -49,7 +49,7 @@
 
 		for (const { name, strategies } of collections) {
 			app.createChip(Sealious.Collection, {
-				name: name,
+				name,
 				fields: [
 					{
 						name: "number",
diff --git a/lib/app/base-chips/access-strategy-types/owner.js b/lib/app/base-chips/access-strategy-types/owner.js
--- a/lib/app/base-chips/access-strategy-types/owner.js
+++ b/lib/app/base-chips/access-strategy-types/owner.js
@@ -1,10 +1,9 @@
-"use strict";
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
 module.exports = {
 	name: "owner",
-	getRestrictingQuery: async function(context, params) {
+	async getRestrictingQuery(context, params) {
 		if (context.user_id) {
 			return Query.fromSingleMatch({
 				"_metadata.created_context.user_id": { $eq: context.user_id },
@@ -12,17 +11,16 @@
 		}
 		return new Query.DenyAll();
 	},
-	checker_function: function(context, params, item) {
+	checker_function(context, params, item) {
 		if (
 			context.user_id &&
 			context.user_id === item._metadata.created_context.user_id
 		) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(
-				"Only the owner of this resource can perform this operation on this item."
-			);
 		}
+		return Promise.reject(
+			"Only the owner of this resource can perform this operation on this item."
+		);
 	},
 	item_sensitive: true,
 };
diff --git a/lib/app/base-chips/access-strategy-types/public.js b/lib/app/base-chips/access-strategy-types/public.js
--- a/lib/app/base-chips/access-strategy-types/public.js
+++ b/lib/app/base-chips/access-strategy-types/public.js
@@ -1,14 +1,13 @@
-"use strict";
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
 module.exports = {
 	name: "public",
 
-	getRestrictingQuery: async function() {
+	async getRestrictingQuery() {
 		return new Query.AllowAll();
 	},
-	checker_function: function() {
+	checker_function() {
 		return Promise.resolve("Everybody is a winner!");
 	},
 	item_sensitive: false,
diff --git a/lib/app/base-chips/access-strategy-types/same-anon.js b/lib/app/base-chips/access-strategy-types/same-anon.js
--- a/lib/app/base-chips/access-strategy-types/same-anon.js
+++ b/lib/app/base-chips/access-strategy-types/same-anon.js
@@ -1,9 +1,8 @@
-"use strict";
 const Query = require("../../../datastore/query.js");
 
 module.exports = {
 	name: "same-anon",
-	getRestrictingQuery: async function(context, params) {
+	async getRestrictingQuery(context, params) {
 		if (context.anonymous_user_id) {
 			return Query.fromSingleMatch({
 				"_metadata.created_context.anonymous_user_id":
@@ -12,7 +11,7 @@
 		}
 		return new Query.AllowAll();
 	},
-	checker_function: function(context, params, item) {
+	checker_function(context, params, item) {
 		if (context.anonymous_user_id === null) {
 			return Promise.reject();
 		}
@@ -21,11 +20,10 @@
 			item._metadata.created_context.anonymous_user_id
 		) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(
-				"Only the user who created this resource can have access to it"
-			);
 		}
+		return Promise.reject(
+			"Only the user who created this resource can have access to it"
+		);
 	},
 	item_sensitive: true,
 };
diff --git a/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.js b/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.js
--- a/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.js
+++ b/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.js
@@ -2,10 +2,7 @@
 
 module.exports = app => ({
 	name: "same-as-for-resource-in-field",
-	getRestrictingQuery: async function(
-		context,
-		{ action_name, collection, field }
-	) {
+	async getRestrictingQuery(context, { action_name, collection, field }) {
 		const referenced_collection = get_referenced_collection(
 			app,
 			collection,
@@ -47,11 +44,7 @@
 
 		return Query.fromCustomPipeline(pipeline);
 	},
-	checker_function: async function(
-		context,
-		{ action_name, collection, field },
-		item
-	) {
+	async checker_function(context, { action_name, collection, field }, item) {
 		const referenced_collection = get_referenced_collection(
 			app,
 			collection,
@@ -111,7 +104,7 @@
 			group[prop] = add_parent_prefix(group[prop], parent_property);
 		}
 		const new_prop = prop_regex.test(prop)
-			? parent_property + "." + prop
+			? `${parent_property}.${prop}`
 			: prop;
 		acc[new_prop] = group[prop];
 		return acc;
diff --git a/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.subtest.js b/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.subtest.js
--- a/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.subtest.js
+++ b/lib/app/base-chips/access-strategy-types/same-as-for-resource-in-field.subtest.js
@@ -98,8 +98,8 @@
 				await rest_api.post(
 					"/api/v1/collections/number-notes",
 					{
-						note: "Lorem ipsum " + (notes.length + 1),
-						number: number,
+						note: `Lorem ipsum ${notes.length + 1}`,
+						number,
 					},
 					sessions[user]
 				)
diff --git a/lib/app/base-chips/access-strategy-types/super.js b/lib/app/base-chips/access-strategy-types/super.js
--- a/lib/app/base-chips/access-strategy-types/super.js
+++ b/lib/app/base-chips/access-strategy-types/super.js
@@ -1,24 +1,22 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
 const Super = {
 	name: "super",
-	getRestrictingQuery: async function(context) {
+	async getRestrictingQuery(context) {
 		if (context.is_super) {
 			return new Query.AllowAll();
 		}
 		return new Query.DenyAll();
 	},
-	checker_function: function(context) {
+	checker_function(context) {
 		if (context.is_super) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(
-				"This action cannot be performed by a regular user, but only by the server itself."
-			);
 		}
+		return Promise.reject(
+			"This action cannot be performed by a regular user, but only by the server itself."
+		);
 	},
 	item_sensitive: true,
 };
diff --git a/lib/app/base-chips/access-strategy-types/themselves.js b/lib/app/base-chips/access-strategy-types/themselves.js
--- a/lib/app/base-chips/access-strategy-types/themselves.js
+++ b/lib/app/base-chips/access-strategy-types/themselves.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
@@ -6,16 +5,15 @@
 module.exports = {
 	name: "themselves",
 	item_sensitive: true,
-	getRestrictingQuery: async function(context, params) {
+	async getRestrictingQuery(context, params) {
 		return Query.fromSingleMatch({
 			sealious_id: { $eq: context.user_id },
 		});
 	},
-	checker_function: function(context, params, item) {
+	checker_function(context, params, item) {
 		if (context.user_id === item.id) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(`You are not the user of id ${item.id}.`);
 		}
+		return Promise.reject(`You are not the user of id ${item.id}.`);
 	},
 };
diff --git a/lib/app/base-chips/access-strategy-types/user-referenced-in-field.js b/lib/app/base-chips/access-strategy-types/user-referenced-in-field.js
--- a/lib/app/base-chips/access-strategy-types/user-referenced-in-field.js
+++ b/lib/app/base-chips/access-strategy-types/user-referenced-in-field.js
@@ -9,7 +9,7 @@
 	checker_function: (context, field_name, item) => {
 		if (!context.user_id) return Promise.reject("You're not logged in!");
 		else if (context.user_id === item[field_name]) return Promise.resolve();
-		else return Promise.reject("Access not allowed for this user");
+		return Promise.reject("Access not allowed for this user");
 	},
 	item_sensitive: true,
 });
diff --git a/lib/app/base-chips/access-strategy-types/user-referenced-in-field.subtest.js b/lib/app/base-chips/access-strategy-types/user-referenced-in-field.subtest.js
--- a/lib/app/base-chips/access-strategy-types/user-referenced-in-field.subtest.js
+++ b/lib/app/base-chips/access-strategy-types/user-referenced-in-field.subtest.js
@@ -28,7 +28,7 @@
 					["collections", "users"],
 					"create",
 					{
-						username: username,
+						username,
 						password: "password",
 						email: `${username.toLowerCase()}@example.com`,
 					}
diff --git a/lib/app/base-chips/access-strategy-types/users-who-can.js b/lib/app/base-chips/access-strategy-types/users-who-can.js
--- a/lib/app/base-chips/access-strategy-types/users-who-can.js
+++ b/lib/app/base-chips/access-strategy-types/users-who-can.js
@@ -13,11 +13,7 @@
 
 module.exports = app => ({
 	name: "users-who-can",
-	get_pre_aggregation_stage: async function(
-		context,
-		[action_name, collection],
-		item
-	) {
+	async get_pre_aggregation_stage(context, [action_name, collection], item) {
 		check_params(app, [action_name, collection]);
 		try {
 			await collection.get_access_strategy(action_name).check(context);
@@ -26,7 +22,7 @@
 			return Promise.resolve(DENY);
 		}
 	},
-	checker_function: async function(context, [action_name, collection]) {
+	async checker_function(context, [action_name, collection]) {
 		check_params(app, [action_name, collection]);
 		try {
 			await collection.get_access_strategy(action_name).check(context);
diff --git a/lib/app/base-chips/access-strategy-types/when.js b/lib/app/base-chips/access-strategy-types/when.js
--- a/lib/app/base-chips/access-strategy-types/when.js
+++ b/lib/app/base-chips/access-strategy-types/when.js
@@ -1,4 +1,3 @@
-"use strict";
 const Promise = require("bluebird");
 const Query = require("../../../datastore/query.js");
 
@@ -29,7 +28,7 @@
 
 module.exports = app => ({
 	name: "when",
-	getRestrictingQuery: async function(
+	async getRestrictingQuery(
 		context,
 		[
 			collection_name,
@@ -47,7 +46,7 @@
 			when_false_name
 		);
 	},
-	checker_function: async function(
+	async checker_function(
 		context,
 		[
 			collection_name,
diff --git a/lib/app/base-chips/calculated-field-types/aggregate.js b/lib/app/base-chips/calculated-field-types/aggregate.js
--- a/lib/app/base-chips/calculated-field-types/aggregate.js
+++ b/lib/app/base-chips/calculated-field-types/aggregate.js
@@ -1,21 +1,19 @@
-"use strict";
 const Promise = require("bluebird");
 
 module.exports = function(app) {
 	return {
 		name: "aggregate",
-		calculate: function(context, params, item, db_document) {
+		calculate(context, params, item, db_document) {
 			let stages = params.stages;
 			if (params.stages instanceof Function) {
 				stages = params.stages(context, params, item, db_document);
 			}
 			return app.Datastore.aggregate(params.collection, stages).then(
-				function(documents) {
+				documents => {
 					if (documents.length) {
 						return documents[0].result;
-					} else {
-						return null;
 					}
+					return null;
 				}
 			);
 		},
diff --git a/lib/app/base-chips/calculated-field-types/custom.js b/lib/app/base-chips/calculated-field-types/custom.js
--- a/lib/app/base-chips/calculated-field-types/custom.js
+++ b/lib/app/base-chips/calculated-field-types/custom.js
@@ -1,10 +1,9 @@
-"use strict";
 const Promise = require("bluebird");
 
 module.exports = function(app) {
 	return {
 		name: "custom",
-		calculate: function(context, params, item, db_document) {
+		calculate(context, params, item, db_document) {
 			return params(app, context, item, db_document);
 		},
 	};
diff --git a/lib/app/base-chips/calculated-field-types/map-reduce.js b/lib/app/base-chips/calculated-field-types/map-reduce.js
--- a/lib/app/base-chips/calculated-field-types/map-reduce.js
+++ b/lib/app/base-chips/calculated-field-types/map-reduce.js
@@ -3,21 +3,20 @@
 module.exports = function(App) {
 	return {
 		name: "map-reduce",
-		calculate: function(context, params, item) {
+		calculate(context, params, item) {
 			const action_arguments = [
 				context,
 				params.source.subject_path,
 				params.source.action_name,
 				params.source.params,
-			].map(function(element) {
+			].map(element => {
 				if (element instanceof Function) {
 					return element(context, params, item);
-				} else {
-					return element;
 				}
+				return element;
 			});
 			return Promise.all(action_arguments)
-				.then(function(fulfilled_action_arguments) {
+				.then(fulfilled_action_arguments => {
 					return App.run_action.apply(
 						App,
 						fulfilled_action_arguments
diff --git a/lib/app/base-chips/collections/formatted-images.js b/lib/app/base-chips/collections/formatted-images.js
--- a/lib/app/base-chips/collections/formatted-images.js
+++ b/lib/app/base-chips/collections/formatted-images.js
@@ -1,4 +1,3 @@
-"use strict";
 module.exports = {
 	name: "formatted-images",
 	fields: [
diff --git a/lib/app/base-chips/collections/password-reset-intents.subtest.js b/lib/app/base-chips/collections/password-reset-intents.subtest.js
--- a/lib/app/base-chips/collections/password-reset-intents.subtest.js
+++ b/lib/app/base-chips/collections/password-reset-intents.subtest.js
@@ -86,7 +86,7 @@
 				}
 			)).data;
 			const messages = (await mail_api.get_messages()).filter(
-				message => message.recipients[0] == "<user@example.com>"
+				message => message.recipients[0] === "<user@example.com>"
 			);
 			assert(messages.length, 1);
 			assert.equal(messages[0].recipients.length, 1);
diff --git a/lib/app/base-chips/collections/users.js b/lib/app/base-chips/collections/users.js
--- a/lib/app/base-chips/collections/users.js
+++ b/lib/app/base-chips/collections/users.js
@@ -1,4 +1,3 @@
-"use strict";
 module.exports = app => {
 	const user_roles = app.ChipManager.get_chip("collection", "user-roles");
 	const users = {
diff --git a/lib/app/base-chips/field-types/boolean.js b/lib/app/base-chips/field-types/boolean.js
--- a/lib/app/base-chips/field-types/boolean.js
+++ b/lib/app/base-chips/field-types/boolean.js
@@ -1,10 +1,9 @@
-"use strict";
 module.exports = {
 	name: "boolean",
-	get_description: function() {
+	get_description() {
 		return 'Boolean value. True or false. Can be a string: "true" or "false".';
 	},
-	is_proper_value: function(context, params, value) {
+	is_proper_value(context, params, value) {
 		if (typeof value === "boolean") {
 			return Promise.resolve();
 		} else if (value.toString() === "1" || value.toString() === "0") {
@@ -14,11 +13,10 @@
 			(value.toLowerCase() === "true" || value.toLowerCase() === "false")
 		) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(`Value '${value}' is not boolean format.`);
 		}
+		return Promise.reject(`Value '${value}' is not boolean format.`);
 	},
-	encode: function(context, params, value) {
+	encode(context, params, value) {
 		if (typeof value === "boolean") {
 			return value;
 		} else if (value.toString() === "1") {
@@ -33,13 +31,12 @@
 			}
 		}
 	},
-	filter_to_query: function(context, params, filter) {
+	filter_to_query(context, params, filter) {
 		if (filter === "") {
 			return { $exists: false };
 		} else if (filter === null) {
 			return { $in: [true, false] };
-		} else {
-			return this.encode(context, params, filter);
 		}
+		return this.encode(context, params, filter);
 	},
 };
diff --git a/lib/app/base-chips/field-types/cached-value.js b/lib/app/base-chips/field-types/cached-value.js
--- a/lib/app/base-chips/field-types/cached-value.js
+++ b/lib/app/base-chips/field-types/cached-value.js
@@ -1,16 +1,15 @@
-"use strict";
 const { getDateTime } = require("../../../utils/get-datetime.js");
 
 module.exports = app => ({
 	name: "cached-value",
-	get_description: function() {
+	get_description() {
 		return "Caches custom values. Takes care of cache invalidation.";
 	},
 
 	get_default_value: async () => null,
 	value_path_after_field_name: ".value",
 
-	is_proper_value: function(context, params, new_value) {
+	is_proper_value(context, params, new_value) {
 		if (!context.is_super) {
 			return Promise.reject("This is a read-only field");
 		}
@@ -22,7 +21,7 @@
 			new_value
 		);
 	},
-	filter_to_query: async function(context, params, field_filter) {
+	async filter_to_query(context, params, field_filter) {
 		return this._call_base_method(
 			"filter_to_query",
 			context,
@@ -30,7 +29,7 @@
 			field_filter
 		);
 	},
-	init: function(collection, field_name, params) {
+	init(collection, field_name, params) {
 		const { refresh_on, get_value, base_field_type } = params;
 		this._check_for_possible_recursive_edits(
 			app,
@@ -80,7 +79,7 @@
 		}
 	},
 
-	_check_for_possible_recursive_edits: function(
+	_check_for_possible_recursive_edits(
 		app,
 		refresh_on,
 		collection_name,
@@ -103,7 +102,7 @@
 		}
 	},
 
-	_refresh_outdated_cache_values: async function(
+	async _refresh_outdated_cache_values(
 		create_action,
 		collection,
 		field_name,
@@ -165,7 +164,7 @@
 			);
 		}
 	},
-	encode: async function(context, params, value) {
+	async encode(context, params, value) {
 		return {
 			timestamp: context.timestamp,
 			value: await this._call_base_method(
@@ -176,7 +175,7 @@
 			),
 		};
 	},
-	decode: function(context, params, value_in_db) {
+	decode(context, params, value_in_db) {
 		return this._call_base_method(
 			"decode",
 			context,
@@ -184,7 +183,7 @@
 			value_in_db ? value_in_db.value : null
 		);
 	},
-	format: function(context, params, decoded_value, format) {
+	format(context, params, decoded_value, format) {
 		const base_field_type = app.FieldType(params.base_field_type.name);
 		return base_field_type.format(
 			context,
diff --git a/lib/app/base-chips/field-types/color.js b/lib/app/base-chips/field-types/color.js
--- a/lib/app/base-chips/field-types/color.js
+++ b/lib/app/base-chips/field-types/color.js
@@ -1,7 +1,6 @@
-"use strict";
 module.exports = {
 	name: "color",
-	is_proper_value: function(context, params, new_value) {
+	is_proper_value(context, params, new_value) {
 		const Color = require("color"); //putting it here not to slow down `new Sealious.app()`
 		try {
 			if (typeof new_value === "string") {
@@ -16,7 +15,7 @@
 			);
 		}
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		const Color = require("color"); //putting it here not to slow down `new Sealious.app()`
 		const color = Color(value_in_code);
 		return color.hexString();
diff --git a/lib/app/base-chips/field-types/context.js b/lib/app/base-chips/field-types/context.js
--- a/lib/app/base-chips/field-types/context.js
+++ b/lib/app/base-chips/field-types/context.js
@@ -1,16 +1,14 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Context = locreq("lib/context.js");
 
 module.exports = {
 	name: "context",
-	is_proper_value: function(context, params, value) {
+	is_proper_value(context, params, value) {
 		if (value instanceof Context) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(
-				"Provided value is not an instance of Sealious.Context"
-			);
 		}
+		return Promise.reject(
+			"Provided value is not an instance of Sealious.Context"
+		);
 	},
 };
diff --git a/lib/app/base-chips/field-types/control-access.js b/lib/app/base-chips/field-types/control-access.js
--- a/lib/app/base-chips/field-types/control-access.js
+++ b/lib/app/base-chips/field-types/control-access.js
@@ -1,6 +1,6 @@
 module.exports = app => ({
 	name: "control-access",
-	is_proper_value: async function(
+	async is_proper_value(
 		context,
 		{ target_field_type_name, target_params, target_access_strategies },
 		new_value,
@@ -31,7 +31,7 @@
 			old_value
 		);
 	},
-	decode: function(
+	decode(
 		context,
 		{ target_field_type_name, target_params, target_access_strategies },
 		value_in_db
diff --git a/lib/app/base-chips/field-types/control-access.subtest.js b/lib/app/base-chips/field-types/control-access.subtest.js
--- a/lib/app/base-chips/field-types/control-access.subtest.js
+++ b/lib/app/base-chips/field-types/control-access.subtest.js
@@ -11,12 +11,12 @@
 			name: "ssh-keys",
 			fields: [
 				{
-					name: "public",
+					name: "visible",
 					type: "text",
 					required: true,
 				},
 				{
-					name: "private",
+					name: "hidden",
 					type: "control-access",
 					params: {
 						target_access_strategies: {
@@ -72,22 +72,22 @@
 	async function fill_keys_collections(App) {
 		const keys = [
 			{
-				public: "a-public-key",
-				private: "seeeeecret",
+				visible: "a-visible-key",
+				hidden: "seeeeecret",
 			},
 			{
-				public: "go-get-it",
-				private: "you-cannot-see",
+				visible: "go-get-it",
+				hidden: "you-cannot-see",
 			},
 		];
-		for (let { public, private } of keys) {
+		for (let { visible, hidden } of keys) {
 			let key = await App.run_action(
 				new App.Sealious.SuperContext(),
 				["collections", "ssh-keys"],
 				"create",
 				{
-					public,
-					private,
+					visible,
+					hidden,
 				}
 			);
 		}
@@ -109,7 +109,7 @@
 			);
 
 			ssh_keys.forEach(key => {
-				assert.deepEqual(key.private, "");
+				assert.deepEqual(key.hidden, "");
 			});
 		}));
 
@@ -123,7 +123,7 @@
 			);
 
 			ssh_keys.forEach(key => {
-				assert(key.private.length >= 3);
+				assert(key.hidden.length >= 3);
 			});
 		}));
 
@@ -136,14 +136,14 @@
 					rest_api.post(
 						SSH_KEYS_URL,
 						{
-							public: "XDDDDDDDDDDDD",
-							private: "XD",
+							visible: "XDDDDDDDDDDDD",
+							hidden: "XD",
 						},
 						sessions.admin
 					),
 				e =>
 					assert.equal(
-						e.response.data.data.private.message,
+						e.response.data.data.hidden.message,
 						"Text 'XD' is too short, minimum length is 3 chars."
 					)
 			);
@@ -156,8 +156,8 @@
 			const key = await rest_api.post(
 				SSH_KEYS_URL,
 				{
-					public: "123123",
-					private: "321321",
+					visible: "123123",
+					hidden: "321321",
 				},
 				sessions.admin
 			);
@@ -165,12 +165,12 @@
 			const updated_key = await rest_api.patch(
 				`${SSH_KEYS_URL}/${key.id}`,
 				{
-					private: "654321",
+					hidden: "654321",
 				},
 				sessions.admin
 			);
 
-			assert.deepEqual(updated_key.private, "654321");
+			assert.deepEqual(updated_key.hidden, "654321");
 		}));
 
 	it("Doesn't allow regular-user to update a protected field", async () =>
@@ -180,8 +180,8 @@
 			const key = await rest_api.post(
 				SSH_KEYS_URL,
 				{
-					public: "123123",
-					private: "321321",
+					visible: "123123",
+					hidden: "321321",
 				},
 				sessions.admin
 			);
@@ -190,12 +190,12 @@
 				() =>
 					rest_api.patch(
 						`${SSH_KEYS_URL}/${key.id}`,
-						{ private: "331c6883dd6010864b7ead130be77cd5" },
+						{ hidden: "331c6883dd6010864b7ead130be77cd5" },
 						sessions["regular-user"]
 					),
 				e =>
 					assert.deepEqual(
-						e.response.data.data.private.message,
+						e.response.data.data.hidden.message,
 						"You are not allowed to update this field."
 					)
 			);
diff --git a/lib/app/base-chips/field-types/date.js b/lib/app/base-chips/field-types/date.js
--- a/lib/app/base-chips/field-types/date.js
+++ b/lib/app/base-chips/field-types/date.js
@@ -1,10 +1,9 @@
-"use strict";
 module.exports = {
 	name: "date",
-	get_description: function() {
+	get_description() {
 		return "Date standard ISO 8601 (YYYY-MM-DD)";
 	},
-	is_proper_value: function(context, params, date) {
+	is_proper_value(context, params, date) {
 		const date_in_string = date.toString();
 
 		const regex = /^([0-9]{4})-(0?[1-9]|1[0-2])-([0-2]?[0-9]|30|31)$/; // granulation_per_day
@@ -16,8 +15,7 @@
 			return Promise.reject(
 				`Value "${date}" is not date calendar format. Expected value standard IS0 8601 (YYYY-MM-DD)`
 			);
-		} else {
-			return Promise.resolve();
 		}
+		return Promise.resolve();
 	},
 };
diff --git a/lib/app/base-chips/field-types/datetime.js b/lib/app/base-chips/field-types/datetime.js
--- a/lib/app/base-chips/field-types/datetime.js
+++ b/lib/app/base-chips/field-types/datetime.js
@@ -1,19 +1,18 @@
-"use strict";
-
 const { getDateTime } = require("../../../utils/get-datetime.js");
 
 module.exports = {
 	name: "datetime",
 	extends: "int",
-	has_index: function(params) {
+	has_index(params) {
 		if (params.indexed) {
 			return 1;
-		} else return false;
+		}
+		return false;
 	},
-	get_description: function() {
+	get_description() {
 		return "Timestamp - amount of miliseconds since epoch.";
 	},
-	is_proper_value: function(context, params, datetime) {
+	is_proper_value(context, params, datetime) {
 		if (Number.isInteger(datetime)) {
 			return Promise.resolve();
 		}
@@ -21,11 +20,11 @@
 			`Value '${datetime}' is not datetime format. Only timestamps are accepted.`
 		);
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		const parsed_datetime = parseInt(value_in_code);
 		return parsed_datetime;
 	},
-	format: function(context, params, decoded_value, format) {
+	format(context, params, decoded_value, format) {
 		if (decoded_value === null || decoded_value === undefined) {
 			return Promise.resolve(decoded_value);
 		}
diff --git a/lib/app/base-chips/field-types/derived-value.js b/lib/app/base-chips/field-types/derived-value.js
--- a/lib/app/base-chips/field-types/derived-value.js
+++ b/lib/app/base-chips/field-types/derived-value.js
@@ -7,7 +7,7 @@
 	get_description: () =>
 		"A value derived from an array of fields of the given collection.",
 	get_default_value: async () => null,
-	is_proper_value: function(context, params, new_value) {
+	is_proper_value(context, params, new_value) {
 		return this._call_base_method(
 			"is_proper_value",
 			context,
@@ -15,7 +15,7 @@
 			new_value
 		);
 	},
-	filter_to_query: async function(context, params, field_filter) {
+	async filter_to_query(context, params, field_filter) {
 		return this._call_base_method(
 			"filter_to_query",
 			context,
@@ -23,7 +23,7 @@
 			field_filter
 		);
 	},
-	init: function(collection, field_name, params) {
+	init(collection, field_name, params) {
 		const { fields, derived_fn, base_field_type } = params;
 		if (typeof derived_fn !== "function") {
 			throw new Error(
@@ -113,13 +113,13 @@
 		);
 	},
 
-	encode: async function(context, params, value) {
+	async encode(context, params, value) {
 		return this._call_base_method("encode", context, params, value);
 	},
-	decode: function(context, params, value_in_db) {
+	decode(context, params, value_in_db) {
 		return this._call_base_method("decode", context, params, value_in_db);
 	},
-	format: function(context, params, decoded_value, format) {
+	format(context, params, decoded_value, format) {
 		return this._call_base_method(
 			"format",
 			context,
diff --git a/lib/app/base-chips/field-types/email.js b/lib/app/base-chips/field-types/email.js
--- a/lib/app/base-chips/field-types/email.js
+++ b/lib/app/base-chips/field-types/email.js
@@ -1,18 +1,16 @@
-"use strict";
 module.exports = {
 	name: "email",
-	get_description: function() {
+	get_description() {
 		return "Email address, like something@something.sth";
 	},
-	is_proper_value: function(context, params, value) {
+	is_proper_value(context, params, value) {
 		const address = value;
 
 		const regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
 
 		if (regex.test(address) || address === "") {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(`${address} is a not valid e-mail address.`);
 		}
+		return Promise.reject(`${address} is a not valid e-mail address.`);
 	},
 };
diff --git a/lib/app/base-chips/field-types/enum.js b/lib/app/base-chips/field-types/enum.js
--- a/lib/app/base-chips/field-types/enum.js
+++ b/lib/app/base-chips/field-types/enum.js
@@ -1,15 +1,13 @@
-"use strict";
 module.exports = {
 	name: "enum",
-	is_proper_value: async function(context, params, value) {
+	async is_proper_value(context, params, value) {
 		const allowed_values =
 			params.values instanceof Function
 				? await params.values()
 				: params.values;
 		if (allowed_values.indexOf(value) !== -1) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject("Allowed values: " + allowed_values.join());
 		}
+		return Promise.reject(`Allowed values: ${allowed_values.join()}`);
 	},
 };
diff --git a/lib/app/base-chips/field-types/file-reference.js b/lib/app/base-chips/field-types/file-reference.js
--- a/lib/app/base-chips/field-types/file-reference.js
+++ b/lib/app/base-chips/field-types/file-reference.js
@@ -1,25 +1,21 @@
 module.exports = function(app) {
 	return {
 		name: "file_reference",
-		is_proper_value: function(context, params, value) {
-			return app.Datastore.find("files", { id: value }).then(function(
-				results
-			) {
+		is_proper_value(context, params, value) {
+			return app.Datastore.find("files", { id: value }).then(results => {
 				if (results.length === 0) {
-					return Promise.reject("Bad file id: " + value);
-				} else {
-					return Promise.resolve();
+					return Promise.reject(`Bad file id: ${value}`);
 				}
+				return Promise.resolve();
 			});
 		},
-		format: function(context, params, file_id, format) {
+		format(context, params, file_id, format) {
 			if (format === "internal") {
 				return app.Datastore.find("files", { id: file_id }).then(
 					a => a[0]
 				);
-			} else {
-				return file_id;
 			}
+			return file_id;
 		},
 	};
 };
diff --git a/lib/app/base-chips/field-types/file.js b/lib/app/base-chips/field-types/file.js
--- a/lib/app/base-chips/field-types/file.js
+++ b/lib/app/base-chips/field-types/file.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const File = locreq("lib/data-structures/file.js");
@@ -9,16 +8,16 @@
 	return {
 		name: "file",
 		handles_large_data: true,
-		is_proper_value: function(context, params, value) {
+		is_proper_value(context, params, value) {
 			if (value === undefined) {
 				return undefined;
 			}
-			if (typeof value == "string") {
+			if (typeof value === "string") {
 				return axios(value)
-					.then(function() {
+					.then(() => {
 						return Promise.resolve();
 					})
-					.catch(function() {
+					.catch(() => {
 						return Promise.reject(
 							`There was a problem while getting the file: '${value}'. Is the URL correct?`
 						);
@@ -31,24 +30,23 @@
 				(value.filename !== undefined && value.data instanceof Buffer)
 			) {
 				return Promise.resolve();
+			}
+			let type;
+			if (value instanceof Array) {
+				type =
+					"<Array>. If you want to upload multiple files, use array field types.";
 			} else {
-				let type;
-				if (value instanceof Array) {
-					type =
-						"<Array>. If you want to upload multiple files, use array field types.";
-				} else {
-					type = typeof data;
-				}
-				return Promise.reject(
-					`Wrong file data format. Should be Sealious.File, but received ${type}`
-				);
+				type = typeof data;
 			}
+			return Promise.reject(
+				`Wrong file data format. Should be Sealious.File, but received ${type}`
+			);
 		},
-		encode: function(context, params, value_in_code) {
+		encode(context, params, value_in_code) {
 			if (typeof value_in_code === "string") {
 				return axios(value_in_code, {
 					responseType: "arrayBuffer",
-				}).then(function(file_buffer) {
+				}).then(file_buffer => {
 					const filename = url
 						.parse(value_in_code)
 						.pathname.split("/")
@@ -59,11 +57,10 @@
 			}
 			if (value_in_code) {
 				return app.FileManager.save_file(value_in_code);
-			} else {
-				return null;
 			}
+			return null;
 		},
-		decode: function(context, params, value_in_database) {
+		decode(context, params, value_in_database) {
 			if (value_in_database) {
 				return Promise.resolve(
 					new File.Reference(
@@ -73,11 +70,10 @@
 				);
 			} else if (params.no_file_value) {
 				return params.no_file_value;
-			} else {
-				return undefined;
 			}
+			return undefined;
 		},
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			if (decoded_value === undefined) {
 				return undefined;
 			}
@@ -93,18 +89,16 @@
 						filename: null,
 						empty: true,
 					};
-				} else {
-					return {
-						url: `/api/v1/uploaded-files/${decoded_value.id}/${
-							decoded_value.filename
-						}`,
-						filename: decoded_value.filename,
-						empty: false,
-					};
 				}
-			} else {
-				return decoded_value;
+				return {
+					url: `/api/v1/uploaded-files/${decoded_value.id}/${
+						decoded_value.filename
+					}`,
+					filename: decoded_value.filename,
+					empty: false,
+				};
 			}
+			return decoded_value;
 		},
 	};
 };
diff --git a/lib/app/base-chips/field-types/float.js b/lib/app/base-chips/field-types/float.js
--- a/lib/app/base-chips/field-types/float.js
+++ b/lib/app/base-chips/field-types/float.js
@@ -1,20 +1,18 @@
-"use strict";
 module.exports = {
 	name: "float",
-	get_description: function() {
+	get_description() {
 		return "Float number.";
 	},
-	is_proper_value: function(context, params, number) {
+	is_proper_value(context, params, number) {
 		const test = parseFloat(number);
 		if (test === null || isNaN(test) || isNaN(number) === true) {
 			return Promise.reject(
 				`Value '${number}'  is not a float number format.`
 			);
-		} else {
-			return Promise.resolve();
 		}
+		return Promise.resolve();
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		const parsed_float = parseFloat(value_in_code);
 		return parsed_float;
 	},
diff --git a/lib/app/base-chips/field-types/html.js b/lib/app/base-chips/field-types/html.js
--- a/lib/app/base-chips/field-types/html.js
+++ b/lib/app/base-chips/field-types/html.js
@@ -1,9 +1,7 @@
-"use strict";
-
 module.exports = {
 	name: "html",
 	extends: "text",
-	encode: function(context, params, value) {
+	encode(context, params, value) {
 		const sanitizeHtml = require("sanitize-html"); //putting it here not to slow down `new Sealious.app()`
 		return {
 			original: value,
@@ -16,7 +14,7 @@
 			}),
 		};
 	},
-	format: function(context, params, decoded_value, format) {
+	format(context, params, decoded_value, format) {
 		let ret;
 		if (decoded_value === undefined) return undefined;
 		switch (format) {
diff --git a/lib/app/base-chips/field-types/image.js b/lib/app/base-chips/field-types/image.js
--- a/lib/app/base-chips/field-types/image.js
+++ b/lib/app/base-chips/field-types/image.js
@@ -1,4 +1,3 @@
-"use strict";
 const Promise = require("bluebird");
 const assert = require("assert");
 const locreq = require("locreq")(__dirname);
@@ -13,19 +12,14 @@
 	return {
 		name: "image",
 		extends: "file",
-		is_proper_value: function(context, params, new_value) {
-			return File.is_proper_value(context, params, new_value).then(
-				function() {
-					if (
-						new_value.mime &&
-						new_value.mime.indexOf("image/") !== 0
-					) {
-						return Promise.reject("Only image files are allowed");
-					}
+		is_proper_value(context, params, new_value) {
+			return File.is_proper_value(context, params, new_value).then(() => {
+				if (new_value.mime && new_value.mime.indexOf("image/") !== 0) {
+					return Promise.reject("Only image files are allowed");
 				}
-			);
+			});
 		},
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			const formats = params.formats || {};
 
 			if (decoded_value === undefined) {
@@ -37,12 +31,11 @@
 
 			if (format === "original") {
 				return File.format(context, params, decoded_value, "url");
-			} else {
-				return (
-					`/api/v1/formatted-images/${decoded_value.id}/` +
-					`${format}/${decoded_value.filename}`
-				);
 			}
+			return (
+				`/api/v1/formatted-images/${decoded_value.id}/` +
+				`${format}/${decoded_value.filename}`
+			);
 		},
 	};
 };
diff --git a/lib/app/base-chips/field-types/int.js b/lib/app/base-chips/field-types/int.js
--- a/lib/app/base-chips/field-types/int.js
+++ b/lib/app/base-chips/field-types/int.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Errors = locreq("lib/response/error.js");
 
@@ -23,7 +22,7 @@
 				false,
 				`Value should be larger or equal to '${params.min}.`,
 			];
-		else return [true];
+		return [true];
 	},
 	(params, value) => {
 		if (Number.isFinite(params.max) && value > params.max)
@@ -31,16 +30,16 @@
 				false,
 				`Value should be smaller or equal to '${params.max}.`,
 			];
-		else return [true];
+		return [true];
 	},
 ];
 
 const int = {
 	name: "int",
-	get_description: function() {
+	get_description() {
 		return "An integer number.";
 	},
-	is_proper_value: function(context, params, new_value) {
+	is_proper_value(context, params, new_value) {
 		if (!Number.isInteger(new_value)) {
 			return Promise.reject(
 				`Value '${new_value}' is not a int number format.`
@@ -52,14 +51,13 @@
 			.filter(element => !element[0]);
 		if (failed_checks.length === 0) {
 			return Promise.resolve();
-		} else {
-			return Promise.reject(failed_checks.map(e => e[1]).join(" "));
 		}
+		return Promise.reject(failed_checks.map(e => e[1]).join(" "));
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		return parseInt(value_in_code, 10);
 	},
-	filter_to_query: function(context, params, field_filter) {
+	filter_to_query(context, params, field_filter) {
 		if (typeof field_filter !== "object") {
 			return {
 				$eq: parseInt(field_filter),
diff --git a/lib/app/base-chips/field-types/json-object.js b/lib/app/base-chips/field-types/json-object.js
--- a/lib/app/base-chips/field-types/json-object.js
+++ b/lib/app/base-chips/field-types/json-object.js
@@ -4,10 +4,10 @@
 
 module.exports = {
 	name: "json-object",
-	get_description: function() {
+	get_description() {
 		return "Stores json object value.";
 	},
-	is_proper_value: async function(context, params, new_value) {
+	async is_proper_value(context, params, new_value) {
 		let stringified_value;
 		try {
 			stringified_value = JSON.stringify(new_value);
@@ -20,10 +20,10 @@
 			return Promise.reject("A primitive, not an object!");
 		}
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		return JSON.parse(JSON.stringify(value_in_code));
 	},
-	get_aggregation_stages: function(
+	get_aggregation_stages(
 		context,
 		params,
 		field_name,
diff --git a/lib/app/base-chips/field-types/password.js b/lib/app/base-chips/field-types/password.js
--- a/lib/app/base-chips/field-types/password.js
+++ b/lib/app/base-chips/field-types/password.js
@@ -1,4 +1,3 @@
-"use strict";
 const Promise = require("bluebird");
 const SecureHasher = require("../../../utils/secure-hasher.js");
 const crypto = require("crypto");
@@ -6,7 +5,7 @@
 module.exports = app => ({
 	name: "password",
 	extends: "text",
-	get_description: function(context, { digits, capitals }) {
+	get_description(context, { digits, capitals }) {
 		let message = "Stores a password in a correct way";
 		if (!digits && !capitals) {
 			return message;
@@ -23,7 +22,7 @@
 
 		return message;
 	},
-	is_proper_value: function(context, { digits, capitals }, new_value) {
+	is_proper_value(context, { digits, capitals }, new_value) {
 		const pattern_array = [];
 		if (!digits && !capitals) {
 			return Promise.resolve();
@@ -41,15 +40,14 @@
 
 		if (isAccepted) {
 			return Promise.resolve();
-		} else {
-			const digits = digits || "0";
-			const capitals = capitals || "0";
-			return Promise.reject(
-				`It didn't fulfill the requirements: required digits - ${digits} , required capitals ${capitals}`
-			);
 		}
+		const requiredDigits = digits || "0";
+		const requiredCapitals = capitals || "0";
+		return Promise.reject(
+			`It didn't fulfill the requirements: required digits - ${requiredDigits} , required capitals ${requiredCapitals}`
+		);
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		const hashing_params = Object.assign(
 			{},
 			app.ConfigManager.get("password_hash"),
@@ -62,10 +60,10 @@
 	},
 	get_aggregation_stages: require("./../../../chip-types/field-type-default-methods.js")
 		.get_aggregation_stages,
-	decode: function(context, params, value_in_db) {
+	decode(context, params, value_in_db) {
 		return null;
 	},
-	format: function(context, params, decoded_value, format_params) {
+	format(context, params, decoded_value, format_params) {
 		return decoded_value;
 	},
 });
diff --git a/lib/app/base-chips/field-types/reverse-single-reference.js b/lib/app/base-chips/field-types/reverse-single-reference.js
--- a/lib/app/base-chips/field-types/reverse-single-reference.js
+++ b/lib/app/base-chips/field-types/reverse-single-reference.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Errors = locreq("lib/response/error.js");
@@ -62,20 +61,20 @@
 	return {
 		name: "reverse-single-reference",
 
-		get_description: function() {
+		get_description() {
 			return "Shows which resources from given collection point to this resource in a given field.";
 		},
 
 		get_default_value: async () => [],
 		is_old_value_sensitive: true,
 
-		is_proper_value: function(context, params, new_value) {
+		is_proper_value(context, params, new_value) {
 			return context.is_super
 				? Promise.resolve()
 				: Promise.reject("This is a read-only field");
 		},
 
-		filter_to_query: async function(context, params, field_filter) {
+		async filter_to_query(context, params, field_filter) {
 			if (typeof field_filter !== "object") {
 				return {
 					$eq: field_filter,
@@ -93,7 +92,7 @@
 			};
 		},
 
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			// format can be "expand" or "deep-expand:<depth>", like "deep-expand:3"
 			if (!format) {
 				return decoded_value; // just the IDs
diff --git a/lib/app/base-chips/field-types/secret-token.js b/lib/app/base-chips/field-types/secret-token.js
--- a/lib/app/base-chips/field-types/secret-token.js
+++ b/lib/app/base-chips/field-types/secret-token.js
@@ -12,8 +12,7 @@
 	filter_to_query: (context, params, field_filter) => {
 		if (context.is_super) {
 			return { $eq: field_filter };
-		} else {
-			return { $eq: "nice try" };
 		}
+		return { $eq: "nice try" };
 	},
 };
diff --git a/lib/app/base-chips/field-types/settable-by.js b/lib/app/base-chips/field-types/settable-by.js
--- a/lib/app/base-chips/field-types/settable-by.js
+++ b/lib/app/base-chips/field-types/settable-by.js
@@ -1,6 +1,6 @@
 module.exports = app => ({
 	name: "settable-by",
-	encode: function(context, params, new_value, old_value) {
+	encode(context, params, new_value, old_value) {
 		return params.target_field_type.encode(
 			context,
 			params,
@@ -8,7 +8,7 @@
 			old_value
 		);
 	},
-	is_proper_value: async function(
+	async is_proper_value(
 		context,
 		{ target_field_type, target_params = {}, access_strategy_description },
 		new_value,
@@ -26,7 +26,7 @@
 			old_value
 		);
 	},
-	format: function(
+	format(
 		context,
 		{ target_field_type, target_params },
 		decode_value,
@@ -39,18 +39,14 @@
 			format
 		);
 	},
-	filter_to_query: function(
-		context,
-		{ target_field_type, target_params },
-		filter
-	) {
+	filter_to_query(context, { target_field_type, target_params }, filter) {
 		return target_field_type.filter_to_query(
 			context,
 			target_params,
 			filter
 		);
 	},
-	get_aggregation_stages: function(
+	get_aggregation_stages(
 		context,
 		{ target_field_type, target_params },
 		field_name,
@@ -65,7 +61,7 @@
 			query_params
 		);
 	},
-	has_index: function({ target_field_type, target_params }) {
+	has_index({ target_field_type, target_params }) {
 		return target_field_type.has_index(target_params);
 	},
 });
diff --git a/lib/app/base-chips/field-types/single_reference.js b/lib/app/base-chips/field-types/single_reference.js
--- a/lib/app/base-chips/field-types/single_reference.js
+++ b/lib/app/base-chips/field-types/single_reference.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Collection = locreq("lib/chip-types/collection.js");
 const Promise = require("bluebird");
@@ -7,7 +6,7 @@
 	return {
 		name: "single_reference",
 		has_index: () => 1,
-		is_proper_value: function(context, params, new_value) {
+		is_proper_value(context, params, new_value) {
 			const collection = new Collection(app, params.collection);
 			const filter = params.filter || {};
 			if (new_value === "") {
@@ -41,7 +40,7 @@
 							  )
 				);
 		},
-		encode: function(context, params, value_in_code) {
+		encode(context, params, value_in_code) {
 			let resource_id;
 			if (typeof value_in_code === "string") {
 				resource_id = value_in_code;
@@ -50,7 +49,7 @@
 			}
 			return resource_id;
 		},
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			// format can be "expand" or "deep-expand:<depth>", like "deep-expand:3"
 			if (!format) {
 				return decoded_value; // just the ID
@@ -90,7 +89,7 @@
 				{ format: query_format }
 			);
 		},
-		filter_to_query: async function(context, params, field_filter) {
+		async filter_to_query(context, params, field_filter) {
 			// treating filter as a query here
 			if (typeof field_filter !== "object") {
 				return {
@@ -108,7 +107,7 @@
 			);
 			return { $in: resources.map(resource => resource.id) };
 		},
-		get_aggregation_stages: function(
+		get_aggregation_stages(
 			context,
 			params,
 			field_name,
@@ -118,10 +117,10 @@
 			const collection = new Collection(app, params.collection);
 			const filter = {};
 			const temp_field_name =
-				collection.name +
-				"-" +
-				"lookup" +
-				Math.floor(Math.random().toString() * Math.pow(10, 7));
+				`${collection.name}-` +
+				`lookup${Math.floor(
+					Math.random().toString() * Math.pow(10, 7)
+				)}`;
 			const request_filter = query.filter && query.filter[field_name];
 			if (!request_filter || Object.keys(request_filter).length === 0)
 				return [];
@@ -143,16 +142,15 @@
 				let field = collection.fields[field_name];
 				if (!field)
 					return Promise.reject(
-						"Unknown field in filter for '" +
-							collection.name +
-							"': " +
-							field_name
+						`Unknown field in filter for '${
+							collection.name
+						}': ${field_name}`
 					);
 				filter[
 					`${temp_field_name}.0.${field_name}`
 				] = field.filter_to_query(context, request_filter[field_name]);
 			}
-			return Promise.props(filter).then(function(_filter) {
+			return Promise.props(filter).then(_filter => {
 				return [
 					{
 						$lookup: {
diff --git a/lib/app/base-chips/field-types/text.js b/lib/app/base-chips/field-types/text.js
--- a/lib/app/base-chips/field-types/text.js
+++ b/lib/app/base-chips/field-types/text.js
@@ -1,20 +1,18 @@
-"use strict";
 const Promise = require("bluebird");
 const escape = require("escape-html");
 
 module.exports = {
 	name: "text",
-	has_index: function(params) {
+	has_index(params) {
 		if (params.full_text_search || params.include_in_search) {
 			return { original: "text" };
-		} else {
-			return false;
 		}
+		return false;
 	},
-	get_description: function(context, params) {
+	get_description(context, params) {
 		return `Text with maximum length ${params.max_length}`;
 	},
-	is_proper_value: function(context, params, new_value) {
+	is_proper_value(context, params, new_value) {
 		let checks = [];
 
 		checks.push(text => {
@@ -50,19 +48,20 @@
 			Promise.resolve()
 		);
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		if (typeof value_in_code === "string" && value_in_code !== null) {
 			const result = {
 				original: value_in_code,
 				safe: escape(value_in_code),
-				valueOf: function() {
+				valueOf() {
 					return value_in_code;
 				},
 			};
 			return Promise.resolve(result);
-		} else return Promise.resolve(null);
+		}
+		return Promise.resolve(null);
 	},
-	get_aggregation_stages: function(
+	get_aggregation_stages(
 		context,
 		params,
 		field_name,
@@ -97,7 +96,7 @@
 			},
 		];
 	},
-	format: function(context, params, decoded_value, format) {
+	format(context, params, decoded_value, format) {
 		if (decoded_value === null || decoded_value === undefined) {
 			return Promise.resolve(decoded_value);
 		}
diff --git a/lib/app/base-chips/field-types/username.js b/lib/app/base-chips/field-types/username.js
--- a/lib/app/base-chips/field-types/username.js
+++ b/lib/app/base-chips/field-types/username.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const me_synonyms = locreq("lib/misc/me-synonyms.json");
 const SuperContext = locreq("lib/super-context.js");
@@ -7,7 +6,7 @@
 	return {
 		name: "username",
 		extends: "text",
-		is_proper_value: async function(context, params, new_value, old_value) {
+		async is_proper_value(context, params, new_value, old_value) {
 			if (old_value === new_value) {
 				return;
 			}
@@ -23,7 +22,7 @@
 					"show",
 					{ filter: { username: new_value } }
 				)
-				.then(function({ items }) {
+				.then(({ items }) => {
 					if (items.length > 0) {
 						throw new Error("Username already taken");
 					}
diff --git a/lib/app/base-chips/field-types/value-existing-in-collection.js b/lib/app/base-chips/field-types/value-existing-in-collection.js
--- a/lib/app/base-chips/field-types/value-existing-in-collection.js
+++ b/lib/app/base-chips/field-types/value-existing-in-collection.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const assert = require("assert");
 const Promise = require("bluebird");
@@ -6,7 +5,7 @@
 module.exports = function(app) {
 	return {
 		name: "value-existing-in-collection",
-		is_proper_value: async function(context, params, new_value) {
+		async is_proper_value(context, params, new_value) {
 			assert.equal(typeof params.field, "string");
 			assert(
 				typeof params.include_forbidden === "boolean" ||
@@ -37,27 +36,27 @@
 				);
 			}
 		},
-		encode: async function(context, params, value_in_code, old_value) {
+		async encode(context, params, value_in_code, old_value) {
 			return params.collection.fields[params.field].encode(
 				context,
 				value_in_code,
 				old_value
 			);
 		},
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			return params.collection.fields[params.field].format(
 				context,
 				decoded_value,
 				format
 			);
 		},
-		filter_to_query: function(context, params, field_filter) {
+		filter_to_query(context, params, field_filter) {
 			return params.collection.fields[params.field].filter_to_query(
 				context,
 				field_filter
 			);
 		},
-		get_aggregation_stages: function(context, params, field_name, query) {
+		get_aggregation_stages(context, params, field_name, query) {
 			return params.collection.fields[
 				params.field
 			].get_aggregation_stages(context, field_name, query);
diff --git a/lib/app/base-chips/field-types/value-exists-in-collection.js b/lib/app/base-chips/field-types/value-exists-in-collection.js
--- a/lib/app/base-chips/field-types/value-exists-in-collection.js
+++ b/lib/app/base-chips/field-types/value-exists-in-collection.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const assert = require("assert");
 const Promise = require("bluebird");
@@ -6,7 +5,7 @@
 module.exports = function(app) {
 	return {
 		name: "value-exists-in-collection",
-		is_proper_value: async function(context, params, new_value) {
+		async is_proper_value(context, params, new_value) {
 			assert.equal(typeof params.field, "string");
 			assert(
 				typeof params.include_forbidden === "boolean" ||
@@ -29,35 +28,32 @@
 			);
 			if (matches.length) {
 				return Promise.resolve();
-			} else {
-				return Promise.reject(
-					`No ${collection.name} with ${
-						params.field
-					} set to ${new_value}`
-				);
 			}
+			return Promise.reject(
+				`No ${collection.name} with ${params.field} set to ${new_value}`
+			);
 		},
-		encode: async function(context, params, value_in_code, old_value) {
+		async encode(context, params, value_in_code, old_value) {
 			return params.collection.fields[params.field].encode(
 				context,
 				value_in_code,
 				old_value
 			);
 		},
-		format: function(context, params, decoded_value, format) {
+		format(context, params, decoded_value, format) {
 			return params.collection.fields[params.field].format(
 				context,
 				decoded_value,
 				format
 			);
 		},
-		filter_to_query: function(context, params, field_filter) {
+		filter_to_query(context, params, field_filter) {
 			return params.collection.fields[params.field].filter_to_query(
 				context,
 				field_filter
 			);
 		},
-		get_aggregation_stages: function(context, params, field_name, query) {
+		get_aggregation_stages(context, params, field_name, query) {
 			return params.collection.fields[
 				params.field
 			].get_aggregation_stages(context, field_name, query);
diff --git a/lib/app/chip-manager.js b/lib/app/chip-manager.js
--- a/lib/app/chip-manager.js
+++ b/lib/app/chip-manager.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Errors = locreq("lib/response/error.js");
@@ -16,7 +15,7 @@
 ];
 
 ChipManager.pure = {
-	start_chips: function(app, chips) {
+	start_chips(app, chips) {
 		const promises = [];
 		const datastore = ChipManager.pure.get_datastore_chip(app, chips);
 
@@ -41,7 +40,7 @@
 		}
 		return Promise.all(promises);
 	},
-	add_chip: function(chips, type, name, chip) {
+	add_chip(chips, type, name, chip) {
 		if (chips[type] === undefined) {
 			chips[type] = [];
 		}
@@ -49,14 +48,14 @@
 			throw Error(`Chip '${type}.${name}' already exists!`);
 		chips[type][name] = chip;
 	},
-	get_all_collections: function(chips) {
+	get_all_collections(chips) {
 		const names = [];
 		for (const collection in chips.collection) {
 			names.push(collection);
 		}
 		return names;
 	},
-	get_chip: function(chips, type, name) {
+	get_chip(chips, type, name) {
 		try {
 			const ret = chips[type][name];
 			if (ret === undefined) {
@@ -73,17 +72,16 @@
 			);
 		}
 	},
-	get_chip_amount_by_type: function(chips, type) {
+	get_chip_amount_by_type(chips, type) {
 		if (chips[type]) {
 			return Object.keys(chips[type]).length;
-		} else {
-			return 0;
 		}
+		return 0;
 	},
-	get_datastore_chip: function(app, chips) {
+	get_datastore_chip(app, chips) {
 		return app.Datastore;
 	},
-	get_chips_by_type: function(chips, chip_type) {
+	get_chips_by_type(chips, chip_type) {
 		return chips[chip_type];
 	},
 };
diff --git a/lib/app/file-manager.js b/lib/app/file-manager.js
--- a/lib/app/file-manager.js
+++ b/lib/app/file-manager.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const UUIDGenerator = require("shortid");
@@ -18,14 +17,14 @@
 }
 
 FileManager.pure = {
-	save_file: function(datastore, upload_path, file) {
+	save_file(datastore, upload_path, file) {
 		const newID = UUIDGenerator();
 		const upload_path_with_sealious_name = `${upload_path}/${newID}`;
 		return Promise.promisify(fs.writeFile)(
 			upload_path_with_sealious_name,
 			file.data
 		)
-			.then(function() {
+			.then(() => {
 				const file_database_entry = {
 					original_name: file.filename,
 					creation_context: file.context,
@@ -34,16 +33,16 @@
 				};
 				return datastore.insert("files", file_database_entry, {});
 			})
-			.then(function() {
+			.then(() => {
 				return {
 					id: newID,
 					filename: file.filename,
 				};
 			});
 	},
-	find: function(datastore, upload_path, context, query) {
-		return datastore.find("files", query).then(function(documents) {
-			const parsed_documents = documents.map(function(document) {
+	find(datastore, upload_path, context, query) {
+		return datastore.find("files", query).then(documents => {
+			const parsed_documents = documents.map(document => {
 				const ret = File.from_db_entry(document);
 				ret.path_on_hdd = path.resolve(upload_path, `./${ret.id}`);
 				return ret;
@@ -51,10 +50,10 @@
 			return Promise.resolve(parsed_documents);
 		});
 	},
-	get_by_id: function(datastore, upload_path, context, file_id) {
+	get_by_id(datastore, upload_path, context, file_id) {
 		return FileManager.pure
 			.find(datastore, upload_path, context, { id: file_id })
-			.then(function(file_array) {
+			.then(file_array => {
 				return Promise.resolve(file_array[0]);
 			});
 	},
diff --git a/lib/app/load-base-chips.js b/lib/app/load-base-chips.js
--- a/lib/app/load-base-chips.js
+++ b/lib/app/load-base-chips.js
@@ -1,5 +1,3 @@
-"use strict";
-
 const locreq = require("locreq")(__dirname);
 
 const AccessStrategyType = locreq("lib/chip-types/access-strategy-type.js");
@@ -77,7 +75,7 @@
 BaseChipDirs.set(Collection, "collections");
 
 const to_load = [];
-BaseChips.forEach(function(names, constructor) {
+BaseChips.forEach((names, constructor) => {
 	for (const i in names) {
 		const chip_name = names[i];
 		let declaration = locreq(
diff --git a/lib/app/logger.js b/lib/app/logger.js
--- a/lib/app/logger.js
+++ b/lib/app/logger.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const winston = require("winston");
 const { getTimeDifference } = locreq("lib/utils/get-datetime.js");
@@ -54,7 +53,7 @@
 		transports: transports_array,
 	});
 
-	logger.rewriters.push(function(level, msg, meta) {
+	logger.rewriters.push((level, msg, meta) => {
 		let ret = "";
 		if (Object.keys(meta).length) {
 			let message = "\n";
diff --git a/lib/app/metadata.js b/lib/app/metadata.js
--- a/lib/app/metadata.js
+++ b/lib/app/metadata.js
@@ -6,17 +6,16 @@
 		const matches = await app.Datastore.find(COLLECTION_NAME, { key });
 		if (matches.length) {
 			return matches[0].value;
-		} else {
-			undefined;
 		}
+		undefined;
 	},
 	async set(key, value) {
 		const matches = await app.Datastore.find(COLLECTION_NAME, { key });
 		if (matches.length) {
 			await app.Datastore.update(
 				COLLECTION_NAME,
-				{ key: key },
-				{ $set: { value: value } }
+				{ key },
+				{ $set: { value } }
 			);
 		} else {
 			await app.Datastore.insert(COLLECTION_NAME, { key, value });
diff --git a/lib/app/run-action-curry.js b/lib/app/run-action-curry.js
--- a/lib/app/run-action-curry.js
+++ b/lib/app/run-action-curry.js
@@ -1,4 +1,3 @@
-"use strict";
 const assert = require("assert");
 const locreq = require("locreq")(__dirname);
 
@@ -33,7 +32,7 @@
 		}
 		let subject = null;
 		const promise = app.RootSubject.get_subject(subject_path)
-			.then(function(_subject) {
+			.then(_subject => {
 				subject = _subject;
 				return app.emit(
 					{
diff --git a/lib/chip-types/access-strategy-type.js b/lib/chip-types/access-strategy-type.js
--- a/lib/chip-types/access-strategy-type.js
+++ b/lib/chip-types/access-strategy-type.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Errors = locreq("lib/response/error.js");
@@ -25,56 +24,51 @@
 AccessStrategyType.type_name = "access_strategy_type";
 
 AccessStrategyType.pure = {
-	check: function(declaration, context, params, item) {
+	check(declaration, context, params, item) {
 		if (context.is_super) {
 			return Promise.resolve();
 		}
 		return AccessStrategyType.pure
 			.is_item_sensitive(declaration, params)
-			.then(function(is_item_sensitive) {
+			.then(is_item_sensitive => {
 				if (is_item_sensitive && item === undefined) {
 					return Promise.resolve(undefined);
-				} else {
-					return Promise.try(function() {
-						return Promise.method(declaration.checker_function)(
-							context,
-							params,
-							item
-						).then(function(result) {
-							if (result === false) {
-								return Promise.reject("Access denied");
-							} else {
-								return Promise.resolve(result);
-							}
-						});
-					});
 				}
+				return Promise.try(() => {
+					return Promise.method(declaration.checker_function)(
+						context,
+						params,
+						item
+					).then(result => {
+						if (result === false) {
+							return Promise.reject("Access denied");
+						}
+						return Promise.resolve(result);
+					});
+				});
 			})
-			.catch(function(error) {
+			.catch(error => {
 				if (typeof error === "string") {
 					return Promise.reject(new Errors.BadContext(error));
-				} else {
-					return Promise.reject(error);
 				}
+				return Promise.reject(error);
 			});
 	},
-	is_item_sensitive: function(declaration, params) {
+	is_item_sensitive(declaration, params) {
 		if (typeof declaration.item_sensitive === "function") {
 			return Promise.resolve(declaration.item_sensitive(params));
-		} else {
-			return Promise.resolve(Boolean(declaration.item_sensitive));
 		}
+		return Promise.resolve(Boolean(declaration.item_sensitive));
 	},
-	getRestrictingQuery: function(declaration, context, params) {
+	getRestrictingQuery(declaration, context, params) {
 		if (declaration.getRestrictingQuery) {
 			return Promise.resolve(
 				declaration.getRestrictingQuery(context, params)
 			).then(result => {
 				return result;
 			});
-		} else {
-			return Promise.resolve([]);
 		}
+		return Promise.resolve([]);
 	},
 };
 
diff --git a/lib/chip-types/access-strategy.js b/lib/chip-types/access-strategy.js
--- a/lib/chip-types/access-strategy.js
+++ b/lib/chip-types/access-strategy.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const AccessStrategyType = locreq("lib/chip-types/access-strategy-type.js");
diff --git a/lib/chip-types/aggregated-field.js b/lib/chip-types/aggregated-field.js
--- a/lib/chip-types/aggregated-field.js
+++ b/lib/chip-types/aggregated-field.js
@@ -8,12 +8,11 @@
 AggregatedField.prototype.get_aggregation_stages = function(context, item) {
 	const self = this;
 	return Promise.all(
-		self.aggregations.map(function(e) {
+		self.aggregations.map(e => {
 			if (e instanceof Function) {
 				return e(context, item);
-			} else {
-				return e;
 			}
+			return e;
 		})
 	);
 };
diff --git a/lib/chip-types/calculated-field-type.js b/lib/chip-types/calculated-field-type.js
--- a/lib/chip-types/calculated-field-type.js
+++ b/lib/chip-types/calculated-field-type.js
@@ -12,7 +12,7 @@
 CalculatedFieldType.type_name = "calculated_field_type";
 
 CalculatedFieldType.pure = {
-	get_value: function(declaration, context, params, item, db_document) {
+	get_value(declaration, context, params, item, db_document) {
 		return Promise.resolve(
 			declaration.calculate(context, params, item, db_document)
 		);
@@ -31,7 +31,7 @@
 const pure = CalculatedFieldType.pure;
 
 CalculatedFieldType.prototype = {
-	get_value: function(context, params, item, raw_db_entry) {
+	get_value(context, params, item, raw_db_entry) {
 		return pure.get_value(
 			this.declaration,
 			context,
diff --git a/lib/chip-types/channel.js b/lib/chip-types/channel.js
--- a/lib/chip-types/channel.js
+++ b/lib/chip-types/channel.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 
 const channel = function(app, declaration) {
diff --git a/lib/chip-types/chip.js b/lib/chip-types/chip.js
--- a/lib/chip-types/chip.js
+++ b/lib/chip-types/chip.js
@@ -1,4 +1,3 @@
-"use strict";
 const Promise = require("bluebird");
 
 let ChipManager;
diff --git a/lib/chip-types/collection.js b/lib/chip-types/collection.js
--- a/lib/chip-types/collection.js
+++ b/lib/chip-types/collection.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const assert = require("assert");
@@ -73,13 +72,7 @@
 Collection.type_name = "collection";
 
 Collection.pure = {
-	add_field: function(
-		app,
-		field_type,
-		fields,
-		field_declaration,
-		collection
-	) {
+	add_field(app, field_type, fields, field_declaration, collection) {
 		const field_object = new Field(
 			app,
 			field_declaration,
@@ -97,13 +90,13 @@
 			);
 		}
 	},
-	add_fields: function(app, field_type, fields, field_declarations_array) {
+	add_fields(app, field_type, fields, field_declarations_array) {
 		for (const i in field_declarations_array) {
 			const declaration = field_declarations_array[i];
 			Collection.pure.add_field(app, field_type, fields, declaration);
 		}
 	},
-	add_calculated_field: function(
+	add_calculated_field(
 		app,
 		collection,
 		calc_field_name,
@@ -120,7 +113,7 @@
 	add_special_filters(Collection, named_filters) {
 		Collection.named_filters = named_filters;
 	},
-	get_unknown_field_errors: function(field_type_name, fields, values) {
+	get_unknown_field_errors(field_type_name, fields, values) {
 		const validation_errors = {};
 		for (const field_name in values) {
 			if (fields[field_name] === undefined) {
@@ -131,7 +124,7 @@
 		}
 		return validation_errors;
 	},
-	get_missing_values_checker: function(
+	get_missing_values_checker(
 		fields,
 		values,
 		assume_delete_value_on_missing_key,
@@ -144,17 +137,16 @@
 					values[field_name] === undefined
 				);
 			};
-		} else {
-			return function(field_name) {
-				return (
-					fields[field_name].required &&
-					values[field_name] === undefined &&
-					old_values[field_name] === undefined
-				);
-			};
 		}
+		return function(field_name) {
+			return (
+				fields[field_name].required &&
+				values[field_name] === undefined &&
+				old_values[field_name] === undefined
+			);
+		};
 	},
-	get_missing_field_values_errors: function(
+	get_missing_field_values_errors(
 		fields,
 		values,
 		assume_delete_value_on_missing_key,
@@ -169,21 +161,16 @@
 		);
 
 		return Promise.filter(Object.keys(fields), checker_fn)
-			.each(function(field_name) {
+			.each(field_name => {
 				errors[field_name] = new Errors.ValidationError(
 					`Missing value for field '${field_name}'`
 				);
 			})
-			.then(function() {
+			.then(() => {
 				return errors;
 			});
 	},
-	get_invalid_field_values_errors: function(
-		fields,
-		context,
-		values,
-		old_values
-	) {
+	get_invalid_field_values_errors(fields, context, values, old_values) {
 		const errors = {};
 		const promises = [];
 		for (const field_name in values) {
@@ -195,7 +182,7 @@
 					: undefined;
 				const promise = fields[field_name]
 					.is_proper_value(context, value, old_value)
-					.catch(function(error) {
+					.catch(error => {
 						if (
 							typeof error === "string" ||
 							error.type === "validation"
@@ -210,11 +197,11 @@
 				promises.push(promise);
 			}
 		}
-		return Promise.all(promises).then(function() {
+		return Promise.all(promises).then(() => {
 			return errors;
 		});
 	},
-	get_missing_required_field_values: function(fields, new_values) {
+	get_missing_required_field_values(fields, new_values) {
 		const errors = {};
 		for (const field_name in new_values) {
 			if (
@@ -229,7 +216,7 @@
 		}
 		return errors;
 	},
-	validate_field_values: function(
+	validate_field_values(
 		field_type_name,
 		fields,
 		context,
@@ -263,7 +250,7 @@
 
 		return Promise.all(errors_array)
 			.reduce(merge)
-			.then(function(errors) {
+			.then(errors => {
 				const user_errors = {};
 				const non_user_errors = {};
 				for (const field_name in errors) {
@@ -288,7 +275,7 @@
 				}
 			});
 	},
-	encode_field_values: async function(fields, context, body, old_body) {
+	async encode_field_values(fields, context, body, old_body) {
 		const promises = {};
 		for (let field_name in fields) {
 			const field = fields[field_name];
@@ -316,7 +303,7 @@
 		}
 		return Promise.props(promises);
 	},
-	get_specification: function(
+	get_specification(
 		name,
 		human_readable_name,
 		summary,
@@ -333,14 +320,14 @@
 		}
 
 		const specification = {
-			name: name,
-			human_readable_name: human_readable_name,
-			summary: summary,
+			name,
+			human_readable_name,
+			summary,
 			fields: collection_specification,
 		};
 		return specification;
 	},
-	set_access_strategy: function(app, collection, strategy_declaration) {
+	set_access_strategy(app, collection, strategy_declaration) {
 		if (
 			typeof strategy_declaration === "string" ||
 			strategy_declaration instanceof AccessStrategyType ||
@@ -359,12 +346,12 @@
 			}
 		}
 	},
-	get_access_strategy: function(access_strategy_map, action_name) {
+	get_access_strategy(access_strategy_map, action_name) {
 		const ret =
-			access_strategy_map[action_name] || access_strategy_map["default"];
+			access_strategy_map[action_name] || access_strategy_map.default;
 		return ret;
 	},
-	has_large_data_fields: function(fields) {
+	has_large_data_fields(fields) {
 		for (const i in fields) {
 			const field = fields[i];
 			if (field.type.handles_large_data) {
@@ -373,7 +360,7 @@
 		}
 		return false;
 	},
-	is_old_value_sensitive: function(fields, action_name) {
+	is_old_value_sensitive(fields, action_name) {
 		for (const i in fields) {
 			if (fields[i].type.is_old_value_sensitive(action_name)) {
 				return true;
@@ -381,7 +368,7 @@
 		}
 		return false;
 	},
-	decode_values: function(fields, context, values) {
+	decode_values(fields, context, values) {
 		const decoded_values = {};
 		for (const key in fields) {
 			const value = values[key];
@@ -393,7 +380,7 @@
 		}
 		return Promise.props(decoded_values);
 	},
-	format_decoded_values: function(fields, context, decoded_values, format) {
+	format_decoded_values(fields, context, decoded_values, format) {
 		const formatted_values = clone(decoded_values);
 		for (const field_name in formatted_values) {
 			const field_format = format[field_name] || undefined;
@@ -406,7 +393,7 @@
 		}
 		return Promise.props(formatted_values);
 	},
-	_get_body: async function(fields, context, db_document, format) {
+	async _get_body(fields, context, db_document, format) {
 		const decoded_values = await Collection.pure.decode_values(
 			fields,
 			context,
@@ -419,7 +406,7 @@
 			format || {}
 		);
 	},
-	_get_calculated_fields: function(
+	_get_calculated_fields(
 		context,
 		calculated_fields,
 		representation,
@@ -438,7 +425,7 @@
 		}
 		return Promise.props(ret);
 	},
-	get_resource_representation: async function(
+	async get_resource_representation(
 		fields,
 		field_type_name,
 		context,
@@ -468,7 +455,7 @@
 		}
 		return representation;
 	},
-	check_if_action_is_allowed: function(
+	check_if_action_is_allowed(
 		access_strategy_map,
 		context,
 		action_name,
@@ -481,11 +468,11 @@
 
 		return access_strategy
 			.check(context, resource_representation)
-			.then(function(results) {
+			.then(results => {
 				return results;
 			});
 	},
-	get_aggregation_stages: function(
+	get_aggregation_stages(
 		collection,
 		context,
 		action_name,
@@ -572,13 +559,13 @@
 			type_params
 		);
 	},
-	add_special_filters: function(named_filters = []) {
+	add_special_filters(named_filters = []) {
 		return pure.add_special_filters(this, named_filters);
 	},
-	get_named_filter: function(filter_name) {
+	get_named_filter(filter_name) {
 		return this.named_filters[filter_name];
 	},
-	add_named_filter: function(filter_name, filter) {
+	add_named_filter(filter_name, filter) {
 		this.named_filters[filter_name] = filter;
 	},
 	validate_field_values(
diff --git a/lib/chip-types/datastore.js b/lib/chip-types/datastore.js
--- a/lib/chip-types/datastore.js
+++ b/lib/chip-types/datastore.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const assert = require("assert");
 const Chip = require("./chip.js");
@@ -40,7 +39,7 @@
 	const test_collection_name = "_test";
 
 	return Promise.resolve()
-		.then(function() {
+		.then(() => {
 			// .insert method should respond with the created document
 			const to_insert = {
 				value: 1,
@@ -48,7 +47,7 @@
 			};
 			return self
 				.insert(test_collection_name, to_insert)
-				.then(function(response) {
+				.then(response => {
 					assert.deepEqual(
 						to_insert,
 						response,
@@ -57,22 +56,18 @@
 					return Promise.resolve();
 				});
 		})
-		.then(function() {
+		.then(() => {
 			// check if find resolves with an array
 
-			return self
-				.find(test_collection_name, {}, {})
-				.then(function(documents) {
-					assert(
-						documents instanceof Array,
-						`datastore.${
-							self.name
-						}.find should resolve with an array`
-					);
-					return Promise.resolve();
-				});
+			return self.find(test_collection_name, {}, {}).then(documents => {
+				assert(
+					documents instanceof Array,
+					`datastore.${self.name}.find should resolve with an array`
+				);
+				return Promise.resolve();
+			});
 		})
-		.then(function() {
+		.then(() => {
 			// check if amount of created documents checks out
 			const creates = [
 				self.insert(test_collection_name, {
@@ -91,10 +86,10 @@
 
 			const created_so_far = 4;
 			return Promise.all(creates)
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {}, {});
 				})
-				.then(function(documents) {
+				.then(documents => {
 					assert(
 						documents.length === created_so_far,
 						`Inserted ${created_so_far} documents so far, but ${
@@ -104,7 +99,7 @@
 					return Promise.resolve(created_so_far);
 				});
 		})
-		.then(function(created_so_far) {
+		.then(created_so_far => {
 			// check if there is a proper amount of documents with random value set to rand
 			const documents_with_rand = created_so_far - 1;
 			return self
@@ -115,7 +110,7 @@
 					},
 					{}
 				)
-				.then(function(documents) {
+				.then(documents => {
 					assert(
 						documents.length === documents_with_rand,
 						`Inserted ${documents_with_rand} documents with "random" set to "${rand}" so far, but ${
@@ -125,7 +120,7 @@
 					return Promise.resolve();
 				});
 		})
-		.then(function() {
+		.then(() => {
 			// Should store a complex object
 			const complex_object = {
 				id: "aseoifaoeina",
@@ -136,7 +131,7 @@
 			};
 			return self
 				.insert(test_collection_name, complex_object)
-				.then(function(response) {
+				.then(response => {
 					assert.deepEqual(
 						complex_object,
 						response,
@@ -146,7 +141,7 @@
 						id: complex_object.id,
 					});
 				})
-				.then(function(response) {
+				.then(response => {
 					assert.deepEqual(
 						complex_object,
 						response[0],
@@ -155,13 +150,13 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// Should handle dot-notation nested queries
 			return self
 				.find(test_collection_name, {
 					name: complex_object.name,
 				})
-				.then(function(response) {
+				.then(response => {
 					assert.deepEqual(
 						complex_object,
 						response[0],
@@ -170,14 +165,14 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			return self
 				.find(test_collection_name, {
 					body: {
 						name: complex_object.name,
 					},
 				})
-				.then(function(response) {
+				.then(response => {
 					assert.deepEqual(
 						complex_object,
 						response[0],
@@ -186,7 +181,7 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// .update should modify document values with dot notation
 			complex_object.name = "Hanna";
 			return self
@@ -199,12 +194,12 @@
 						name: complex_object.name,
 					}
 				)
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {
 						id: complex_object.id,
 					});
 				})
-				.then(function(results) {
+				.then(results => {
 					assert.deepEqual(
 						complex_object,
 						results[0],
@@ -213,7 +208,7 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// .update should modify document values using nested object as a query
 			complex_object.name = "Marzanna";
 			return self
@@ -228,12 +223,12 @@
 						},
 					}
 				)
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {
 						id: complex_object.id,
 					});
 				})
-				.then(function(results) {
+				.then(results => {
 					assert.deepEqual(
 						complex_object,
 						results[0],
@@ -242,7 +237,7 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// .update should insert new value to a field that previously had no value (undefined)
 			complex_object.other = "Focca";
 			return self
@@ -257,12 +252,12 @@
 						},
 					}
 				)
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {
 						id: complex_object.id,
 					});
 				})
-				.then(function(results) {
+				.then(results => {
 					assert.deepEqual(
 						complex_object,
 						results[0],
@@ -271,14 +266,14 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// .remove should remove only one document when "just_one" is set to true
 			return Promise.all([
 				self.insert(test_collection_name, complex_object),
 				self.insert(test_collection_name, complex_object),
 				self.insert(test_collection_name, complex_object),
 			])
-				.then(function() {
+				.then(() => {
 					// all the "complex_object" documents have the same id
 					return self.remove(
 						test_collection_name,
@@ -288,12 +283,12 @@
 						true
 					);
 				})
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {
 						id: complex_object.id,
 					});
 				})
-				.then(function(results) {
+				.then(results => {
 					assert(
 						results.length === 3,
 						".remove should remove only *one* document when `just_one` argument is set to true"
@@ -301,14 +296,14 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function(complex_object) {
+		.then(complex_object => {
 			// .remove should remove all matching documents when "just_one" is falsy
 			return Promise.all([
 				self.insert(test_collection_name, complex_object),
 				self.insert(test_collection_name, complex_object),
 				self.insert(test_collection_name, complex_object),
 			])
-				.then(function() {
+				.then(() => {
 					// all the "complex_object" documents have the same id
 					return self.remove(
 						test_collection_name,
@@ -318,12 +313,12 @@
 						false
 					);
 				})
-				.then(function() {
+				.then(() => {
 					return self.find(test_collection_name, {
 						id: complex_object.id,
 					});
 				})
-				.then(function(results) {
+				.then(results => {
 					assert(
 						results.length === 0,
 						".remove should remove all matching documents when 'just_one' is falsy"
@@ -331,10 +326,10 @@
 					return Promise.resolve(complex_object);
 				});
 		})
-		.then(function() {
+		.then(() => {
 			self.clear_collection(test_collection_name);
 		})
-		.catch(function() {
+		.catch(() => {
 			self.clear_collection(test_collection_name);
 			return Promise.reject("Compatibility test unsuccesfull");
 		});
diff --git a/lib/chip-types/field-structures.js b/lib/chip-types/field-structures.js
--- a/lib/chip-types/field-structures.js
+++ b/lib/chip-types/field-structures.js
@@ -1,4 +1,3 @@
-"use strict";
 const FieldStructures = {
 	single: require("./field-structures/single.js"),
 };
diff --git a/lib/chip-types/field-type-default-methods.js b/lib/chip-types/field-type-default-methods.js
--- a/lib/chip-types/field-type-default-methods.js
+++ b/lib/chip-types/field-type-default-methods.js
@@ -1,44 +1,43 @@
-"use strict";
 const Promise = require("bluebird");
 const expandHash = require("expand-hash");
 
 const FieldTypeDescription = require("../data-structures/field-type-description.js");
 
 const default_methods = {
-	init: function() {
+	init() {
 		return null;
 	},
-	has_index: function(params) {
+	has_index(params) {
 		return false;
 	},
-	is_proper_value: function(context, params, new_value, old_value) {
+	is_proper_value(context, params, new_value, old_value) {
 		return Promise.resolve();
 	},
-	format: function(context, params, decoded_value, format_params) {
+	format(context, params, decoded_value, format_params) {
 		return decoded_value;
 	},
-	encode: function(context, params, value_in_code) {
+	encode(context, params, value_in_code) {
 		return value_in_code;
 	},
-	get_description: function(context, params) {
+	get_description(context, params) {
 		return new FieldTypeDescription(this.name);
 	},
-	decode: function(context, params, value_in_database) {
+	decode(context, params, value_in_database) {
 		return value_in_database;
 	},
-	filter_to_query: function(context, params, query) {
+	filter_to_query(context, params, query) {
 		return Promise.resolve(this.encode(context, params, query)).then(
-			function(encoded_value) {
+			encoded_value => {
 				return {
 					$eq: encoded_value,
 				};
 			}
 		);
 	},
-	full_text_search_enabled: function() {
+	full_text_search_enabled() {
 		return false;
 	},
-	get_aggregation_stages: async function(
+	async get_aggregation_stages(
 		context,
 		params,
 		field_name,
@@ -64,7 +63,7 @@
 		let new_filter = null;
 		if (field_filter instanceof Array) {
 			new_filter = await Promise.all(
-				field_filter.map(function(element) {
+				field_filter.map(element => {
 					return self.encode(context, params, element);
 				})
 			).then(filters => {
diff --git a/lib/chip-types/field-type.js b/lib/chip-types/field-type.js
--- a/lib/chip-types/field-type.js
+++ b/lib/chip-types/field-type.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
diff --git a/lib/chip-types/field.js b/lib/chip-types/field.js
--- a/lib/chip-types/field.js
+++ b/lib/chip-types/field.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const default_methods = require("./field-type-default-methods.js");
 const FieldType = locreq("lib/chip-types/field-type.js");
diff --git a/lib/context.js b/lib/context.js
--- a/lib/context.js
+++ b/lib/context.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const promisify = require("bluebird-events");
 const EventEmitter = require("events");
@@ -70,19 +69,18 @@
 		const c = new SuperContext(self);
 		return app
 			.run_action(c, ["collections", "users", this.user_id], "show")
-			.then(function(user_data) {
+			.then(user_data => {
 				self._cached_user_data = user_data;
 				self.loading_user_data = false;
 				self.e.emit("loaded_user_data", user_data);
 				return user_data;
 			})
-			.catch(function(error) {
+			.catch(error => {
 				self.e.emit("error");
 				throw error;
 			});
-	} else {
-		return Promise.resolve(self._cached_user_data);
 	}
+	return Promise.resolve(self._cached_user_data);
 };
 
 module.exports = Context;
diff --git a/lib/data-structures/field-type-description.js b/lib/data-structures/field-type-description.js
--- a/lib/data-structures/field-type-description.js
+++ b/lib/data-structures/field-type-description.js
@@ -1,6 +1,3 @@
-"use strict";
-"use strict";
-
 const FieldTypeDescription = function(summary, raw_params, extra_info) {
 	this.summary = summary;
 	this.raw_params = raw_params;
diff --git a/lib/data-structures/file.js b/lib/data-structures/file.js
--- a/lib/data-structures/file.js
+++ b/lib/data-structures/file.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const mime = require("mime-types");
 
diff --git a/lib/data-structures/subject-path.js b/lib/data-structures/subject-path.js
--- a/lib/data-structures/subject-path.js
+++ b/lib/data-structures/subject-path.js
@@ -1,5 +1,3 @@
-"use strict";
-
 const clone = require("clone");
 
 const SubjectPath = function(subject_path) {
diff --git a/lib/data-structures/virtual-file.js b/lib/data-structures/virtual-file.js
--- a/lib/data-structures/virtual-file.js
+++ b/lib/data-structures/virtual-file.js
@@ -1,6 +1,3 @@
-"use strict";
-"use strict";
-
 const VirtualFile = function(content, mime) {
 	this.content = content;
 	this.mime = mime || "text/plain";
diff --git a/lib/datastore/db.js b/lib/datastore/db.js
--- a/lib/datastore/db.js
+++ b/lib/datastore/db.js
@@ -1,33 +1,29 @@
-"use strict";
-var Promise = require("bluebird");
-var MongoClient = require("mongodb").MongoClient;
-var DbsCommonPart = require("./mongo-api-abstract");
+const Promise = require("bluebird");
+const MongoClient = require("mongodb").MongoClient;
+const DbsCommonPart = require("./mongo-api-abstract");
 
 module.exports = function(App) {
 	const priv = { db: null };
 	let client = null;
 
-	var DatastoreMongo = App.createChip(App.Sealious.Datastore, {
+	const DatastoreMongo = App.createChip(App.Sealious.Datastore, {
 		name: "mongo",
 	});
 
 	DatastoreMongo.start = function() {
-		var self = this;
-		var config = App.ConfigManager.get("datastore_mongo");
+		const self = this;
+		const config = App.ConfigManager.get("datastore_mongo");
 
-		var url = `mongodb://${config.host}:${config.port}/${config.db_name}`;
-		return Promise.promisify(MongoClient.connect)(url).then(function(
-			_client
-		) {
+		const url = `mongodb://${config.host}:${config.port}/${config.db_name}`;
+		return Promise.promisify(MongoClient.connect)(url).then(_client => {
 			if (_client === null) {
 				return Promise.reject(
 					"MongoDB was not found, please make sure it's installed. Check https://docs.mongodb.org/manual/tutorial/ for more info."
 				);
-			} else {
-				client = _client;
-				priv.db = _client.db(config.db_name);
-				return self.post_start();
 			}
+			client = _client;
+			priv.db = _client.db(config.db_name);
+			return self.post_start();
 		});
 	};
 
diff --git a/lib/datastore/mongo-api-abstract.js b/lib/datastore/mongo-api-abstract.js
--- a/lib/datastore/mongo-api-abstract.js
+++ b/lib/datastore/mongo-api-abstract.js
@@ -1,5 +1,4 @@
-"use strict";
-var Promise = require("bluebird");
+const Promise = require("bluebird");
 const merge = require("merge");
 
 function createIndex(db_collection, index) {
@@ -9,16 +8,16 @@
 	);
 }
 
-var DatabasesCommonPart = function(app, datastore, _private) {
+const DatabasesCommonPart = function(app, datastore, _private) {
 	datastore.post_start = function() {
 		datastore.client = _private.db;
 		const collection_names = app.ChipManager.get_all_collections();
 		const collections = collection_names.map(name =>
 			app.ChipManager.get_chip("collection", name)
 		);
-		return Promise.map(collections, function(collection) {
-			let indexes = [["sealious_id", 1]];
-			for (var field_name in collection.fields) {
+		return Promise.map(collections, collection => {
+			const indexes = [["sealious_id", 1]];
+			for (const field_name in collection.fields) {
 				indexes.push(
 					Promise.all([
 						field_name,
@@ -28,19 +27,18 @@
 			}
 			const db_collection = _private.db.collection(collection.name);
 			return Promise.all(indexes)
-				.then(function(collection_indexes) {
+				.then(collection_indexes => {
 					const all_indexes = collection_indexes
 						.filter(e => e[1] !== false)
-						.map(function(index) {
+						.map(index => {
 							if (index[1] instanceof Object) {
 								const ret = [];
 								for (const i in index[1]) {
-									ret.push([index[0] + "." + i, index[1][i]]);
+									ret.push([`${index[0]}.${i}`, index[1][i]]);
 								}
 								return ret;
-							} else {
-								return [index];
 							}
+							return [index];
 						})
 						.reduce((a, b) => a.concat(b), []);
 
@@ -60,7 +58,7 @@
 								{}
 							),
 					];
-					if (Object.keys(text_indexes[0]).length == 0) {
+					if (!Object.keys(text_indexes[0]).length) {
 						text_indexes = [];
 					}
 
@@ -70,10 +68,10 @@
 
 					return merged_indexes;
 				})
-				.each(function(index) {
+				.each(index => {
 					return createIndex(db_collection, index).catch(
-						e => e.code == 85,
-						function(error) {
+						e => e.code === 85,
+						error => {
 							const index_name = error.message
 								.match(/name: \"([^\"]+)\"/g)[1]
 								.replace('name: "', "")
@@ -91,23 +89,21 @@
 		if (!query) {
 			return {};
 		}
-		var new_query = {};
-		for (var attribute_name in query) {
-			if (attribute_name == "sealious_id") {
+		let new_query = {};
+		for (let attribute_name in query) {
+			if (attribute_name === "sealious_id") {
 				new_query[attribute_name] = query[attribute_name];
-			} else {
-				if (query[attribute_name] instanceof Object) {
-					if (attribute_name[0] === "$") {
-						new_query[attribute_name] = query[attribute_name];
-					} else {
-						for (var i in query[attribute_name]) {
-							new_query[attribute_name + "." + i] =
-								query[attribute_name][i];
-						}
-					}
-				} else {
+			} else if (query[attribute_name] instanceof Object) {
+				if (attribute_name[0] === "$") {
 					new_query[attribute_name] = query[attribute_name];
+				} else {
+					for (let i in query[attribute_name]) {
+						new_query[`${attribute_name}.${i}`] =
+							query[attribute_name][i];
+					}
 				}
+			} else {
+				new_query[attribute_name] = query[attribute_name];
 			}
 		}
 		return new_query;
@@ -118,7 +114,7 @@
 		//query = process_query(query); // - needed, ResourceCollection subject handles that now
 		options = options || {};
 		output_options = output_options || {};
-		var cursor = _private.db
+		let cursor = _private.db
 			.collection(collection_name)
 			.find(query, options);
 		if (output_options.sort) {
@@ -162,17 +158,17 @@
 	datastore.insert = function(collection_name, to_insert, options) {
 		return Promise.promisify(_private.db.collection(collection_name).insert)
 			.bind(_private.db.collection(collection_name))(to_insert, options)
-			.then(function(result) {
+			.then(result => {
 				return result.ops[0];
 			});
 	};
 
 	datastore.update = function(collection_name, query, new_value) {
 		query = process_query(query);
-		return new Promise(function(resolve, reject) {
+		return new Promise((resolve, reject) => {
 			_private.db
 				.collection(collection_name)
-				.update(query, new_value, function(err, WriteResult) {
+				.update(query, new_value, (err, WriteResult) => {
 					if (err) {
 						reject(err);
 					} else {
@@ -184,14 +180,14 @@
 
 	datastore.remove = function(collection_name, query, just_one) {
 		query = process_query(query);
-		return new Promise(function(resolve, reject) {
+		return new Promise((resolve, reject) => {
 			if (just_one === undefined) {
 				just_one = 0;
 			}
 			just_one = just_one ? 1 : 0;
 			_private.db
 				.collection(collection_name)
-				.remove(query, just_one, function(err, delete_response) {
+				.remove(query, just_one, (err, delete_response) => {
 					if (err) {
 						reject(err);
 					} else {
diff --git a/lib/datastore/negate_stage.js b/lib/datastore/negate_stage.js
--- a/lib/datastore/negate_stage.js
+++ b/lib/datastore/negate_stage.js
@@ -9,12 +9,10 @@
 			negated_stage.$or = stage[key].map(expression =>
 				negate_stage(expression)
 			);
+		} else if (stage[key].$not) {
+			negated_stage[key] = stage[key].$not;
 		} else {
-			if (stage[key].$not) {
-				negated_stage[key] = stage[key].$not;
-			} else {
-				negated_stage[key] = { $not: stage[key] };
-			}
+			negated_stage[key] = { $not: stage[key] };
 		}
 	}
 	return negated_stage;
diff --git a/lib/datastore/query-step.js b/lib/datastore/query-step.js
--- a/lib/datastore/query-step.js
+++ b/lib/datastore/query-step.js
@@ -18,7 +18,7 @@
 				field => new QueryStep.Match({ [field]: stage.$match[field] })
 			);
 		}
-		throw new Error("Unsupported stage: " + JSON.stringify(stage));
+		throw new Error(`Unsupported stage: ${JSON.stringify(stage)}`);
 	}
 	pushDump(dumps) {
 		dumps.push(this.body);
@@ -52,7 +52,7 @@
 	pushStage(pipeline) {
 		pipeline.push({ $lookup: this.body });
 		if (this.unwind) {
-			pipeline.push({ $unwind: "$" + this.body.as });
+			pipeline.push({ $unwind: `$${this.body.as}` });
 		}
 		return pipeline;
 	}
diff --git a/lib/datastore/query.js b/lib/datastore/query.js
--- a/lib/datastore/query.js
+++ b/lib/datastore/query.js
@@ -1,5 +1,3 @@
-"use strict";
-
 const object_hash = require("object-hash");
 const QueryStep = require("./query-step.js");
 const transformObject = require("../utils/transform-object.js");
diff --git a/lib/datastore/query.test.js b/lib/datastore/query.test.js
--- a/lib/datastore/query.test.js
+++ b/lib/datastore/query.test.js
@@ -55,7 +55,7 @@
 					},
 				},
 				{
-					$unwind: "$" + authors_hash,
+					$unwind: `$${authors_hash}`,
 				},
 				{
 					$match: {
@@ -72,7 +72,7 @@
 						as: states_hash,
 					},
 				},
-				{ $unwind: "$" + states_hash },
+				{ $unwind: `$${states_hash}` },
 				{
 					$match: {
 						$or: [
diff --git a/lib/email/smtp-mailer.js b/lib/email/smtp-mailer.js
--- a/lib/email/smtp-mailer.js
+++ b/lib/email/smtp-mailer.js
@@ -4,10 +4,10 @@
 class SmtpMailer {
 	constructor(app) {
 		const config = app.ConfigManager.get("smtp");
-		assert(typeof config.host == "string");
-		assert(typeof config.port == "number");
-		assert(typeof config.user == "string");
-		assert(typeof config.password == "string");
+		assert(typeof config.host === "string");
+		assert(typeof config.port === "number");
+		assert(typeof config.user === "string");
+		assert(typeof config.password === "string");
 		this.mail_config = app.ConfigManager.get("email");
 		this.transport = nodemailer.createTransport({
 			host: config.host,
diff --git a/lib/email/templates/simple.js b/lib/email/templates/simple.js
--- a/lib/email/templates/simple.js
+++ b/lib/email/templates/simple.js
@@ -19,7 +19,7 @@
 		html = "dummy";
 	}
 
-	const text = data.text + "\n\n" + buttons_to_text(data.buttons);
+	const text = `${data.text}\n\n${buttons_to_text(data.buttons)}`;
 	return new Message({
 		to: data.to,
 		subject: data.subject,
diff --git a/lib/http/error-to-boom.js b/lib/http/error-to-boom.js
--- a/lib/http/error-to-boom.js
+++ b/lib/http/error-to-boom.js
@@ -1,4 +1,3 @@
-"use strict";
 const Sealious = require("../../lib/main");
 const Boom = require("boom");
 
diff --git a/lib/http/extract-context.js b/lib/http/extract-context.js
--- a/lib/http/extract-context.js
+++ b/lib/http/extract-context.js
@@ -1,4 +1,3 @@
-"use strict";
 const Sealious = require("../../lib/main");
 
 function create_anonymous_session(app) {
@@ -20,12 +19,11 @@
 				filter: { "anonymous-session-id": anon_session_id },
 			}
 		)
-		.then(function({ items: anon_sessions }) {
+		.then(({ items: anon_sessions }) => {
 			if (anon_sessions.length === 0) {
 				return create_anonymous_session(app);
-			} else {
-				return anon_sessions[0];
 			}
+			return anon_sessions[0];
 		});
 }
 
@@ -49,7 +47,7 @@
 
 	let anonymous_user_id = null;
 
-	await get_anonymous_data.then(function(anon_session) {
+	await get_anonymous_data.then(anon_session => {
 		anonymous_session_id = anon_session["anonymous-session-id"];
 		anonymous_user_id = anon_session["anonymous-user-id"];
 	});
diff --git a/lib/http/get-request-body.js b/lib/http/get-request-body.js
--- a/lib/http/get-request-body.js
+++ b/lib/http/get-request-body.js
@@ -1,9 +1,8 @@
-"use strict";
 const merge = require("merge");
 const Sealious = require("../../lib/main");
 
 const squares = {
-	set: function(obj, key, value) {
+	set(obj, key, value) {
 		const keys = key.split(/[\]\[]{1,2}/g);
 		if (keys.length > 1) {
 			keys.splice(-1); //to remove the trailing empty string;
@@ -38,14 +37,14 @@
 	for (const i in request.payload) {
 		squares.set(parsed_query, i, request.payload[i]);
 	}
-	for (var i in request.payload) {
+	for (const i in request.payload) {
 		if (
 			request.payload[i].payload &&
 			request.payload[i].payload instanceof Buffer
 		) {
 			let filename = request.payload[i].filename;
-			var mime_type = request.payload[i].headers["content-type"];
-			var data = request.payload[i].payload;
+			const mime_type = request.payload[i].headers["content-type"];
+			const data = request.payload[i].payload;
 			parsed_query[i] = new Sealious.File(
 				context,
 				filename,
diff --git a/lib/http/handle-error.js b/lib/http/handle-error.js
--- a/lib/http/handle-error.js
+++ b/lib/http/handle-error.js
@@ -1,4 +1,3 @@
-"use strict";
 const error_to_boom = require("./error-to-boom.js");
 
 module.exports = function(app, h) {
@@ -6,8 +5,7 @@
 		app.Logger.error(error);
 		if (error instanceof app.Sealious.Error && error.is_user_fault) {
 			return error_to_boom(error);
-		} else {
-			return error;
 		}
+		return error;
 	};
 };
diff --git a/lib/http/handle-request.js b/lib/http/handle-request.js
--- a/lib/http/handle-request.js
+++ b/lib/http/handle-request.js
@@ -1,4 +1,3 @@
-"use strict";
 const Sealious = require("../../lib/main");
 const get_request_body = require("./get-request-body.js");
 const http_to_subject_method = require("./http-to-method-name.js");
@@ -10,12 +9,13 @@
 function handle_request(app, request, h) {
 	try {
 		const config = app.ConfigManager.get("www-server");
-		var path_elements = request.params.elements.split("/");
-		var action_name = http_to_subject_method[request.method.toUpperCase()];
+		const path_elements = request.params.elements.split("/");
+		const action_name =
+			http_to_subject_method[request.method.toUpperCase()];
 		let context = null;
 
 		return extract_context(app, request)
-			.then(function(_context) {
+			.then(_context => {
 				context = _context;
 				let body = get_request_body(context, request);
 				return app.run_action(
diff --git a/lib/http/handle-response.js b/lib/http/handle-response.js
--- a/lib/http/handle-response.js
+++ b/lib/http/handle-response.js
@@ -1,5 +1,3 @@
-"use strict";
-
 module.exports = function(app, context, h) {
 	const config = app.ConfigManager.get("www-server");
 	return function(response) {
diff --git a/lib/http/http.js b/lib/http/http.js
--- a/lib/http/http.js
+++ b/lib/http/http.js
@@ -1,4 +1,3 @@
-"use strict";
 const stream = require("stream");
 const http = require("http");
 const Promise = require("bluebird");
@@ -53,9 +52,9 @@
 		await server.register(require("inert"));
 
 		server.route({
-			method: method,
-			path: path,
-			handler: async function(request, h) {
+			method,
+			path,
+			async handler(request, h) {
 				let context = null;
 				try {
 					context = await extract_context(app, request);
@@ -76,13 +75,13 @@
 
 		server.route({
 			method: ["GET", "DELETE"],
-			path: path,
+			path,
 			handler: handle_request.bind({}, app),
 		});
 
 		server.route({
 			method: ["PATCH", "PUT", "POST"],
-			path: path,
+			path,
 			config: {
 				payload: {
 					multipart: {
diff --git a/lib/http/routes/finalize-password-reset.subtest.js b/lib/http/routes/finalize-password-reset.subtest.js
--- a/lib/http/routes/finalize-password-reset.subtest.js
+++ b/lib/http/routes/finalize-password-reset.subtest.js
@@ -40,7 +40,7 @@
 			});
 
 			const message_metadata = (await mail_api.get_messages()).filter(
-				message => message.recipients[0] == "<user@example.com>"
+				message => message.recipients[0] === "<user@example.com>"
 			)[0];
 			assert(message_metadata.subject);
 
diff --git a/lib/http/routes/finalize-registration-intent.subtest.js b/lib/http/routes/finalize-registration-intent.subtest.js
--- a/lib/http/routes/finalize-registration-intent.subtest.js
+++ b/lib/http/routes/finalize-registration-intent.subtest.js
@@ -21,7 +21,7 @@
 				options
 			);
 			const message_metadata = (await mail_api.get_messages()).filter(
-				message => message.recipients[0] == "<user@example.com>"
+				message => message.recipients[0] === "<user@example.com>"
 			)[0];
 			assert(message_metadata.subject);
 
diff --git a/lib/http/setup-routes.js b/lib/http/setup-routes.js
--- a/lib/http/setup-routes.js
+++ b/lib/http/setup-routes.js
@@ -3,7 +3,7 @@
 function setup_routes(App, express_app) {
 	const router = express.Router({ mergeParams: true });
 
-	router.all("/*", function(req, res, next) {
+	router.all("/*", (req, res, next) => {
 		const elements = req.url.split("/").slice(1);
 		res.send();
 	});
diff --git a/lib/main.js b/lib/main.js
--- a/lib/main.js
+++ b/lib/main.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Sealious = {};
 const {
diff --git a/lib/response/error.js b/lib/response/error.js
--- a/lib/response/error.js
+++ b/lib/response/error.js
@@ -1,4 +1,3 @@
-"use strict";
 const Response = require("./response.js");
 
 const SealiousErrors = {};
diff --git a/lib/response/response.js b/lib/response/response.js
--- a/lib/response/response.js
+++ b/lib/response/response.js
@@ -1,6 +1,3 @@
-"use strict";
-"use strict";
-
 function Response(data, is_error, type, status_message) {
 	this.status = is_error ? "error" : "success";
 	this.type = type || "response";
diff --git a/lib/response/responses.js b/lib/response/responses.js
--- a/lib/response/responses.js
+++ b/lib/response/responses.js
@@ -1,12 +1,10 @@
-"use strict";
-
 const SealiousResponses = {};
 
 SealiousResponses.NewSession = function(session_id) {
 	this.status = "success";
 	this.message = "Logged in!";
 	Object.defineProperty(this, "metadata", {
-		value: { session_id: session_id },
+		value: { session_id },
 	});
 	this.data = {};
 };
diff --git a/lib/subject/predefined-subjects/collections-subject.js b/lib/subject/predefined-subjects/collections-subject.js
--- a/lib/subject/predefined-subjects/collections-subject.js
+++ b/lib/subject/predefined-subjects/collections-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
diff --git a/lib/subject/predefined-subjects/formatted-images.js b/lib/subject/predefined-subjects/formatted-images.js
--- a/lib/subject/predefined-subjects/formatted-images.js
+++ b/lib/subject/predefined-subjects/formatted-images.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
diff --git a/lib/subject/predefined-subjects/me-subject.js b/lib/subject/predefined-subjects/me-subject.js
--- a/lib/subject/predefined-subjects/me-subject.js
+++ b/lib/subject/predefined-subjects/me-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
@@ -15,7 +14,7 @@
 				action_name,
 				params
 			)
-			.catch({ type: "not_found" }, function(error) {
+			.catch({ type: "not_found" }, error => {
 				throw new Errors.InvalidCredentials("You're not logged in!");
 			});
 	};
diff --git a/lib/subject/predefined-subjects/root-subject.js b/lib/subject/predefined-subjects/root-subject.js
--- a/lib/subject/predefined-subjects/root-subject.js
+++ b/lib/subject/predefined-subjects/root-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 
 const Errors = locreq("lib/response/error.js");
diff --git a/lib/subject/predefined-subjects/sessions-subject.js b/lib/subject/predefined-subjects/sessions-subject.js
--- a/lib/subject/predefined-subjects/sessions-subject.js
+++ b/lib/subject/predefined-subjects/sessions-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const CurrentSessionSubject = require("../subject-types/current-session-subject.js");
diff --git a/lib/subject/predefined-subjects/specifications.js b/lib/subject/predefined-subjects/specifications.js
--- a/lib/subject/predefined-subjects/specifications.js
+++ b/lib/subject/predefined-subjects/specifications.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
@@ -9,7 +8,7 @@
 
 const SpecificationsSubject = function(app) {
 	const actions = {
-		show: function(params) {
+		show(params) {
 			const collections = app.ChipManager.get_chips_by_type("collection");
 			return Object.keys(collections).map(collection_name =>
 				collections[collection_name].get_specification(false)
diff --git a/lib/subject/predefined-subjects/uploaded-files.js b/lib/subject/predefined-subjects/uploaded-files.js
--- a/lib/subject/predefined-subjects/uploaded-files.js
+++ b/lib/subject/predefined-subjects/uploaded-files.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
diff --git a/lib/subject/predefined-subjects/users-subject.js b/lib/subject/predefined-subjects/users-subject.js
--- a/lib/subject/predefined-subjects/users-subject.js
+++ b/lib/subject/predefined-subjects/users-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
@@ -40,30 +39,26 @@
 	this.get_child_subject = function(key) {
 		if (me_synonyms.indexOf(key) !== -1) {
 			return new MeSubject(app);
-		} else {
-			const username = key;
-			return app
-				.run_action(
-					new SuperContext(),
-					["collections", "users"],
-					"show",
-					{ filter: { username: username } }
-				)
-				.then(function(result) {
-					if (result.length === 0) {
-						throw new Errors.BadSubjectPath(
-							`Unknown username: '${username}'`
-						);
-					} else {
-						const user = result[0];
-						return RootSubject.get_subject([
-							"collections",
-							"users",
-							user.id,
-						]);
-					}
-				});
 		}
+		const username = key;
+		return app
+			.run_action(new SuperContext(), ["collections", "users"], "show", {
+				filter: { username },
+			})
+			.then(result => {
+				if (result.length === 0) {
+					throw new Errors.BadSubjectPath(
+						`Unknown username: '${username}'`
+					);
+				} else {
+					const user = result[0];
+					return RootSubject.get_subject([
+						"collections",
+						"users",
+						user.id,
+					]);
+				}
+			});
 	};
 };
 
diff --git a/lib/subject/subject-types/_batch_action.js b/lib/subject/subject-types/_batch_action.js
--- a/lib/subject/subject-types/_batch_action.js
+++ b/lib/subject/subject-types/_batch_action.js
@@ -1,4 +1,3 @@
-"use strict";
 const Promise = require("bluebird");
 const locreq = require("locreq")(__dirname);
 const ArrayCartesian = locreq("lib/utils/array-cartesian.js");
@@ -35,7 +34,7 @@
 						"show",
 						{ filter }
 					)
-					.then(function({ items: resources }) {
+					.then(({ items: resources }) => {
 						for (const i in map_to) {
 							const field_in_collection = fields[i];
 							const field_name = map_to[i];
@@ -44,9 +43,8 @@
 								resources.map(resource => {
 									if (field_in_collection === "id") {
 										return resource.id;
-									} else {
-										return resource[field_in_collection];
 									}
+									return resource[field_in_collection];
 								})
 							);
 						}
@@ -54,10 +52,10 @@
 				to_await.push(promise);
 			}
 		}
-		return Promise.all(to_await).then(function() {
+		return Promise.all(to_await).then(() => {
 			return PromiseIterateGenerator(
 				new ArrayCartesian(possible_field_values),
-				function(values) {
+				values => {
 					const body = {};
 					for (const i in field_names) {
 						body[field_names[i]] = values[i];
diff --git a/lib/subject/subject-types/collection-field-subject.js b/lib/subject/subject-types/collection-field-subject.js
--- a/lib/subject/subject-types/collection-field-subject.js
+++ b/lib/subject/subject-types/collection-field-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const merge = require("merge");
@@ -32,14 +31,13 @@
 		return Promise.resolve(
 			this.field_type.actions[action_name](context, params)
 		);
-	} else {
-		throw new Errors.DeveloperError(`Unknown action: '${action_name}'`);
 	}
+	throw new Errors.DeveloperError(`Unknown action: '${action_name}'`);
 };
 
 CollectionFieldSubject.prototype.get_child_subject = function(key) {
 	const self = this;
-	return Promise.try(function() {
+	return Promise.try(() => {
 		return self.field_type.get_child_subject(key);
 	});
 };
diff --git a/lib/subject/subject-types/collection-subject.js b/lib/subject/subject-types/collection-subject.js
--- a/lib/subject/subject-types/collection-subject.js
+++ b/lib/subject/subject-types/collection-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const assert = require("assert");
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
@@ -63,7 +62,7 @@
 			  * map_to[]
 		*/
 		const self = this;
-		return batch_action(app, context, params, function(context, body) {
+		return batch_action(app, context, params, (context, body) => {
 			return app.run_action(
 				context,
 				["collections", self.collection.name],
@@ -75,7 +74,7 @@
 
 	this.delete_many = function(context, params) {
 		const self = this;
-		return batch_action(app, context, params, function(context, body) {
+		return batch_action(app, context, params, (context, body) => {
 			return app
 				.run_action(
 					context,
@@ -85,7 +84,7 @@
 						filter: body,
 					}
 				)
-				.each(function(resource) {
+				.each(resource => {
 					return app.run_action(
 						context,
 						["collections", self.collection.name, resource.id],
@@ -98,11 +97,10 @@
 	this.delete = function(context, params) {
 		if (params.__multiple) {
 			return this.delete_many(context, params);
-		} else {
-			throw new app.Sealious.Errors.NotFound(
-				"Cannot delete a collection. Try using the '__multiple: true' mode"
-			);
 		}
+		throw new app.Sealious.Errors.NotFound(
+			"Cannot delete a collection. Try using the '__multiple: true' mode"
+		);
 	};
 
 	this.get_child_subject = async function(key) {
@@ -111,15 +109,14 @@
 				...named_filters,
 				key.slice(1),
 			]);
-		} else {
-			const resource_id = key;
-			const single_resource_subject = new SingleResource(
-				app,
-				this.collection,
-				resource_id
-			);
-			return single_resource_subject;
 		}
+		const resource_id = key;
+		const single_resource_subject = new SingleResource(
+			app,
+			this.collection,
+			resource_id
+		);
+		return single_resource_subject;
 	};
 }
 
@@ -133,13 +130,13 @@
 ) {
 	return collection
 		.check_if_action_is_allowed(context, "create", body)
-		.then(function() {
+		.then(() => {
 			return collection.validate_field_values(context, true, body);
 		})
-		.then(function() {
+		.then(() => {
 			return collection.encode_field_values(context, body);
 		})
-		.then(function(encoded_body) {
+		.then(encoded_body => {
 			const newID = shortid();
 			const resource_data = {
 				_metadata: {
@@ -152,13 +149,13 @@
 			};
 			return datastore.insert(collection.name, resource_data, {});
 		})
-		.then(function(database_entry) {
+		.then(database_entry => {
 			return collection.get_resource_representation(
 				context,
 				database_entry
 			);
 		})
-		.then(function(representation) {
+		.then(representation => {
 			return new Sealious.Responses.ResourceCreated(representation);
 		});
 };
@@ -207,7 +204,7 @@
 		);
 
 		const must_be_int = ["items", "page"];
-		must_be_int.forEach(function(attribute_name) {
+		must_be_int.forEach(attribute_name => {
 			if (isNaN(parseInt(full_pagination_params[attribute_name]))) {
 				full_pagination_params[attribute_name] =
 					default_pagination_params[attribute_name];
@@ -316,9 +313,9 @@
 		case "create":
 			if (args.__multiple) {
 				return this.create_many(context, args);
-			} else {
-				return this.create_resource(context, args);
 			}
+			return this.create_resource(context, args);
+
 		case "show":
 			return this.list_resources(context, args);
 		case "delete":
diff --git a/lib/subject/subject-types/current-session-subject.js b/lib/subject/subject-types/current-session-subject.js
--- a/lib/subject/subject-types/current-session-subject.js
+++ b/lib/subject/subject-types/current-session-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 
diff --git a/lib/subject/subject-types/image-format.js b/lib/subject/subject-types/image-format.js
--- a/lib/subject/subject-types/image-format.js
+++ b/lib/subject/subject-types/image-format.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
@@ -10,19 +9,14 @@
 const QUALITY = 80;
 
 function format_hash(format_obj) {
-	return format_obj.size[0] + ":" + format_obj.size[1] + "(" + QUALITY + ")";
+	return `${format_obj.size[0]}:${format_obj.size[1]}(${QUALITY})`;
 }
 
 function format_filename(original_filename, format_name) {
-	return (
-		original_filename
-			.split(".")
-			.slice(0, -1)
-			.join(".") +
-		"-" +
-		format_name +
-		".jpg"
-	);
+	return `${original_filename
+		.split(".")
+		.slice(0, -1)
+		.join(".")}-${format_name}.jpg`;
 }
 
 const ImageFormat = function(app, file_id, format_name) {
@@ -30,14 +24,12 @@
 	this.file_id = file_id;
 
 	function get_hdd_path(file_id) {
-		return locreq.resolve(app.FileManager.upload_path + "/" + file_id);
+		return locreq.resolve(`${app.FileManager.upload_path}/${file_id}`);
 	}
 
 	function create_formatted_version(file_id, format_name) {
 		const format_obj = app.ConfigManager.get("image_formats")[format_name];
-		return app.Datastore.find("files", { id: file_id }).then(function(
-			matches
-		) {
+		return app.Datastore.find("files", { id: file_id }).then(matches => {
 			const original_file = matches[0];
 			const file_path = get_hdd_path(original_file.id);
 			const width = format_obj.size[0];
@@ -46,18 +38,19 @@
 				original_file.original_name,
 				format_name
 			);
-			const temp_file_path =
-				"/tmp/" + Math.floor(Math.random() * Math.pow(10, 7)) + ".jpg";
+			const temp_file_path = `/tmp/${Math.floor(
+				Math.random() * Math.pow(10, 7)
+			)}.jpg`;
 			const resize_request = gm(file_path)
 				.resize(width, height, "^")
 				.quality(QUALITY);
 			return Promise.promisify(resize_request.write, {
 				context: resize_request,
 			})(temp_file_path)
-				.then(function() {
+				.then(() => {
 					return Promise.promisify(fs.readFile)(temp_file_path);
 				})
-				.then(function(buffer) {
+				.then(buffer => {
 					return app.FileManager.save_file(
 						new app.Sealious.File(
 							new app.Sealious.SuperContext(),
@@ -66,7 +59,7 @@
 						)
 					);
 				})
-				.then(function(sealious_file) {
+				.then(sealious_file => {
 					return app
 						.run_action(
 							new app.Sealious.SuperContext(),
@@ -80,7 +73,7 @@
 						)
 						.then(() => sealious_file);
 				})
-				.then(function(file) {
+				.then(file => {
 					return Promise.promisify(fs.unlink)(temp_file_path).then(
 						() => file
 					);
@@ -107,7 +100,7 @@
 					$or: [{ "format.original": hash }, { "format.safe": hash }],
 				},
 			},
-		]).then(function(results) {
+		]).then(results => {
 			return (
 				results[0] &&
 				results[0] && {
@@ -135,7 +128,7 @@
 					];
 					if (format_obj === undefined) {
 						throw new Errors.BadSubjectPath(
-							"Unknown image format: " + format_name
+							`Unknown image format: ${format_name}`
 						);
 					}
 					return get_formatted_version(
@@ -144,15 +137,14 @@
 						format_name,
 						format_obj
 					)
-						.then(function(result) {
+						.then(result => {
 							if (result !== undefined) {
 								return result;
-							} else {
-								return create_formatted_version(
-									file_id,
-									format_name
-								);
 							}
+							return create_formatted_version(
+								file_id,
+								format_name
+							);
 						})
 						.then(file_description => {
 							let ret = new app.Sealious.File.from_db_entry(
diff --git a/lib/subject/subject-types/image-formats.js b/lib/subject/subject-types/image-formats.js
--- a/lib/subject/subject-types/image-formats.js
+++ b/lib/subject/subject-types/image-formats.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
diff --git a/lib/subject/subject-types/single-file-subject.js b/lib/subject/subject-types/single-file-subject.js
--- a/lib/subject/subject-types/single-file-subject.js
+++ b/lib/subject/subject-types/single-file-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
@@ -21,7 +20,7 @@
 				case "show":
 					return app.FileManager.find(context, {
 						id: this.file_id,
-					}).then(function(results) {
+					}).then(results => {
 						return results[0];
 					});
 				default:
diff --git a/lib/subject/subject-types/single-resource-subject.js b/lib/subject/subject-types/single-resource-subject.js
--- a/lib/subject/subject-types/single-resource-subject.js
+++ b/lib/subject/subject-types/single-resource-subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const Subject = locreq("lib/subject/subject.js");
@@ -65,7 +64,7 @@
 
 	return datastore
 		.find(collection.name, { sealious_id: resource_id }, {})
-		.then(function(db_entries) {
+		.then(db_entries => {
 			if (db_entries[0] === undefined) {
 				throw new Errors.NotFound(
 					`${collection.name}: id ${resource_id} not found`
@@ -78,14 +77,14 @@
 				);
 			}
 		})
-		.then(function(resource_representation) {
+		.then(resource_representation => {
 			return collection
 				.check_if_action_is_allowed(
 					context,
 					"show",
 					resource_representation
 				)
-				.then(function() {
+				.then(() => {
 					return resource_representation;
 				});
 		});
@@ -108,7 +107,7 @@
 
 	return SingleResource.prototype
 		.__get_resource(datastore, collection, resource_id, context, {})
-		.then(function(resource_data) {
+		.then(resource_data => {
 			resource_representation = resource_data;
 			return collection.check_if_action_is_allowed(
 				context,
@@ -116,7 +115,7 @@
 				resource_representation
 			);
 		})
-		.then(function() {
+		.then(() => {
 			return collection.validate_field_values(
 				context,
 				delete_empty_values,
@@ -124,14 +123,14 @@
 				resource_representation
 			);
 		})
-		.then(function() {
+		.then(() => {
 			return collection.encode_field_values(
 				context,
 				values_to_patch,
 				resource_representation
 			);
 		})
-		.then(function(encoded_values) {
+		.then(encoded_values => {
 			const query = { _metadata: resource_representation._metadata };
 			query._metadata.last_modified_context = context;
 			for (const field_name in encoded_values) {
@@ -143,7 +142,7 @@
 				{ $set: query }
 			);
 		})
-		.then(function(patch_result) {
+		.then(patch_result => {
 			if (patch_result.result.n !== 1) {
 				throw new Error("Wrong amount of resources (!=1) modified");
 			}
@@ -168,14 +167,14 @@
 
 	return SingleResource.prototype
 		.__get_resource(datastore, collection, resource_id, context, {})
-		.then(function(resource_representation) {
+		.then(resource_representation => {
 			return collection.check_if_action_is_allowed(
 				context,
 				"delete",
 				resource_representation
 			);
 		})
-		.then(function() {
+		.then(() => {
 			return datastore.remove(
 				collection.name,
 				{
@@ -184,7 +183,7 @@
 				{}
 			);
 		})
-		.then(function(data) {
+		.then(data => {
 			return Promise.resolve();
 		});
 };
diff --git a/lib/subject/subject-types/single-specification-subject.js b/lib/subject/subject-types/single-specification-subject.js
--- a/lib/subject/subject-types/single-specification-subject.js
+++ b/lib/subject/subject-types/single-specification-subject.js
@@ -1,11 +1,10 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Subject = locreq("lib/subject/subject.js");
 const Errors = locreq("lib/response/error.js");
 
 const SingleSpecificationsSubject = function(app, collection_name) {
 	const actions = {
-		show: function(params) {
+		show(params) {
 			const collection = app.ChipManager.get_chip(
 				"collection",
 				collection_name
diff --git a/lib/subject/subject.js b/lib/subject/subject.js
--- a/lib/subject/subject.js
+++ b/lib/subject/subject.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Promise = require("bluebird");
 const SubjectPath = locreq("lib/data-structures/subject-path.js");
@@ -10,12 +9,11 @@
 	// the subject referenced by  subject_path
 	subject_path = new SubjectPath(subject_path);
 	return Promise.resolve(this.get_child_subject(subject_path.head())).then(
-		function(child_subject) {
+		child_subject => {
 			if (subject_path.elements.length === 1) {
 				return child_subject;
-			} else {
-				return child_subject.get_subject(subject_path.tail());
 			}
+			return child_subject.get_subject(subject_path.tail());
 		}
 	);
 };
diff --git a/lib/super-context.js b/lib/super-context.js
--- a/lib/super-context.js
+++ b/lib/super-context.js
@@ -1,4 +1,3 @@
-"use strict";
 const locreq = require("locreq")(__dirname);
 const Context = locreq("lib/context.js");
 
diff --git a/lib/utils/array-cartesian.js b/lib/utils/array-cartesian.js
--- a/lib/utils/array-cartesian.js
+++ b/lib/utils/array-cartesian.js
@@ -1,4 +1,3 @@
-"use strict";
 const IntegerCartesian = require("./integer-cartesian.js");
 
 const ArrayCartesian = function(sources) {
@@ -6,7 +5,7 @@
 	let current_int_state = null;
 
 	return {
-		next: function() {
+		next() {
 			const int_next_element = IntegerCartesian.next(
 				int_sources,
 				current_int_state
diff --git a/lib/utils/flatten-object-to-dot-notation.js b/lib/utils/flatten-object-to-dot-notation.js
--- a/lib/utils/flatten-object-to-dot-notation.js
+++ b/lib/utils/flatten-object-to-dot-notation.js
@@ -1,5 +1,5 @@
 module.exports = function(context, obj) {
-	const prefix = typeof context === "string" ? context + "." : "";
+	const prefix = typeof context === "string" ? `${context}.` : "";
 	return flattenObjectToDotNotation(prefix, obj);
 };
 
@@ -9,7 +9,7 @@
 		if (obj[prop] && typeof obj[prop] === "object") {
 			Object.assign(
 				flattened,
-				flattenObjectToDotNotation(new_prop + ".", obj[prop])
+				flattenObjectToDotNotation(`${new_prop}.`, obj[prop])
 			);
 		} else {
 			flattened[new_prop] = obj[prop];
diff --git a/lib/utils/get-datetime.js b/lib/utils/get-datetime.js
--- a/lib/utils/get-datetime.js
+++ b/lib/utils/get-datetime.js
@@ -1,4 +1,3 @@
-"use strict";
 const prettyMs = require("pretty-ms");
 
 const dateFormatters = {
@@ -31,13 +30,12 @@
 	return formats
 		.reduce((date_string, format) => {
 			if (dateFormats.includes(format)) {
-				return date_string + " " + dateFormatters[format](date);
+				return `${date_string} ${dateFormatters[format](date)}`;
 			} else if (timeFormats.includes(format)) {
 				const parsed_time = date.toISOString().split("T")[1];
-				return date_string + " " + timeFormatters[format](parsed_time);
-			} else {
-				throw new Error("Unknown format: " + format);
+				return `${date_string} ${timeFormatters[format](parsed_time)}`;
 			}
+			throw new Error(`Unknown format: ${format}`);
 		}, "")
 		.trimLeft();
 }
diff --git a/lib/utils/get-main-app-dir.js b/lib/utils/get-main-app-dir.js
--- a/lib/utils/get-main-app-dir.js
+++ b/lib/utils/get-main-app-dir.js
@@ -1,4 +1,3 @@
-"use strict";
 const path = require("path");
 
 function get_main_app_dir() {
diff --git a/lib/utils/integer-cartesian.js b/lib/utils/integer-cartesian.js
--- a/lib/utils/integer-cartesian.js
+++ b/lib/utils/integer-cartesian.js
@@ -1,9 +1,8 @@
-"use strict";
 const clone = require("clone");
 
 const IntegerCartesian = {
 	// integer-only
-	next: function(sources, element) {
+	next(sources, element) {
 		for (const i in sources) {
 			if (sources[i] <= 0) {
 				return null;
@@ -12,29 +11,28 @@
 		const new_element = clone(element);
 		if (element === null) {
 			return sources.map(() => 0);
-		} else {
-			let i = element.length - 1;
-			while (i >= 0) {
-				if (element[i] >= sources[i]) {
-					throw new Error(
-						`Invalid element. Max value on index '${i.toString()}' is '${(
-							sources[i] - 1
-						).toString()}'`
-					);
-				}
-				if (element[i] === sources[i] - 1) {
-					new_element[i] = 0;
-				} else {
-					break;
-				}
-				i--;
+		}
+		let i = element.length - 1;
+		while (i >= 0) {
+			if (element[i] >= sources[i]) {
+				throw new Error(
+					`Invalid element. Max value on index '${i.toString()}' is '${(
+						sources[i] - 1
+					).toString()}'`
+				);
 			}
-			if (i === -1) {
-				return null;
+			if (element[i] === sources[i] - 1) {
+				new_element[i] = 0;
+			} else {
+				break;
 			}
-			new_element[i] = new_element[i] + 1;
-			return new_element;
+			i--;
+		}
+		if (i === -1) {
+			return null;
 		}
+		new_element[i] = new_element[i] + 1;
+		return new_element;
 	},
 };
 
diff --git a/lib/utils/promise-iterate-generator.js b/lib/utils/promise-iterate-generator.js
--- a/lib/utils/promise-iterate-generator.js
+++ b/lib/utils/promise-iterate-generator.js
@@ -2,11 +2,10 @@
 	const current = generator.next();
 	if (current === null) {
 		return Promise.resolve();
-	} else {
-		return fn(current).then(function() {
-			return PromiseIterateGenerator(generator, fn);
-		});
 	}
+	return fn(current).then(() => {
+		return PromiseIterateGenerator(generator, fn);
+	});
 };
 
 module.exports = PromiseIterateGenerator;
diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -7,7 +7,9 @@
 	"scripts": {
 		"test": "mocha --timeout=10000 setup-test.js \"./lib/**/*.test.js\"",
 		"build": "rm -rf cosealious/* && babel cosealious-src --out-dir cosealious",
-		"prepare": "npm run build"
+		"prepare": "npm run build",
+		"lint": "eslint lib/ --ext .js,.jsx --ignore-pattern node_modules/",
+		"lint:fix": "eslint lib/ --ext .js,.jsx --ignore-pattern node_modules/ --fix"
 	},
 	"repository": {
 		"type": "git",
@@ -56,12 +58,15 @@
 		"react": "^16.3.2"
 	},
 	"devDependencies": {
-		"mocha": "*",
-		"sinon": "^5.0.7",
-		"eslint": "^3.1.1",
+		"babel-cli": "^6.26.0",
 		"babel-plugin-transform-object-rest-spread": "^6.26.0",
 		"babel-preset-env": "^1.7.0",
 		"babel-preset-react": "^6.24.1",
-		"babel-cli": "^6.26.0"
+		"eslint": "^3.1.1",
+		"eslint-config-prettier": "^3.1.0",
+		"eslint-plugin-react": "^7.11.1",
+		"mocha": "*",
+		"prettier": "^1.14.3",
+		"sinon": "^5.0.7"
 	}
 }