diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-command.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-command.ts
index 7e7f9db..bef2cfc 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-command.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-command.ts
@@ -197,7 +197,8 @@
    * @param decoupled
    * @param target
    */
-  public static submitAction = function (source: HTMLElement, actionId: string, decoupled: boolean = true, target?: string) {
+  public static submitAction = function (
+      source: HTMLElement, actionId: string, decoupled: boolean = true, target?: string) {
 
     Transport.request(function () {
       if (!CommandHelper.isSubmit) {
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-overlay.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-overlay.ts
index abe76ce..2be49b0 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-overlay.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-overlay.ts
@@ -91,7 +91,8 @@
       top = (rect.top + document.body.scrollTop) + "px";
       this.overlay.style.width = this.element.offsetWidth + "px";
       this.overlay.style.height = this.element.offsetHeight + "px";
-// tbd: is this still needed?       this.overlay.style.position= "absolute" // XXX is set via class, but seams to be overridden in IE11?
+// tbd: is this still needed?       this.overlay.style.position= "absolute"
+// XXX is set via class, but seams to be overridden in IE11?
     }
 
     document.getElementsByTagName("body")[0].append(this.overlay);
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-select-many-shuttle.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-select-many-shuttle.ts
index efa9b35..061c76d 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-select-many-shuttle.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-select-many-shuttle.ts
@@ -21,7 +21,8 @@
 class SelectManyShuttle {
 
   static init = function (element: HTMLElement) {
-    for (const shuttle of DomUtils.selfOrQuerySelectorAll(element, ".tobago-selectManyShuttle:not(.tobago-selectManyShuttle-disabled)")) {
+    for (const shuttle of DomUtils.selfOrQuerySelectorAll(
+        element, ".tobago-selectManyShuttle:not(.tobago-selectManyShuttle-disabled)")) {
 
       shuttle.querySelector(".tobago-selectManyShuttle-unselected").addEventListener(
           "dblclick", (event: Event) => {
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-sheet.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-sheet.ts
index 99a524a..451b092 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-sheet.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-sheet.ts
@@ -190,7 +190,8 @@
       }
     }
 
-    for (const checkbox of <NodeListOf<HTMLInputElement>>element.querySelectorAll(".tobago-sheet-cell > input.tobago-sheet-columnSelector")) {
+    for (const checkbox of <NodeListOf<HTMLInputElement>>element.querySelectorAll(
+        ".tobago-sheet-cell > input.tobago-sheet-columnSelector")) {
       checkbox.addEventListener("click", (event) => {
         event.preventDefault();
       });
@@ -198,7 +199,8 @@
 
     // ---------------------------------------------------------------------------------------- //
 
-    for (const checkbox of <NodeListOf<HTMLInputElement>>element.querySelectorAll(".tobago-sheet-header .tobago-sheet-columnSelector")) {
+    for (const checkbox of <NodeListOf<HTMLInputElement>>element.querySelectorAll(
+        ".tobago-sheet-header .tobago-sheet-columnSelector")) {
       checkbox.addEventListener("click", this.clickOnCheckbox.bind(this));
     }
 
@@ -459,7 +461,8 @@
     const input = event.currentTarget as HTMLInputElement;
     const output = input.parentElement.querySelector(".tobago-sheet-pagingOutput") as HTMLElement;
     if (output.innerHTML !== input.value) {
-      console.debug("Reloading sheet '" + this.id + "' old value='" + output.innerHTML + "' new value='" + input.value + "'");
+      console.debug(
+          "Reloading sheet '" + this.id + "' old value='" + output.innerHTML + "' new value='" + input.value + "'");
       output.innerHTML = input.value;
       jsf.ajax.request(
           input.id,
@@ -603,7 +606,8 @@
   }
 
   selectRange(
-      rows: NodeListOf<HTMLTableRowElement>, first: number, last: number, selectDeselected: boolean, deselectSelected: boolean) {
+      rows: NodeListOf<HTMLTableRowElement>, first: number, last: number, selectDeselected: boolean,
+      deselectSelected: boolean) {
     const selected = this.getHiddenSelected();
     const value = new Set<number>(JSON.parse(selected.value));
     for (let i = first; i <= last; i++) {
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-split-layout.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-split-layout.ts
index 1a660ed..c3bc661 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-split-layout.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-split-layout.ts
@@ -61,7 +61,8 @@
     event.preventDefault();
     const splitter = event.target as HTMLElement;
     const previous = DomUtils.previousElementSibling(splitter);
-    this.offset = this.orientation === "horizontal" ? event.pageX - previous.offsetWidth : event.pageY - previous.offsetHeight;
+    this.offset = this.orientation === "horizontal"
+        ? event.pageX - previous.offsetWidth : event.pageY - previous.offsetHeight;
     const mousedown = SplitLayoutMousedown.save(event, splitter);
     document.addEventListener("mousemove", this.move.bind(this));
     document.addEventListener("mouseup", this.stop.bind(this));
@@ -73,7 +74,8 @@
     }
     previousArea.style.flexGrow = "inherit";
     previousArea.style.flexBasis = "auto";
-    console.debug("initial width/height = '%s'", (this.orientation === "horizontal" ? previousArea.style.width : previousArea.style.height));
+    console.debug("initial width/height = '%s'",
+        (this.orientation === "horizontal" ? previousArea.style.width : previousArea.style.height));
   }
 
   move(event: MouseEvent): void {
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-tab.ts b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-tab.ts
index 8a164b2..e99b522 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-tab.ts
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/ts/tobago-tab.ts
@@ -36,7 +36,8 @@
   }
 
   getSelectedTab(): Tab {
-    return this.querySelector(":scope > .card-header > .card-header-tabs > tobago-tab[index='" + this.selected + "']") as Tab;
+    return this.querySelector(
+        ":scope > .card-header > .card-header-tabs > tobago-tab[index='" + this.selected + "']") as Tab;
   }
 
   get selected(): number {
diff --git a/tobago-theme/tobago-theme-standard/src/main/npm/tslint.json b/tobago-theme/tobago-theme-standard/src/main/npm/tslint.json
index f7d93ff..49e3aa9 100644
--- a/tobago-theme/tobago-theme-standard/src/main/npm/tslint.json
+++ b/tobago-theme/tobago-theme-standard/src/main/npm/tslint.json
@@ -5,6 +5,9 @@
       true,
       "static-before-instance",
       "variables-before-functions"
-    ]
+    ],
+    "max-line-length": {
+      "options": [120]
+    }
   }
 }
