diff --git a/js/Headlines.js b/js/Headlines.js
index 83ac03bc8..0513f387d 100755
--- a/js/Headlines.js
+++ b/js/Headlines.js
@@ -8,6 +8,21 @@ define(["dojo/_base/declare"], function (declare) {
 		headlines: [],
 		current_first_id: 0,
 		_scroll_reset_timeout: false,
+		intersection_observer: new IntersectionObserver(
+			(entries, observer) => {
+				entries.forEach((entry) => {
+					const header = entry.target.nextElementSibling;
+
+					if (entry.intersectionRatio == 0) {
+						header.setAttribute("stuck", "1");
+
+					} else if (entry.intersectionRatio == 1) {
+						header.removeAttribute("stuck");
+					}
+				});
+			},
+			{threshold: [0, 1], root: document.querySelector("#headlines-frame")}
+		),
 		row_observer: new MutationObserver((mutations) => {
 			const modified = [];
 
@@ -40,7 +55,6 @@ define(["dojo/_base/declare"], function (declare) {
 			});
 
 			Headlines.updateSelectedPrompt();
-			Headlines.updateFloatingTitle(true);
 
 			if ('requestIdleCallback' in window)
 				window.requestIdleCallback(() => {
@@ -272,9 +286,6 @@ define(["dojo/_base/declare"], function (declare) {
 			try {
 				Headlines.unpackVisible();
 
-				if (App.isCombinedMode())
-					Headlines.updateFloatingTitle();
-
 				if (!Feeds.infscroll_disabled && !Feeds.infscroll_in_progress) {
 					const hsp = $("headlines-spacer");
 					const container = $("headlines-frame");
@@ -311,61 +322,6 @@ define(["dojo/_base/declare"], function (declare) {
 				console.warn("scrollHandler", e);
 			}
 		},
-		updateFloatingTitle: function (status_only) {
-			if (!App.isCombinedMode()/* || !App.getInitParam("cdm_expanded")*/) return;
-
-			const safety_offset = 120; /* px, needed for firefox */
-			const hf = $("headlines-frame");
-			const elems = $$("#headlines-frame > div[id*=RROW]");
-			const ft = $("floatingTitle");
-
-			for (let i = 0; i < elems.length; i++) {
-				const row = elems[i];
-
-				if (row && row.offsetTop + row.offsetHeight > hf.scrollTop + safety_offset) {
-
-					const header = row.select(".header")[0];
-					const id = row.getAttribute("data-article-id");
-
-					if (status_only || id != ft.getAttribute("data-article-id")) {
-						if (id != ft.getAttribute("data-article-id")) {
-
-							ft.setAttribute("data-article-id", id);
-							ft.innerHTML = header.innerHTML;
-
-							ft.select(".dijitCheckBox")[0].outerHTML = "<i class=\"material-icons icon-anchor\" onclick=\"Article.cdmMoveToId(" + id + ")\">expand_more</i>";
-
-							this.initFloatingMenu();
-
-						}
-
-						if (row.hasClassName("Unread"))
-							ft.addClassName("Unread");
-						else
-							ft.removeClassName("Unread");
-
-						if (row.hasClassName("marked"))
-							ft.addClassName("marked");
-						else
-							ft.removeClassName("marked");
-
-						if (row.hasClassName("published"))
-							ft.addClassName("published");
-						else
-							ft.removeClassName("published");
-
-						PluginHost.run(PluginHost.HOOK_FLOATING_TITLE, row);
-					}
-
-					if (hf.scrollTop - row.offsetTop <= header.offsetHeight + safety_offset)
-						ft.fade({duration: 0.2});
-					else
-						ft.appear({duration: 0.2});
-
-					return;
-				}
-			}
-		},
 		unpackVisible: function () {
 			if (!App.isCombinedMode() || !App.getInitParam("cdm_expanded")) return;
 
@@ -468,6 +424,7 @@ define(["dojo/_base/declare"], function (declare) {
 							onmouseover="Article.mouseIn(${hl.id})"
 							onmouseout="Article.mouseOut(${hl.id})">
 							
+							<div class="header-sticky-guard"></div>
 							<div class="header">
 								<div class="left">
 									<input dojoType="dijit.form.CheckBox" type="checkbox" onclick="Headlines.onRowChecked(this)" class='rchk'>
@@ -738,6 +695,8 @@ define(["dojo/_base/declare"], function (declare) {
 					}
 				}
 
+				$$(".cdm .header-sticky-guard").each((e) => { this.intersection_observer.observe(e) });
+
 			} else {
 				console.error("Invalid object received: " + transport.responseText);
 				dijit.byId("headlines-frame").attr('content', "<div class='whiteBox'>" +
diff --git a/themes/light/cdm.less b/themes/light/cdm.less
index 734c92e7e..754e30023 100644
--- a/themes/light/cdm.less
+++ b/themes/light/cdm.less
@@ -3,6 +3,11 @@
 		color : @color-icon;
 	}
 
+	.header {
+		position: sticky;
+		top : 0;
+	}
+
 	.header, .footer {
 		display : flex;
 		flex-direction : row;
@@ -110,8 +115,17 @@
 
 }
 
-div.cdm.expanded div.header {
-	background : transparent ! important;
+div.cdm.expanded {
+	.header {
+		background: transparent ! important;
+	}
+
+	.header[stuck] {
+		box-shadow : 0 1px 1px -1px rgba(0,0,0,0.1);
+		border: 0px solid @border-default;
+		border-bottom-width: 1px;
+		background : @default-bg ! important;
+	}
 }
 
 div.cdm.expanded div.header a.title {
