diff --git a/web/src/components/App.js b/web/src/components/App.js
index 29899850..1843f59e 100644
--- a/web/src/components/App.js
+++ b/web/src/components/App.js
@@ -14,7 +14,7 @@ import Preferences from "./Preferences";
 import {useLiveQuery} from "dexie-react-hooks";
 import subscriptionManager from "../app/SubscriptionManager";
 import userManager from "../app/UserManager";
-import {BrowserRouter, Route, Routes, useNavigate, useParams} from "react-router-dom";
+import {BrowserRouter, Route, Routes, Outlet, useOutletContext, useNavigate, useParams} from "react-router-dom";
 import {expandUrl, subscriptionRoute} from "../app/utils";
 
 // TODO support unsubscribed routes
@@ -28,62 +28,40 @@ const App = () => {
         <BrowserRouter>
             <ThemeProvider theme={theme}>
                 <CssBaseline/>
-                <Content/>
+                <Routes>
+                    <Route element={<Layout/>}>
+                        <Route path="/" element={<AllSubscriptions/>} />
+                        <Route path="settings" element={<Preferences/>} />
+                        <Route path=":topic" element={<SingleSubscription/>} />
+                        <Route path=":baseUrl/:topic" element={<SingleSubscription/>} />
+                    </Route>
+                </Routes>
             </ThemeProvider>
         </BrowserRouter>
     );
 }
 
-const Content = () => {
-    const subscriptions = useLiveQuery(() => subscriptionManager.all());
-    // const context = { subscriptions };
-    return (
-        <Routes>
-            <Route path="settings" element={<PrefLayout subscriptions={subscriptions}/>} />
-            <Route path="settings" element={<PrefLayout subscriptions={subscriptions}/>} />
-            <Route path="/" element={<AllSubscriptions subscriptions={subscriptions}/>} />
-            <Route path=":baseUrl/:topic" element={<SingleSubscription subscriptions={subscriptions}/>} />
-            <Route path=":topic" element={<SingleSubscription subscriptions={subscriptions}/>} />
-        </Routes>
-    )
-};
-
-const AllSubscriptions = (props) => {
-    return (
-        <Layout subscriptions={props.subscriptions}>
-            <Notifications mode="all" subscriptions={props.subscriptions}/>
-        </Layout>
-    );
+const AllSubscriptions = () => {
+    const { subscriptions } = useOutletContext();
+    return <Notifications mode="all" subscriptions={subscriptions}/>;
 }
 
-const SingleSubscription = (props) => {
+const SingleSubscription = () => {
+    const { selected } = useOutletContext();
+    return <Notifications mode="one" subscription={selected}/>;
+}
+
+const Layout = () => {
     const params = useParams();
-    const [selected] = (props.subscriptions || []).filter(s => {
-        return (params.baseUrl && expandUrl(params.baseUrl).includes(s.baseUrl) && params.topic === s.topic)
-            || (window.location.origin === s.baseUrl && params.topic === s.topic)
-    });
-    return (
-        <Layout subscriptions={props.subscriptions} selected={selected}>
-            <Notifications mode="one" subscription={selected}/>
-        </Layout>
-    );
-}
-
-const PrefLayout = (props) => {
-    return (
-        <Layout subscriptions={props.subscriptions}>
-            <Preferences/>
-        </Layout>
-    );
-}
-
-const Layout = (props) => {
-    const subscriptions = props.subscriptions; // May be null/undefined
-    const selected = props.selected; // May be null/undefined
     const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false);
     const [notificationsGranted, setNotificationsGranted] = useState(notifier.granted());
     const users = useLiveQuery(() => userManager.all());
+    const subscriptions = useLiveQuery(() => subscriptionManager.all());
     const newNotificationsCount = subscriptions?.reduce((prev, cur) => prev + cur.new, 0) || 0;
+    const [selected] = (subscriptions || []).filter(s => {
+        return (params.baseUrl && expandUrl(params.baseUrl).includes(s.baseUrl) && params.topic === s.topic)
+            || (window.location.origin === s.baseUrl && params.topic === s.topic)
+    });
 
     useConnectionListeners();
 
@@ -107,7 +85,7 @@ const Layout = (props) => {
             />
             <Main>
                 <Toolbar/>
-                {props.children}
+                <Outlet context={{ subscriptions, selected }}/>
             </Main>
         </Box>
     );