diff --git a/src/gisaf/api/geoapi.py b/src/gisaf/api/geoapi.py
index c32ca17..44aebf6 100644
--- a/src/gisaf/api/geoapi.py
+++ b/src/gisaf/api/geoapi.py
@@ -3,7 +3,6 @@ Geographical json stores, served under /gj
 Used for displaying features on maps
 """
 
-from json import JSONDecodeError
 import logging
 from typing import Annotated
 from asyncio import CancelledError
@@ -15,17 +14,14 @@ from fastapi import (
     Response,
     Header,
     WebSocket,
-    WebSocketDisconnect,
     status,
 )
 
 from gisaf.models.authentication import User
 from gisaf.redis_tools import store as redis_store
-from gisaf.live import live_server
 from gisaf.registry import registry
 from gisaf.security import get_current_active_user
 
-
 logger = logging.getLogger(__name__)
 
 api = APIRouter(
@@ -59,37 +55,6 @@ class ConnectionManager:
 manager = ConnectionManager()
 
 
-@api.websocket("/live/{store}")
-async def live_layer(store: str, websocket: WebSocket):
-    """
-    Websocket for live layer updates
-    """
-    await websocket.accept()
-    try:
-        while True:
-            try:
-                msg_data = await websocket.receive_json()
-            except JSONDecodeError:
-                msg_text = await websocket.receive_text()
-                if msg_text == "close":
-                    await websocket.close()
-                continue
-            # else:
-            if "message" in msg_data:
-                if msg_data["message"] == "subscribeLiveLayer":
-                    live_server.add_subscription(websocket, store)
-                elif msg_data["message"] == "unsubscribeLiveLayer":
-                    live_server.remove_subscription(websocket, store)
-            else:
-                logger.warning(
-                    f"Got websocket message with no message field: {msg_data}"
-                )
-    except WebSocketDisconnect:
-        logger.debug("Websocket disconnected")
-
-        # logger.debug('websocket connection closed')
-
-
 @api.get("/{store_name}")
 async def get_geojson(
     store_name,
diff --git a/src/gisaf/api/ws.py b/src/gisaf/api/ws.py
new file mode 100644
index 0000000..89d1f85
--- /dev/null
+++ b/src/gisaf/api/ws.py
@@ -0,0 +1,43 @@
+from json import JSONDecodeError
+import logging
+
+from fastapi import WebSocket, APIRouter, WebSocketDisconnect
+
+from gisaf.live import live_server
+
+logger = logging.getLogger(__name__)
+
+api = APIRouter(
+    tags=["websockets"],
+    responses={404: {"description": "Not found"}},
+)
+
+
+@api.websocket("/live/{store}")
+async def live_layer(store: str, websocket: WebSocket):
+    """
+    Websocket for live layer updates
+    """
+    await websocket.accept()
+    try:
+        while True:
+            try:
+                msg_data = await websocket.receive_json()
+            except JSONDecodeError:
+                msg_text = await websocket.receive_text()
+                if msg_text == "close":
+                    await websocket.close()
+                continue
+            # else:
+            if "message" in msg_data:
+                if msg_data["message"] == "subscribeLiveLayer":
+                    live_server.add_subscription(websocket, store)
+                elif msg_data["message"] == "unsubscribeLiveLayer":
+                    live_server.remove_subscription(websocket, store)
+            else:
+                logger.warning(
+                    f"Got websocket message with no message field: {msg_data}"
+                )
+    except WebSocketDisconnect:
+        logger.debug("Websocket disconnected")
+        # logger.debug('websocket connection closed')
diff --git a/src/gisaf/application.py b/src/gisaf/application.py
index 524822f..fe6cdd5 100644
--- a/src/gisaf/application.py
+++ b/src/gisaf/application.py
@@ -15,6 +15,7 @@ from gisaf.api.admin import api as admin_api
 from gisaf.api.dashboard import api as dashboard_api
 from gisaf.api.map import api as map_api
 from gisaf.api.download import api as download_api
+from gisaf.api.ws import api as ws_api
 from gisaf.plugins import manager as plugin_manager
 
 logging.basicConfig(level=conf.gisaf.debugLevel)
@@ -45,6 +46,7 @@ app = FastAPI(
 
 app.include_router(api, prefix="/api")
 app.include_router(geoapi, prefix="/api/gj")
+app.include_router(ws_api, prefix="/gj")
 app.include_router(admin_api, prefix="/api/admin")
 app.include_router(dashboard_api, prefix="/api/dashboard")
 app.include_router(map_api, prefix="/api/map")