diff --git a/src/004-base/domPassage.js b/src/004-base/domPassage.js
index 31887f0129b10160e43bd262a3ce7f3edbb46769..e051f45dd2766e3eea75262f6bf112a4f8117782 100644
--- a/src/004-base/domPassage.js
+++ b/src/004-base/domPassage.js
@@ -21,6 +21,25 @@ App.DomPassage = class extends Passage {
 	 * @returns {Node}
 	 */
 	render() {
-		return this.callback();
+		// In case the callback fails give out a nice error message instead of breaking completely.
+		try {
+			return this.callback();
+		} catch (ex) {
+			const fragment = document.createDocumentFragment();
+
+			App.UI.DOM.appendNewElement("p", fragment, `${ex.name}: ${ex.message}`, ["bold", "error"]);
+
+			const p = document.createElement("p");
+			const lines = ex.stack.split("\n");
+			for (const ll of lines) {
+				const div = document.createElement("div");
+				// remove file path from error message
+				div.append(ll.replace(/file:.*\//, "<path>/"));
+				p.append(div);
+			}
+			fragment.append(p);
+
+			return fragment;
+		}
 	}
 };