diff --git a/overlord/browserslist b/overlord/.browserslistrc
similarity index 100%
rename from overlord/browserslist
rename to overlord/.browserslistrc
diff --git a/overlord/e2e/tsconfig.e2e.json b/overlord/e2e/tsconfig.e2e.json
index a6dd6220..415179b4 100644
--- a/overlord/e2e/tsconfig.e2e.json
+++ b/overlord/e2e/tsconfig.e2e.json
@@ -1,5 +1,5 @@
 {
-  "extends": "../tsconfig.json",
+  "extends": "../tsconfig.base.json",
   "compilerOptions": {
     "outDir": "../out-tsc/app",
     "module": "commonjs",
diff --git a/overlord/package.json b/overlord/package.json
index dc39b1e8..81f698b8 100644
--- a/overlord/package.json
+++ b/overlord/package.json
@@ -1,6 +1,6 @@
 {
   "name": "overlord",
-  "version": "7.0.4",
+  "version": "7.1.0",
   "scripts": {
     "ng": "ng",
     "start": "ng serve",
@@ -12,49 +12,50 @@
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "^9.1.9",
-    "@angular/cdk": "^9.2.4",
-    "@angular/common": "^9.1.9",
-    "@angular/compiler": "^9.1.9",
-    "@angular/core": "^9.1.9",
-    "@angular/flex-layout": "^9.0.0-beta.31",
-    "@angular/forms": "^9.1.9",
-    "@angular/material": "^9.2.4",
-    "@angular/material-moment-adapter": "^9.2.4",
-    "@angular/platform-browser": "^9.1.9",
-    "@angular/platform-browser-dynamic": "^9.1.9",
-    "@angular/router": "^9.1.9",
-    "@ngx-loading-bar/http-client": "^3.0.0",
-    "@ngx-loading-bar/router": "^3.0.0",
+    "@angular/animations": "^10.0.4",
+    "@angular/cdk": "^10.0.2",
+    "@angular/common": "^10.0.4",
+    "@angular/compiler": "^10.0.4",
+    "@angular/core": "^10.0.4",
+    "@angular/flex-layout": "^10.0.0-beta.32",
+    "@angular/forms": "^10.0.4",
+    "@angular/material": "^10.0.2",
+    "@angular/material-moment-adapter": "^10.0.2",
+    "@angular/platform-browser": "^10.0.4",
+    "@angular/platform-browser-dynamic": "^10.0.4",
+    "@angular/router": "^10.0.4",
+    "@ngx-loading-bar/core": "^5.1.0",
+    "@ngx-loading-bar/http-client": "^5.1.0",
+    "@ngx-loading-bar/router": "^5.1.0",
     "angular2-hotkeys": "^2.2.0",
-    "core-js": "^2.5.7",
-    "mathjs": "^5.0.4",
-    "moment": "^2.22.2",
-    "rxjs": "^6.2.2",
+    "core-js": "^3.6.5",
+    "mathjs": "^7.1.0",
+    "moment": "^2.27.0",
+    "rxjs": "^6.6.0",
     "rxjs-tslint": "^0.1.5",
-    "tslib": "^1.10.0",
+    "tslib": "^2.0.0",
     "zone.js": "~0.10.2"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "~0.901.7",
-    "@angular/cli": "^9.1.7",
-    "@angular/compiler-cli": "^9.1.9",
-    "@angular/language-service": "^9.1.9",
-    "@types/jasmine": "^3.3.0",
+    "@angular-devkit/build-angular": "~0.1000.3",
+    "@angular/cli": "^10.0.3",
+    "@angular/compiler-cli": "^10.0.4",
+    "@angular/language-service": "^10.0.4",
+    "@types/jasmine": "^3.5.11",
     "@types/jasminewd2": "^2.0.3",
-    "@types/node": "^12.11.1",
-    "codelyzer": "^5.1.2",
-    "jasmine-core": "^3.1.0",
-    "jasmine-spec-reporter": "^4.2.1",
-    "karma": "^3.1.1",
-    "karma-chrome-launcher": "^2.2.0",
-    "karma-coverage-istanbul-reporter": "^2.0.1",
-    "karma-jasmine": "^2.0.1",
-    "karma-jasmine-html-reporter": "^1.2.0",
-    "protractor": "^5.4.0",
-    "standard-version": "^4.4.0",
-    "ts-node": "^7.0.0",
-    "tslint": "^5.11.0",
-    "typescript": "3.8.3"
+    "@types/node": "^14.0.23",
+    "codelyzer": "^6.0.0",
+    "jasmine-core": "~3.5.0",
+    "jasmine-spec-reporter": "~5.0.0",
+    "karma": "^5.1.0",
+    "karma-chrome-launcher": "~3.1.0",
+    "karma-coverage-istanbul-reporter": "~3.0.2",
+    "karma-jasmine": "~3.3.0",
+    "karma-jasmine-html-reporter": "^1.5.0",
+    "protractor": "~7.0.0",
+    "standard-version": "^8.0.2",
+    "ts-node": "^8.10.2",
+    "tslint": "~6.1.0",
+    "typescript": "3.9.6"
   }
 }
diff --git a/overlord/src/app/journal/journal.component.ts b/overlord/src/app/journal/journal.component.ts
index a0810a9e..8b66b979 100644
--- a/overlord/src/app/journal/journal.component.ts
+++ b/overlord/src/app/journal/journal.component.ts
@@ -1,23 +1,23 @@
-import {AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild} from '@angular/core';
-import {FormBuilder, FormGroup} from '@angular/forms';
+import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core';
+import { FormBuilder, FormGroup } from '@angular/forms';
 import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
 import { MatDialog } from '@angular/material/dialog';
-import {ActivatedRoute, Router} from '@angular/router';
-import {BehaviorSubject, fromEvent, Observable, of as observableOf, zip} from 'rxjs';
-import {JournalDataSource} from './journal-datasource';
-import {Account} from '../core/account';
-import {VoucherService} from '../core/voucher.service';
-import {AccountService} from '../core/account.service';
-import {DbFile, Journal, Voucher} from '../core/voucher';
+import { ActivatedRoute, Router } from '@angular/router';
+import { BehaviorSubject, fromEvent, Observable, of as observableOf, zip } from 'rxjs';
+import { JournalDataSource } from './journal-datasource';
+import { Account } from '../core/account';
+import { VoucherService } from '../core/voucher.service';
+import { AccountService } from '../core/account.service';
+import { DbFile, Journal, Voucher } from '../core/voucher';
 import * as moment from 'moment';
-import * as math from 'mathjs';
-import {AuthService} from '../auth/auth.service';
-import {ConfirmDialogComponent} from '../shared/confirm-dialog/confirm-dialog.component';
-import {ToasterService} from '../core/toaster.service';
-import {debounceTime, distinctUntilChanged, map, startWith, switchMap} from 'rxjs/operators';
-import {JournalDialogComponent} from './journal-dialog.component';
-import {ImageDialogComponent} from '../shared/image-dialog/image-dialog.component';
-import {Hotkey, HotkeysService} from 'angular2-hotkeys';
+import { evaluate } from 'mathjs';
+import { AuthService } from '../auth/auth.service';
+import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component';
+import { ToasterService } from '../core/toaster.service';
+import { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
+import { JournalDialogComponent } from './journal-dialog.component';
+import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.component';
+import { Hotkey, HotkeysService } from 'angular2-hotkeys';
 
 @Component({
   selector: 'app-journal',
@@ -136,7 +136,7 @@ export class JournalComponent implements OnInit, AfterViewInit, OnDestroy {
   rowAmount(amount: string = '', debit: number): any {
     try {
       amount = amount.replace(new RegExp('(₹[\s]*)|(,)|(\s)', 'g'), '');
-      const val = math.eval(amount);
+      const val = evaluate(amount);
       if (val < 0) {
         debit *= -1;
       }
diff --git a/overlord/src/app/payment/payment.component.ts b/overlord/src/app/payment/payment.component.ts
index 06e10af7..11c5e72f 100644
--- a/overlord/src/app/payment/payment.component.ts
+++ b/overlord/src/app/payment/payment.component.ts
@@ -1,23 +1,23 @@
-import {AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild} from '@angular/core';
-import {FormBuilder, FormGroup} from '@angular/forms';
+import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core';
+import { FormBuilder, FormGroup } from '@angular/forms';
 import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
 import { MatDialog } from '@angular/material/dialog';
-import {ActivatedRoute, Router} from '@angular/router';
-import {BehaviorSubject, fromEvent, Observable, of, of as observableOf, zip} from 'rxjs';
-import {PaymentDataSource} from './payment-datasource';
-import {Account} from '../core/account';
-import {VoucherService} from '../core/voucher.service';
-import {AccountService} from '../core/account.service';
-import {DbFile, Journal, Voucher} from '../core/voucher';
+import { ActivatedRoute, Router } from '@angular/router';
+import { BehaviorSubject, fromEvent, Observable, of, of as observableOf, zip } from 'rxjs';
+import { PaymentDataSource } from './payment-datasource';
+import { Account } from '../core/account';
+import { VoucherService } from '../core/voucher.service';
+import { AccountService } from '../core/account.service';
+import { DbFile, Journal, Voucher } from '../core/voucher';
 import * as moment from 'moment';
-import * as math from 'mathjs';
-import {AuthService} from '../auth/auth.service';
-import {ConfirmDialogComponent} from '../shared/confirm-dialog/confirm-dialog.component';
-import {ToasterService} from '../core/toaster.service';
-import {debounceTime, distinctUntilChanged, map, startWith, switchMap} from 'rxjs/operators';
-import {PaymentDialogComponent} from './payment-dialog.component';
-import {ImageDialogComponent} from '../shared/image-dialog/image-dialog.component';
-import {Hotkey, HotkeysService} from 'angular2-hotkeys';
+import { evaluate } from 'mathjs';
+import { AuthService } from '../auth/auth.service';
+import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component';
+import { ToasterService } from '../core/toaster.service';
+import { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
+import { PaymentDialogComponent } from './payment-dialog.component';
+import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.component';
+import { Hotkey, HotkeysService } from 'angular2-hotkeys';
 
 @Component({
   selector: 'app-payment',
@@ -142,7 +142,7 @@ export class PaymentComponent implements OnInit, AfterViewInit, OnDestroy {
   rowAmount(amount: string = ''): number {
     try {
       amount = amount.replace(new RegExp('(₹[\s]*)|(,)|(\s)', 'g'), '');
-      return math.eval(amount);
+      return evaluate(amount);
     } catch {
       return 0;
     }
diff --git a/overlord/src/app/receipt/receipt.component.ts b/overlord/src/app/receipt/receipt.component.ts
index 17a44fe7..ea28319e 100644
--- a/overlord/src/app/receipt/receipt.component.ts
+++ b/overlord/src/app/receipt/receipt.component.ts
@@ -1,23 +1,23 @@
-import {AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild} from '@angular/core';
-import {FormBuilder, FormGroup} from '@angular/forms';
+import { AfterViewInit, Component, ElementRef, OnInit, OnDestroy, ViewChild } from '@angular/core';
+import { FormBuilder, FormGroup } from '@angular/forms';
 import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
 import { MatDialog } from '@angular/material/dialog';
-import {ActivatedRoute, Router} from '@angular/router';
-import {BehaviorSubject, fromEvent, Observable, of, of as observableOf, zip} from 'rxjs';
-import {ReceiptDataSource} from './receipt-datasource';
-import {Account} from '../core/account';
-import {VoucherService} from '../core/voucher.service';
-import {AccountService} from '../core/account.service';
-import {DbFile, Journal, Voucher} from '../core/voucher';
+import { ActivatedRoute, Router } from '@angular/router';
+import { BehaviorSubject, fromEvent, Observable, of, of as observableOf, zip } from 'rxjs';
+import { ReceiptDataSource } from './receipt-datasource';
+import { Account } from '../core/account';
+import { VoucherService } from '../core/voucher.service';
+import { AccountService } from '../core/account.service';
+import { DbFile, Journal, Voucher } from '../core/voucher';
 import * as moment from 'moment';
-import * as math from 'mathjs';
-import {AuthService} from '../auth/auth.service';
-import {ConfirmDialogComponent} from '../shared/confirm-dialog/confirm-dialog.component';
-import {ToasterService} from '../core/toaster.service';
-import {debounceTime, distinctUntilChanged, map, startWith, switchMap} from 'rxjs/operators';
-import {ReceiptDialogComponent} from './receipt-dialog.component';
-import {ImageDialogComponent} from '../shared/image-dialog/image-dialog.component';
-import {Hotkey, HotkeysService} from 'angular2-hotkeys';
+import { evaluate } from 'mathjs';
+import { AuthService } from '../auth/auth.service';
+import { ConfirmDialogComponent } from '../shared/confirm-dialog/confirm-dialog.component';
+import { ToasterService } from '../core/toaster.service';
+import { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';
+import { ReceiptDialogComponent } from './receipt-dialog.component';
+import { ImageDialogComponent } from '../shared/image-dialog/image-dialog.component';
+import { Hotkey, HotkeysService } from 'angular2-hotkeys';
 
 @Component({
   selector: 'app-receipt',
@@ -143,7 +143,7 @@ export class ReceiptComponent implements OnInit, AfterViewInit, OnDestroy {
   rowAmount(amount: string = ''): number {
     try {
       amount = amount.replace(new RegExp('(₹[\s]*)|(,)|(\s)', 'g'), '');
-      return math.eval(amount);
+      return evaluate(amount);
     } catch {
       return 0;
     }
diff --git a/overlord/src/tsconfig.app.json b/overlord/src/tsconfig.app.json
index c18f0dcd..4dc5f525 100644
--- a/overlord/src/tsconfig.app.json
+++ b/overlord/src/tsconfig.app.json
@@ -1,5 +1,5 @@
 {
-  "extends": "../tsconfig.json",
+  "extends": "../tsconfig.base.json",
   "compilerOptions": {
     "outDir": "../../brewman/static",
     "types": []
diff --git a/overlord/src/tsconfig.spec.json b/overlord/src/tsconfig.spec.json
index de773363..0c06d472 100644
--- a/overlord/src/tsconfig.spec.json
+++ b/overlord/src/tsconfig.spec.json
@@ -1,5 +1,5 @@
 {
-  "extends": "../tsconfig.json",
+  "extends": "../tsconfig.base.json",
   "compilerOptions": {
     "outDir": "../out-tsc/spec",
     "types": [
diff --git a/overlord/tsconfig.base.json b/overlord/tsconfig.base.json
new file mode 100644
index 00000000..c8cb8120
--- /dev/null
+++ b/overlord/tsconfig.base.json
@@ -0,0 +1,21 @@
+{
+  "compileOnSave": false,
+  "compilerOptions": {
+    "baseUrl": "./",
+    "outDir": "../brewman/static",
+    "sourceMap": true,
+    "declaration": false,
+    "module": "es2020",
+    "moduleResolution": "node",
+    "emitDecoratorMetadata": true,
+    "experimentalDecorators": true,
+    "target": "es2015",
+    "typeRoots": [
+      "node_modules/@types"
+    ],
+    "lib": [
+      "es2018",
+      "dom"
+    ]
+  }
+}
diff --git a/overlord/tsconfig.json b/overlord/tsconfig.json
index 7994bd46..e8d90a7a 100644
--- a/overlord/tsconfig.json
+++ b/overlord/tsconfig.json
@@ -1,21 +1,20 @@
+/*
+  This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience.
+  It is not intended to be used to perform a compilation.
+
+  To learn more about this file see: https://angular.io/config/solution-tsconfig.
+*/
 {
-  "compileOnSave": false,
-  "compilerOptions": {
-    "baseUrl": "./",
-    "outDir": "../brewman/static",
-    "sourceMap": true,
-    "declaration": false,
-    "module": "esnext",
-    "moduleResolution": "node",
-    "emitDecoratorMetadata": true,
-    "experimentalDecorators": true,
-    "target": "es2015",
-    "typeRoots": [
-      "node_modules/@types"
-    ],
-    "lib": [
-      "es2018",
-      "dom"
-    ]
-  }
-}
+  "files": [],
+  "references": [
+    {
+      "path": "./src/tsconfig.app.json"
+    },
+    {
+      "path": "./src/tsconfig.spec.json"
+    },
+    {
+      "path": "./e2e/tsconfig.e2e.json"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/overlord/tslint.json b/overlord/tslint.json
index ea316552..7a6af7a5 100644
--- a/overlord/tslint.json
+++ b/overlord/tslint.json
@@ -73,7 +73,6 @@
     "no-trailing-whitespace": true,
     "no-unnecessary-initializer": true,
     "no-unused-expression": true,
-    "no-use-before-declare": true,
     "no-var-keyword": true,
     "object-literal-sort-keys": false,
     "one-line": [
diff --git a/setup.py b/setup.py
index 3289baba..73232050 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,7 @@ with open(os.path.join(here, 'requirements.txt'), "r") as r:
     requires = r.read().splitlines()
 
 setup(name='brewman',
-      version='7.0.4',
+      version='7.1.0',
       description='brewman',
       long_description=README + '\n\n' + CHANGES,
       classifiers=[