diff --git a/package/gluon-status-page-api/Makefile b/package/gluon-status-page-api/Makefile
index 91a7095a7e519b6fcc8575c6678092db25f93ff1..46c9e7d2d6f090abe4779d8d06cbd01918b03ef6 100644
--- a/package/gluon-status-page-api/Makefile
+++ b/package/gluon-status-page-api/Makefile
@@ -12,7 +12,7 @@ define Package/gluon-status-page-api
   SECTION:=gluon
   CATEGORY:=Gluon
   TITLE:=API for gluon-status-page
-  DEPENDS:=+gluon-core +uhttpd +gluon-neighbour-info +gluon-announced +libiwinfo +libjson-c
+  DEPENDS:=+gluon-core +uhttpd +sse-multiplex +gluon-neighbour-info +gluon-announced +libiwinfo +libjson-c
 endef
 
 define Build/Prepare
@@ -21,9 +21,9 @@ define Build/Prepare
 endef
 
 define Package/gluon-status-page-api/install
-	$(INSTALL_DIR) $(1)/lib/gluon/status-page/www/cgi-bin/dyn
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/neighbours-batadv $(1)/lib/gluon/status-page/www/cgi-bin/dyn/
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/stations $(1)/lib/gluon/status-page/www/cgi-bin/dyn/
+	$(INSTALL_DIR) $(1)/lib/gluon/status-page/providers
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/neighbours-batadv $(1)/lib/gluon/status-page/providers/
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/stations $(1)/lib/gluon/status-page/providers/
 	$(CP) ./files/* $(1)/
 endef
 
diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv
new file mode 100755
index 0000000000000000000000000000000000000000..075e8b8ba10b56b1ef4e6170519f0345660c1faa
--- /dev/null
+++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-batadv
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+echo 'Access-Control-Allow-Origin: *'
+
+CMD='exec /lib/gluon/status-page/providers/neighbours-batadv'
+
+exec /usr/sbin/sse-multiplex "$CMD"
diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
index 4420570e2130a29f9f820a52b8e4a9d6c077bf87..657f17e50aa9739ab409d6955a968c67ec07508f 100755
--- a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
+++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/neighbours-nodeinfo
@@ -1,7 +1,13 @@
 #!/bin/sh
 
+badrequest() {
+        echo 'Status: 400 Bad Request'
+        echo
+        exit 1
+}
+
 echo 'Access-Control-Allow-Origin: *'
 
-batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || exit 1
+batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || badrequest
 
 exec /usr/bin/gluon-neighbour-info -s neighbour -i "$QUERY_STRING" -d ff02::2:1001 -p 1001 -r nodeinfo
diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations
new file mode 100755
index 0000000000000000000000000000000000000000..258122fb2ac2246eacb54918fa62d526b51259c1
--- /dev/null
+++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/stations
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+badrequest() {
+        echo 'Status: 400 Bad Request'
+        echo
+        exit 1
+}
+
+echo 'Access-Control-Allow-Origin: *'
+
+batctl if | cut -d: -f1 | grep -qxF "$QUERY_STRING" || badrequest
+
+CMD="exec /lib/gluon/status-page/providers/stations '$QUERY_STRING'"
+
+exec /usr/sbin/sse-multiplex "$CMD"
diff --git a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics
index 637c8bc60e8b2982b16787b6a6a6bb03b654fdb9..ef0dd3d8a41dd1a3bbd8b71cb145512326b30d70 100755
--- a/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics
+++ b/package/gluon-status-page-api/files/lib/gluon/status-page/www/cgi-bin/dyn/statistics
@@ -1,5 +1,7 @@
 #!/bin/sh
 
-echo "Access-Control-Allow-Origin: *"
+echo 'Access-Control-Allow-Origin: *'
 
-exec gluon-neighbour-info -s "" -l -d ::1 -p 1001 -t 3 -r statistics
+CMD='exec gluon-neighbour-info -s "" -l -d ::1 -p 1001 -t 3 -r statistics'
+
+exec /usr/sbin/sse-multiplex "$CMD"
diff --git a/package/gluon-status-page-api/src/neighbours-batadv.c b/package/gluon-status-page-api/src/neighbours-batadv.c
old mode 100755
new mode 100644
index a386b5e0c4653d480d4e7ff40e4058a7b64ce7f8..1fd62eaf88d74458468228ac1e4279b22cb52a5a
--- a/package/gluon-status-page-api/src/neighbours-batadv.c
+++ b/package/gluon-status-page-api/src/neighbours-batadv.c
@@ -50,8 +50,8 @@ static json_object *neighbours(void) {
 int main(void) {
   struct json_object *obj;
 
-  printf("Access-Control-Allow-Origin: *\n");
   printf("Content-type: text/event-stream\n\n");
+  fflush(stdout);
 
   while (1) {
     obj = neighbours();
diff --git a/package/gluon-status-page-api/src/stations.c b/package/gluon-status-page-api/src/stations.c
old mode 100755
new mode 100644
index 9cae368034f9e50b9f2ad9308cd7dec3cbdad11b..132888277fe09008d2b5c318d336bafbd11ba477
--- a/package/gluon-status-page-api/src/stations.c
+++ b/package/gluon-status-page-api/src/stations.c
@@ -1,15 +1,10 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <stdbool.h>
 #include <json-c/json.h>
 #include <iwinfo.h>
 #include <net/if.h>
 
-#define STR(x) #x
-#define XSTR(x) STR(x)
-
-#define BATIF_PREFIX "/sys/class/net/bat0/lower_"
 
 static struct json_object *get_stations(const struct iwinfo_ops *iw, const char *ifname) {
   int len;
@@ -45,34 +40,16 @@ static void badrequest() {
   exit(1);
 }
 
-bool interface_is_valid(const char *ifname) {
-  if (strlen(ifname) > IF_NAMESIZE)
-    return false;
-
-  if (strchr(ifname, '/') != NULL)
-    return false;
-
-  char *path = alloca(1 + strlen(BATIF_PREFIX) + strlen(ifname));
-  sprintf(path, "%s%s", BATIF_PREFIX, ifname);
-
-  return access(path, F_OK) == 0;
-}
-
-int main(void) {
-  char *ifname = getenv("QUERY_STRING");
-
-  if (ifname == NULL)
-    badrequest();
-
-  if (!interface_is_valid(ifname))
+int main(int argc, char *argv[]) {
+  if (argc != 2)
     badrequest();
 
+  const char *ifname = argv[1];
   const struct iwinfo_ops *iw = iwinfo_backend(ifname);
 
   if (iw == NULL)
     badrequest();
 
-  printf("Access-Control-Allow-Origin: *\n");
   printf("Content-type: text/event-stream\n\n");
 
   while (true) {