diff --git a/web/src/app/Api.js b/web/src/app/Api.js
index f126bcf2..8bb7770e 100644
--- a/web/src/app/Api.js
+++ b/web/src/app/Api.js
@@ -8,7 +8,7 @@ class Api {
         for await (let line of fetchLinesIterator(url)) {
             messages.push(JSON.parse(line));
         }
-        return messages.sort((a, b) => { return a.time < b.time ? 1 : -1; }); // Newest first
+        return messages;
     }
 
     async publish(baseUrl, topic, message) {
diff --git a/web/src/app/Connection.js b/web/src/app/Connection.js
index 76252900..9e479f94 100644
--- a/web/src/app/Connection.js
+++ b/web/src/app/Connection.js
@@ -40,7 +40,7 @@ class Connection {
                     console.log(`[Connection, ${this.shortUrl}] Message irrelevant or invalid. Ignoring.`);
                     return;
                 }
-                this.since = data.time;
+                this.since = data.time + 1; // Sigh. This works because on reconnect, we wait 5+ seconds anyway.
                 this.onNotification(this.subscriptionId, data);
             } catch (e) {
                 console.log(`[Connection, ${this.shortUrl}] Error handling message: ${e}`);
diff --git a/web/src/app/Subscription.js b/web/src/app/Subscription.js
index 8f4af1f6..8b19a18b 100644
--- a/web/src/app/Subscription.js
+++ b/web/src/app/Subscription.js
@@ -6,14 +6,15 @@ export default class Subscription {
         this.baseUrl = baseUrl;
         this.topic = topic;
         this.notifications = new Map(); // notification ID -> notification object
-        this.deleted = new Set(); // notification IDs
+        this.last = 0;
     }
 
     addNotification(notification) {
-        if (this.notifications.has(notification.id) || this.deleted.has(notification.id)) {
+        if (this.notifications.has(notification.id) || notification.time < this.last) {
             return this;
         }
         this.notifications.set(notification.id, notification);
+        this.last = notification.time;
         return this;
     }
 
@@ -24,14 +25,11 @@ export default class Subscription {
 
     deleteNotification(notificationId) {
         this.notifications.delete(notificationId);
-        this.deleted.add(notificationId);
         return this;
     }
 
     deleteAllNotifications() {
-        console.log(this.notifications);
         for (const [id] of this.notifications) {
-            console.log(`delete ${id}`);
             this.deleteNotification(id);
         }
         return this;
diff --git a/web/src/components/App.js b/web/src/components/App.js
index 80743a94..7f91e4ee 100644
--- a/web/src/components/App.js
+++ b/web/src/components/App.js
@@ -20,7 +20,7 @@ import SettingsIcon from "@mui/icons-material/Settings";
 import AddIcon from "@mui/icons-material/Add";
 import AddDialog from "./AddDialog";
 import NotificationList from "./NotificationList";
-import DetailSettingsIcon from "./DetailSettingsIcon";
+import SubscriptionSettings from "./SubscriptionSettings";
 import theme from "./theme";
 import api from "../app/Api";
 import repository from "../app/Repository";
@@ -184,7 +184,7 @@ const App = () => {
                         >
                             {(selectedSubscription !== null) ? selectedSubscription.shortUrl() : "ntfy"}
                         </Typography>
-                        {selectedSubscription !== null && <DetailSettingsIcon
+                        {selectedSubscription !== null && <SubscriptionSettings
                             subscription={selectedSubscription}
                             onClearAll={handleClearAll}
                             onUnsubscribe={handleUnsubscribe}
diff --git a/web/src/components/DetailSettingsIcon.js b/web/src/components/SubscriptionSettings.js
similarity index 96%
rename from web/src/components/DetailSettingsIcon.js
rename to web/src/components/SubscriptionSettings.js
index af103d9b..731cd8b0 100644
--- a/web/src/components/DetailSettingsIcon.js
+++ b/web/src/components/SubscriptionSettings.js
@@ -11,7 +11,7 @@ import MoreVertIcon from "@mui/icons-material/MoreVert";
 import api from "../app/Api";
 
 // Originally from https://mui.com/components/menus/#MenuListComposition.js
-const DetailSettingsIcon = (props) => {
+const SubscriptionSettings = (props) => {
     const [open, setOpen] = useState(false);
     const anchorRef = useRef(null);
 
@@ -39,7 +39,7 @@ const DetailSettingsIcon = (props) => {
     const handleSendTestMessage = () => {
         const baseUrl = props.subscription.baseUrl;
         const topic = props.subscription.topic;
-        api.publish(baseUrl, topic, `This is a test notification sent by the ntfy.sh Web UI at ${new Date().toString()}.`); // FIXME result ignored
+        api.publish(baseUrl, topic, `This is a test notification sent by the ntfy Web UI at ${new Date().toString()}.`); // FIXME result ignored
         setOpen(false);
     }
 
@@ -114,4 +114,4 @@ const DetailSettingsIcon = (props) => {
     );
 }
 
-export default DetailSettingsIcon;
+export default SubscriptionSettings;