diff --git a/web/root/api/events.ssjs b/web/root/api/events.ssjs
index 075802061238652f48ab84ce50807e2286ce8922..bc73e9029da5993e1a3513aae3a7e3f1e54f5b57 100644
--- a/web/root/api/events.ssjs
+++ b/web/root/api/events.ssjs
@@ -1,8 +1,8 @@
 load('sbbsdefs.js');
 load('modopts.js');
-var settings = get_mod_options('web');
+const settings = get_mod_options('web');
 load(settings.web_directory + '/lib/init.js');
-load(settings.web_lib + 'auth.js');
+const auth_lib = load({}, settings.web_lib + 'auth.js');
 
 http_reply.header['Cache-Control'] = 'no-cache';
 http_reply.header['Content-type'] = 'text/event-stream';
@@ -35,7 +35,7 @@ if (file_isdir(settings.web_lib + 'events')) {
             try {
                 if (file_exists(script)) callbacks[e] = load({}, script);
             } catch (err) {
-                log(LOG_ERR, 'Failed to load event module ' + e + ': ' + err);
+               log(LOG_ERR, 'Failed to load event module ' + e + ': ' + err);
             }
         });
     }
diff --git a/web/root/js/common.js b/web/root/js/common.js
index 53151221af4ff24e865c5c32a66f86059698452e..f7812e70a6bbd352912cd04f1a53c676948ee00d 100644
--- a/web/root/js/common.js
+++ b/web/root/js/common.js
@@ -59,6 +59,17 @@ function sendTelegram(alias) {
 	$('#popUpModal').modal('show');
 }
 
+function registerEventListener(scope, callback, params) {
+	params = Object.keys(params || {}).reduce(function (a, c) {
+		a += '&' + c + '=' + params[c];
+		return a;
+	}, '');
+	_sbbs_events[scope] = {
+		qs: 'subscribe=' + scope + params,
+		callback: callback
+	};
+}
+
 window.onload =	function () {
 
 	$('#button-logout').click(logout);
@@ -79,14 +90,14 @@ window.onload =	function () {
 
 	if ($('#button-logout').length > 0) {
 
-        _sbbs_events.mail = function (e) {
+		registerEventListener('mail', function (e) {
             const data = JSON.parse(e.data);
             if (typeof data.count != 'number') return;
             $('#badge-unread-mail').text(data.count < 1 ? '' : data.count);
             $('#badge-unread-mail-inner').text(data.count < 1 ? '' : data.count);
-        }
-
-        _sbbs_events.telegram = function (e) {
+		});
+		
+		registerEventListener('telegram', function (e) {
             const tg = JSON.parse(e.data).replace(/\1./g, '').replace(
                 /\r?\n/g, '<br>'
             );
@@ -94,16 +105,17 @@ window.onload =	function () {
             $('#popUpModalBody').append(tg);
             $('#popUpModalActionButton').hide();
             $('#popUpModal').modal('show');
-        }
+		});
 
 	}
 
-    const _evtqs = Object.keys(_sbbs_events).reduce(function (a, c, i) {
-        return a + (i == 0 ? '?' : '&') + 'subscribe=' + c; }, ''
-    );
-    const _es = new EventSource('/api/events.ssjs' + _evtqs);
+	const qs = Object.keys(_sbbs_events).reduce(function (a, c, i) {
+		return a + (i == 0 ? '?' : '&') + _sbbs_events[c].qs;
+	}, '');
+
+    const es = new EventSource('/api/events.ssjs' + qs);
     Object.keys(_sbbs_events).forEach(function (e) {
-        _es.addEventListener(e, _sbbs_events[e]);
+        es.addEventListener(e, _sbbs_events[e].callback);
     });
 
 }
diff --git a/web/sidebar/.examples/001-nodelist.xjs b/web/sidebar/.examples/001-nodelist.xjs
index 6a9a352fcfea56d7e4615b7268c2ea6ad9b4a623..395728f42f2730dfbec0dc66f442fd1bf3c30fb9 100644
--- a/web/sidebar/.examples/001-nodelist.xjs
+++ b/web/sidebar/.examples/001-nodelist.xjs
@@ -80,7 +80,7 @@
         $('#sidebar').find('.sb-nodes-available').text(nll - niu);
     }
 
-    _sbbs_events.nodelist = _sb_nodelist;
+    registerEventListener('nodelist', _sb_nodelist);
 
     <?xjs if (settings.nodelist_ibbs) { ?>
         function _send_ibbs_telegram(sys, host, user) {
@@ -109,7 +109,7 @@
         	$('#popUpModal').modal('show');
         }
 
-        _sbbs_events.sbbsimsg = function (e) {
+        registerEventListener('sbbsimsg', function (e) {
             const data = JSON.parse(e.data);
             var users = 0;
             $('#sbbsimsg-nodelist').addClass('hidden');
@@ -145,7 +145,7 @@
                 $('#sbbsimsg-nodelist').removeClass('hidden');
                 $('#sbbs-nodelist').parent().removeClass('hidden');
             }
-        }
+        });
     <?xjs } ?>
 
 </script>