diff --git a/src/sbbs3/terminal.cpp b/src/sbbs3/terminal.cpp
index d8dea9c14c47272879e8ab4c7033441b5e5a2d43..69f844453dce07dad218585ce6e0975a063b79e7 100644
--- a/src/sbbs3/terminal.cpp
+++ b/src/sbbs3/terminal.cpp
@@ -24,10 +24,19 @@ void Terminal::scroll_hotspots(unsigned count)
 		return;
 	unsigned spots = 0;
 	unsigned remain = 0;
-	for (list_node_t* node = mouse_hotspots->first; node != NULL; node = node->next) {
+	list_node_t* node = mouse_hotspots->first;
+	while (node != NULL) {
 		struct mouse_hotspot* spot = (struct mouse_hotspot*)node->data;
-		spot->y -= count;
+		list_node_t* next = node->next;
+		if (spot->y >= count) {
+			spot->y -= count;
+			remain++;
+		}
+		else {
+			listRemoveNode(mouse_hotspots, node, true);
+		}
 		spots++;
+		node = next;
 	}
 #ifdef _DEBUG
 	if (spots)