diff --git a/config/cfgroot/general-functions.pl b/config/cfgroot/general-functions.pl
index de608e38b..54e23a535 100644
--- a/config/cfgroot/general-functions.pl
+++ b/config/cfgroot/general-functions.pl
@@ -24,7 +24,9 @@ $|=1; # line buffering
 $General::version = 'VERSION';
 $General::swroot = 'CONFIG_ROOT';
 $General::noipprefix = 'noipg-';
-$General::adminmanualurl = 'http://wiki.ipfire.org';
+
+# Base URL of the user manual
+my $usermanual_base_url = 'https://wiki.ipfire.org';
 
 require "${General::swroot}/network-functions.pl";
 
@@ -1421,4 +1423,18 @@ sub running_on_gcp() {
 	return 0;
 }
 
+# Get user manual url for the specified configuration page, returns "" if no entry is configured
+sub get_usermanual_url() {
+	my ($config_page) = @_;
+
+	my %manual_pages = ();
+	&readhash("${General::swroot}/main/manualpages", \%manual_pages);
+
+	if($config_page && defined($manual_pages{$config_page})) {
+		return $usermanual_base_url . '/' . $manual_pages{$config_page};
+	}
+
+	return "";
+}
+
 1;
diff --git a/config/cfgroot/manualpages b/config/cfgroot/manualpages
new file mode 100644
index 000000000..02dac5be6
--- /dev/null
+++ b/config/cfgroot/manualpages
@@ -0,0 +1,3 @@
+index=configuration/system/startpage
+pppsetup=configuration/system/dial
+qos=configuration/services/qos
diff --git a/html/html/themes/ipfire/include/css/style.css b/html/html/themes/ipfire/include/css/style.css
index b92f476c4..661773675 100644
--- a/html/html/themes/ipfire/include/css/style.css
+++ b/html/html/themes/ipfire/include/css/style.css
@@ -169,6 +169,19 @@ iframe {
 	margin-bottom: 1em;
 }
 
+#main_header > * {
+	display: inline-block;
+	vertical-align: baseline;
+}
+
+#main_header > span {
+	margin-left: 0.8em;
+}
+
+#main_header img {
+	padding: 0;
+}
+
 #footer {
 	height: 2.5em;
 	margin-bottom: 1em;
diff --git a/html/html/themes/ipfire/include/functions.pl b/html/html/themes/ipfire/include/functions.pl
index 9f12bbe59..d352a7d96 100644
--- a/html/html/themes/ipfire/include/functions.pl
+++ b/html/html/themes/ipfire/include/functions.pl
@@ -170,7 +170,22 @@ END
 print <<END
 	<div class="bigbox fixed">
 		<div id="main_inner" class="fixed">
-			<h1>$title</h1>
+			<div id="main_header">
+				<h1>$title</h1>
+END
+;
+
+# Print user manual link
+my $manual_url = &General::get_usermanual_url($scriptName);
+if($manual_url ne "") {
+	print <<END
+				<span><a href="$manual_url" title="$Lang::tr{'online help en'}" target="_blank"><img src="/images/help-browser.png" alt="$Lang::tr{'online help en'}"></a></span>
+END
+;
+}
+
+print <<END
+			</div>
 END
 ;
 }
