diff --git a/docs/dev/web/controller.rst b/docs/dev/web/controller.rst
index 3f63ef01a46c431e570c1a8675712d9ef37e402f..2f0ab733ae213c89b79acbaab559614b0682471f 100644
--- a/docs/dev/web/controller.rst
+++ b/docs/dev/web/controller.rst
@@ -74,8 +74,7 @@ Useful functions:
   - *header* (*key*, *value*): Adds an HTTP header to the reply to be sent to
     the client. Has no effect when non-header data has already been written.
   - *prepare_content* (*mime*): Sets the *Content-Type* header to the given MIME
-    type, potentially setting additional headers or modifying the MIME type to
-    accommodate browser quirks
+    type
   - *write* (*data*, ...): Sends the given data to the client. If headers have not
     been sent, it will be done before the data is written.
 
diff --git a/docs/site-example/i18n/de.po b/docs/site-example/i18n/de.po
index 51b8e71ccb930b1b3d0ed8aa83e11ed27d138c53..f2db6eef6366d6e514e77acc4296a43a8bbffb58 100644
--- a/docs/site-example/i18n/de.po
+++ b/docs/site-example/i18n/de.po
@@ -45,7 +45,7 @@ msgstr ""
 "selbstverständlich vertraulich behandelt und nicht weitergegeben."
 "</p>"
 "<div class=\"the-key\">"
-"# <%= pcdata(hostname) %><br />"
+"# <%= pcdata(hostname) %><br>"
 "<%= pubkey %>"
 "</div>"
 "<p>Dein Knoten startet gerade neu und wird anschließend versuchen, sich mit "
diff --git a/docs/site-example/i18n/en.po b/docs/site-example/i18n/en.po
index eef8bd08b515986dc8c2e75b2889c73b1d5de700..4f393860702457e30d01742ce5d987a393bac862 100644
--- a/docs/site-example/i18n/en.po
+++ b/docs/site-example/i18n/en.po
@@ -41,7 +41,7 @@ msgstr ""
 "\">keys@alpha-centauri.freifunk.net</a>. Of course, your e-mail address will "
 "be treated confidentially and will not be passed on.</p>"
 "<div class=\"the-key\">"
-" # <%= pcdata(hostname) %><br />"
+" # <%= pcdata(hostname) %><br>"
 "<%= pubkey %>"
 "</div>"
 "<p>Your node <em><%= pcdata(hostname) %></em> is currently rebooting and will "
diff --git a/docs/site-example/i18n/fr.po b/docs/site-example/i18n/fr.po
index ba0f43a4553866d82b57a5a12f7a630ddfc2b5e9..e9c259f8430e619d7fddf9635f7dc1d8e155a34a 100644
--- a/docs/site-example/i18n/fr.po
+++ b/docs/site-example/i18n/fr.po
@@ -36,7 +36,7 @@ msgstr ""
 "body=<%= urlencode('# ' .. hostname .. '\n' .. pubkey) %>\">keys@alpha-centauri.freifunk.net</a>."
 "</p>"
 "<div class=\"the-key\">"
-" # <%= pcdata(hostname) %><br />"
+" # <%= pcdata(hostname) %><br>"
 "<%= pubkey %>"
 "</div>"
 
diff --git a/package/gluon-config-mode-core/files/lib/gluon/config-mode/www/index.html b/package/gluon-config-mode-core/files/lib/gluon/config-mode/www/index.html
index 292129f6e1f47b5c8919f395f49acf8769239243..e42b9eedf3927beb1f3cf64ba5c3aa0bf2b6c336 100644
--- a/package/gluon-config-mode-core/files/lib/gluon/config-mode/www/index.html
+++ b/package/gluon-config-mode-core/files/lib/gluon/config-mode/www/index.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html lang="">
 	<head>
-		<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
-		<meta http-equiv="Pragma" content="no-cache" />
-		<meta http-equiv="Expires" content="0" />
-		<meta http-equiv="refresh" content="0; URL=/cgi-bin/config" />
+		<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
+		<meta http-equiv="Pragma" content="no-cache">
+		<meta http-equiv="Expires" content="0">
+		<meta http-equiv="refresh" content="0; URL=/cgi-bin/config">
 	</head>
 	<body>
 	</body>
diff --git a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
index c80cd4b38af86a25652789b24bf43f1e7e1653b6..865ec2aa8504af7c5f3b3d5c917ea3959214bcf6 100644
--- a/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
+++ b/package/gluon-config-mode-theme/files/lib/gluon/config-mode/view/theme/layout.html
@@ -82,7 +82,7 @@ You may obtain a copy of the License at
 				end
 			%>
 		</ul>
-		<br style="clear:both" />
+		<br style="clear:both">
 		<%
 			subtree(append(prefix, name), node.nodes[name], ...)
 		%>
@@ -94,13 +94,13 @@ You may obtain a copy of the License at
 		subtree({path}, root.nodes[category], ...)
 	end
 
-	http:prepare_content("application/xhtml+xml")
+	http:prepare_content("text/html")
 -%>
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<html lang="">
 	<head>
-		<meta charset="UTF-8" />
-		<link rel="stylesheet" type="text/css" media="screen" href="/static/gluon.css" />
+		<meta charset="UTF-8">
+		<link rel="stylesheet" type="text/css" media="screen" href="/static/gluon.css">
 		<title><%| hostname .. ((rnode and rnode.title) and ' - ' .. title(rnode) or '') %></title>
 	</head>
 	<body>
@@ -134,7 +134,7 @@ You may obtain a copy of the License at
 		<div id="maincontent">
 			<noscript>
 				<div class="errorbox">
-					<strong><%:JavaScript required!%></strong><br />
+					<strong><%:JavaScript required!%></strong><br>
 					<%:You must enable JavaScript in your browser or the web interface will not work properly.%>
 				</div>
 			</noscript>
diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/layout.html b/package/gluon-status-page/files/lib/gluon/status-page/view/layout.html
index 11969ddc2f527915493be6b27d179f3947611a2b..6b960207e90720c4e2d866b386023b141c62dddc 100644
--- a/package/gluon-status-page/files/lib/gluon/status-page/view/layout.html
+++ b/package/gluon-status-page/files/lib/gluon/status-page/view/layout.html
@@ -1,15 +1,15 @@
 <%-
-	http:prepare_content("application/xhtml+xml")
+	http:prepare_content("text/html")
 -%>
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<html lang="">
 	<head>
-		<meta charset="utf-8" />
-		<meta name="viewport" content="width=device-width, user-scalable=no" />
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, user-scalable=no">
 
 		<title><%:Error%></title>
 
-		<link rel="stylesheet" href="/static/status-page.css" type="text/css" />
+		<link rel="stylesheet" href="/static/status-page.css" type="text/css">
 	</head>
 	<body>
 		<header>
diff --git a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
index 6957599f37803637d3a14c89e4630c1442874fa3..703cf4367fb6ce51d5c55673e5079458b5737588 100644
--- a/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
+++ b/package/gluon-status-page/files/lib/gluon/status-page/view/status-page.html
@@ -111,24 +111,24 @@
 	end
 
 	local function statisticsTraffic(key)
-		return string.format('%s<br />%s<br />%s',
+		return string.format('%s<br>%s<br>%s',
 			statistics(key .. '/packets', 'packetsDiff'),
 			statistics(key .. '/bytes', 'bytesDiff'),
 			statistics(key .. '/bytes', 'bytes')
 		)
 	end
 
-	http:prepare_content("application/xhtml+xml")
+	http:prepare_content("text/html")
 -%>
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<html lang="">
 	<head>
-		<meta charset="utf-8" />
-		<meta name="viewport" content="width=device-width, user-scalable=no" />
+		<meta charset="utf-8">
+		<meta name="viewport" content="width=device-width, user-scalable=no">
 
 		<title><%| nodeinfo.hostname %> - <%:Status%></title>
 
-		<link rel="stylesheet" href="/static/status-page.css" type="text/css" />
+		<link rel="stylesheet" href="/static/status-page.css" type="text/css">
 	</head>
 	<body data-node-address="<%| http:getenv('SERVER_ADDR') %>"<%=
 		attr('data-translations', translations) ..
@@ -154,21 +154,21 @@
 					<%- end %>
 					<dt><%:Model%></dt><dd><%| nodeinfo.hardware.model %></dd>
 					<dt><%:Primary MAC address%></dt><dd><%| nodeinfo.network.mac %></dd>
-					<dt><%:IP address%></dt><dd><%= pcdata(table.concat(sorted(nodeinfo.network.addresses), '\n')):gsub('\n', '<br />') %></dd>
+					<dt><%:IP address%></dt><dd><%= pcdata(table.concat(sorted(nodeinfo.network.addresses), '\n')):gsub('\n', '<br>') %></dd>
 					<dt><%:Firmware%></dt><dd><%| nodeinfo.software.firmware.release %></dd>
 					<% if nodeinfo.network.mesh_vpn then -%>
 						<dt><%:Mesh VPN%></dt>
 						<dd>
 							<%| enabled(nodeinfo.network.mesh_vpn.enabled) %>
 							<% if nodeinfo.network.mesh_vpn.provider then -%>
-							<br /><%| nodeinfo.network.mesh_vpn.provider %>
+							<br><%| nodeinfo.network.mesh_vpn.provider %>
 							<%- end %>
 						</dd>
 						<% if nodeinfo.network.mesh_vpn.bandwidth_limit.enabled then -%>
 						<dt><%:Bandwidth limit%></dt>
 						<dd>
 							<% if nodeinfo.network.mesh_vpn.bandwidth_limit.ingress then -%>
-								â–¼ <%| formatBits(nodeinfo.network.mesh_vpn.bandwidth_limit.ingress*1000) %>/s <%:downstream%><br />
+								â–¼ <%| formatBits(nodeinfo.network.mesh_vpn.bandwidth_limit.ingress*1000) %>/s <%:downstream%><br>
 							<%- end %>
 							<% if nodeinfo.network.mesh_vpn.bandwidth_limit.egress then -%>
 								â–² <%| formatBits(nodeinfo.network.mesh_vpn.bandwidth_limit.egress*1000) %>/s <%:upstream%>
@@ -213,7 +213,7 @@
 					<tr><th><%:Load average%></th><td><%= statistics('loadavg', 'decimal') %></td></tr>
 					<tr><th><%:RAM%></th><td><%= statistics('memory', 'memory') %></td></tr>
 					<tr><th><%:Filesystem%></th><td><%= statistics('rootfs_usage', 'percent') %></td></tr>
-					<tr><th><%:Gateway%></th><td><%= statistics('gateway') %><br /><%= statistics('gateway_nexthop', 'neighbour') %></td></tr>
+					<tr><th><%:Gateway%></th><td><%= statistics('gateway') %><br><%= statistics('gateway_nexthop', 'neighbour') %></td></tr>
 				</table>
 
 				<h3><%:Clients%></h3>
diff --git a/package/gluon-status-page/files/lib/gluon/status-page/www/index.html b/package/gluon-status-page/files/lib/gluon/status-page/www/index.html
index cc209cece61063952e2d3fb17ea16fa6311728d6..03e08420d66c3f9ad69a572efef41caa24fce322 100644
--- a/package/gluon-status-page/files/lib/gluon/status-page/www/index.html
+++ b/package/gluon-status-page/files/lib/gluon/status-page/www/index.html
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html lang="">
 	<head>
-		<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
-		<meta http-equiv="Pragma" content="no-cache" />
-		<meta http-equiv="Expires" content="0" />
-		<meta http-equiv="refresh" content="0; URL=/cgi-bin/status" />
+		<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
+		<meta http-equiv="Pragma" content="no-cache">
+		<meta http-equiv="Expires" content="0">
+		<meta http-equiv="refresh" content="0; URL=/cgi-bin/status">
 	</head>
 	<body>
 	</body>
diff --git a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade.html b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade.html
index 7778be4a6c9eb8a01b8232557293c58a4beb8135..6791c2c0de643f41bd31c3501d59398b254a18b3 100644
--- a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade.html
+++ b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade.html
@@ -26,7 +26,7 @@ $Id$
 				<%:Firmware image%>
 			</label>
 			<div class="gluon-value-field">
-				<input type="file" name="image" />
+				<input type="file" name="image">
 			</div>
 		</div>
 
@@ -36,14 +36,14 @@ $Id$
 			</label>
 
 			<div class="gluon-value-field">
-				<input id="keepcfg" type="checkbox" name="keepcfg" value="1" checked="checked" />
+				<input id="keepcfg" type="checkbox" name="keepcfg" value="1" checked="checked">
 				<label for="keepcfg"></label>
 			</div>
 		</div>
 	</div>
 
 	<div class="gluon-page-actions">
-		<input type="hidden" name="step" value="2" />
-		<input class="gluon-button gluon-button-submit" type="submit" value="<%:Upload image%>" />
+		<input type="hidden" name="step" value="2">
+		<input class="gluon-button gluon-button-submit" type="submit" value="<%:Upload image%>">
 	</div>
 </form>
diff --git a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade_confirm.html b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade_confirm.html
index 9733132fa9ec7ca77d5d64ae4d198bc25e3f4a9c..b45012efc4ba8b8869ed3692fdb18da6aff0cb9f 100644
--- a/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade_confirm.html
+++ b/package/gluon-web-admin/files/lib/gluon/config-mode/view/admin/upgrade_confirm.html
@@ -47,13 +47,13 @@ You may obtain a copy of the License at
 </p>
 <div class="gluon-page-actions">
   <form method="post" enctype="multipart/form-data" action="<%|url(request)%>" style="display:inline">
-    <input type="hidden" name="step" value="3" />
-    <input type="hidden" name="keepcfg" value="<%=keepconfig and "1" or "0"%>" />
-    <input class="gluon-button gluon-button-submit" type="submit" value="<%:Continue%>" />
+    <input type="hidden" name="step" value="3">
+    <input type="hidden" name="keepcfg" value="<%=keepconfig and "1" or "0"%>">
+    <input class="gluon-button gluon-button-submit" type="submit" value="<%:Continue%>">
   </form>
   <form method="post" enctype="multipart/form-data" action="<%|url(request)%>" style="display:inline">
-    <input type="hidden" name="step" value="1" />
-    <input type="hidden" name="keepcfg" value="<%=keepconfig and "1" or "0"%>" />
-    <input class="gluon-button gluon-button-reset" type="submit" value="<%:Cancel%>" />
+    <input type="hidden" name="step" value="1">
+    <input type="hidden" name="keepcfg" value="<%=keepconfig and "1" or "0"%>">
+    <input class="gluon-button gluon-button-reset" type="submit" value="<%:Cancel%>">
   </form>
 </div>
diff --git a/package/gluon-web-admin/i18n/de.po b/package/gluon-web-admin/i18n/de.po
index c6511012b035a41708d5516e12bf0c33856ade21..33b459a07a00bc86ee6f7cbf58479a7e3ad67c0c 100644
--- a/package/gluon-web-admin/i18n/de.po
+++ b/package/gluon-web-admin/i18n/de.po
@@ -21,11 +21,11 @@ msgstr "Erweiterte Einstellungen"
 
 msgid ""
 "Alternatively, you can set a password to access your node. Please choose a "
-"secure password you don't use anywhere else.<br /><br />If you set an empty "
+"secure password you don't use anywhere else.<br><br>If you set an empty "
 "password, login via password will be disabled. This is the default."
 msgstr ""
 "Alternativ kannst du auch ein Passwort setzen. Wähle bitte ein sicheres "
-"Passwort, das du nirgendwo anders verwendest.<br /><br />Beim Setzen eines "
+"Passwort, das du nirgendwo anders verwendest.<br><br>Beim Setzen eines "
 "leeren Passworts wird der Login per Passwort gesperrt (dies ist die Standard-"
 "Einstellung)."
 
diff --git a/package/gluon-web-admin/i18n/fr.po b/package/gluon-web-admin/i18n/fr.po
index 4e16238d243ab0f1a7a37d41a2150f93d0261a64..dcae406e444d27f7d181b10d65bad3556f9b38bd 100644
--- a/package/gluon-web-admin/i18n/fr.po
+++ b/package/gluon-web-admin/i18n/fr.po
@@ -21,12 +21,12 @@ msgstr "Paramètres avancés"
 
 msgid ""
 "Alternatively, you can set a password to access your node. Please choose a "
-"secure password you don't use anywhere else.<br /><br />If you set an empty "
+"secure password you don't use anywhere else.<br><br>If you set an empty "
 "password, login via password will be disabled. This is the default."
 msgstr ""
 "Alternativement, vous pouvez mettre un mot de passe pour accéder à votre "
 "nœud, Penseiz à choisir un mot de passe sûr, que vous n'utilisez nulle part "
-"ailleurs. <br /><br /> Si vous n'entrez pas de mot de passe, la connexion "
+"ailleurs. <br><br> Si vous n'entrez pas de mot de passe, la connexion "
 "par mot de passe sera désactivée. La connexion par mot de passe est "
 "désactivée par défaut."
 
diff --git a/package/gluon-web-admin/i18n/gluon-web-admin.pot b/package/gluon-web-admin/i18n/gluon-web-admin.pot
index 084182e540894a446e86f21bcf728ea7b2644a38..48c5f2bb78238726f8c1d816af89a4a6c66d221a 100644
--- a/package/gluon-web-admin/i18n/gluon-web-admin.pot
+++ b/package/gluon-web-admin/i18n/gluon-web-admin.pot
@@ -12,7 +12,7 @@ msgstr ""
 
 msgid ""
 "Alternatively, you can set a password to access your node. Please choose a "
-"secure password you don't use anywhere else.<br /><br />If you set an empty "
+"secure password you don't use anywhere else.<br><br>If you set an empty "
 "password, login via password will be disabled. This is the default."
 msgstr ""
 
diff --git a/package/gluon-web-admin/luasrc/lib/gluon/config-mode/model/admin/remote.lua b/package/gluon-web-admin/luasrc/lib/gluon/config-mode/model/admin/remote.lua
index 5d614acf95afb35c7e5846f9c638e0c5e56ed1b6..226969c07c5aa384c403a287f3d22cd6dbdf9b62 100644
--- a/package/gluon-web-admin/luasrc/lib/gluon/config-mode/model/admin/remote.lua
+++ b/package/gluon-web-admin/luasrc/lib/gluon/config-mode/model/admin/remote.lua
@@ -51,7 +51,7 @@ end
 
 local f_password = Form(translate("Password"), translate(
 	"Alternatively, you can set a password to access your node. Please choose a "
-	.. "secure password you don't use anywhere else.<br /><br />If you set an empty "
+	.. "secure password you don't use anywhere else.<br><br>If you set an empty "
 	.. "password, login via password will be disabled. This is the default."
 	), 'password'
 )
diff --git a/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/config-mode/view/mesh-vpn-fastd.html b/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/config-mode/view/mesh-vpn-fastd.html
index 5bb5f069d450b74debba322adf77edefecea18a2..e0ef55dd4909c8062672df30edc341b2ae1b19b3 100644
--- a/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/config-mode/view/mesh-vpn-fastd.html
+++ b/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/config-mode/view/mesh-vpn-fastd.html
@@ -1,34 +1,34 @@
 <div class="gluon-value">
   <div class="gluon-value-title">
-    <input data-update="change" type="radio" value="security"<%= attr("id", id..'.1') .. attr("name", id) .. attr("checked", ((self:cfgvalue() or self.default) == "security") and "checked") %> />
+    <input data-update="change" type="radio" value="security"<%= attr("id", id..'.1') .. attr("name", id) .. attr("checked", ((self:cfgvalue() or self.default) == "security") and "checked") %>>
     <label<%= attr("for", id..'.1')%>></label>
   </div>
   <div class="gluon-value-field-long">
     <label<%= attr("for", id..'.1') %> class="gluon-value-title"><%:Security mode%></label>
-    <br />
+    <br>
     <%| translate(
         'In security mode, the mesh VPN uses an encrypted tunnel to connect to the VPN servers. ' ..
         'The encryption ensures that it is impossible for your internet access provider to see what ' ..
         'data is exchanged over your node.'
     ) %>
-    <br />
+    <br>
   </div>
   <div class="gluon-value-field-long-after"></div>
 </div>
 
 <div class="gluon-value gluon-value-last">
   <div class="gluon-value-title">
-    <input data-update="change" type="radio" value="performance"<%= attr("id", id..'.2') .. attr("name", id) .. attr("checked", ((self:cfgvalue() or self.default) == "performance") and "checked") %> />
+    <input data-update="change" type="radio" value="performance"<%= attr("id", id..'.2') .. attr("name", id) .. attr("checked", ((self:cfgvalue() or self.default) == "performance") and "checked") %>>
     <label<%= attr("for", id..'.2')%>></label>
   </div>
   <div class="gluon-value-field-long">
     <label<%= attr("for", id..'.2') %> class="gluon-value-title"><%:Performance mode%></label>
-    <br />
+    <br>
     <%| translate(
         'In performance mode, no encryption is used. This usually allows for higher throughput, but the data exchanged over your node is not ' ..
         'protected against eavesdropping.'
     ) %>
-    <br />
+    <br>
   </div>
   <div class="gluon-value-field-long-after"></div>
 </div>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/dynlist.html b/package/gluon-web-model/files/lib/gluon/web/view/model/dynlist.html
index b0cd9d0ab2a42d042a45311c51988873c5f2d625..bbc65734fc64c624cbcfd4d2ea7db5a0b3644cde 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/dynlist.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/dynlist.html
@@ -15,6 +15,6 @@
 		attr("name", id) ..
 		attr("size", self.size) ..
 		attr("placeholder", self.placeholder)
-	%> /><br />
+	%>><br>
 <% end %>
 </div>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/form.html b/package/gluon-web-model/files/lib/gluon/web/view/model/form.html
index d222dde2c9c07bd96d5dbdac50ac83a2862fe9a5..6b35fe89a39aa16a2b2521f5b4887151d035a270 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/form.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/form.html
@@ -1,5 +1,5 @@
 <form method="post" enctype="multipart/form-data" action="<%|url(request)%>" data-update="reset">
-	<input type="hidden" name="<%=id%>" value="1" />
+	<input type="hidden" name="<%=id%>" value="1">
 
 	<div class="gluon-form" id="form-<%=id%>">
 		<% if self.title and #self.title > 0 then %><h2 name="content"><%|self.title%></h2><% end %>
@@ -16,12 +16,12 @@
 	<%- if self.submit ~= false then %>
 		<input class="gluon-button gluon-button-submit" type="submit" value="
 			<%- if not self.submit then -%><%-:Save-%><%-else-%><%|self.submit%><%end-%>
-		" />
+		">
 	<% end %>
 	<%- if self.reset ~= false then %>
 		<input class="gluon-button gluon-button-reset" type="reset" value="
 			<%- if not self.reset then -%><%-:Reset-%><%-else-%><%|self.reset%><%end-%>
-		" />
+		">
 	<% end %>
 	</div>
 </form>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/fvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/fvalue.html
index 5662df99d275294372ed89b06b7cd42201d1e731..a244bb024b54fc3590b31e4ff557f92f54133f2c 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/fvalue.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/fvalue.html
@@ -1,5 +1,5 @@
 <input data-update="click change" type="checkbox" value="1"<%=
 	attr("id", id) .. attr("name", id) ..
 	attr("checked", self:cfgvalue() and "checked")
-%> />
+%>>
 <label<%= attr("for", id)%>></label>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/lvalue.html b/package/gluon-web-model/files/lib/gluon/web/view/model/lvalue.html
index e63d33eeab8bd19e8627a0d6649411ee2e7c140f..b011090479f7cee1be51d1243c41fd140bd2f21f 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/lvalue.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/lvalue.html
@@ -1,5 +1,5 @@
 <%
-	local br = self.orientation == "horizontal" and '&#160;&#160;&#160;' or '<br />'
+	local br = self.orientation == "horizontal" and '&#160;&#160;&#160;' or '<br>'
 	local entries = self:entries()
 %>
 
@@ -35,7 +35,7 @@
 					attr("name", id) ..
 					attr("value", entry.key) ..
 					attr("checked", (self:cfgvalue() == entry.key) and "checked")
-				%> />
+				%>>
 				<label<%= attr("for", id.."."..entry.key)%>></label>
 				<%|entry.value%>
 			</label>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/value.html b/package/gluon-web-model/files/lib/gluon/web/view/model/value.html
index fc8b8de6ba50147ef0022cc32518393f01e91093..250c8ce001761ebf9f3016735f93fedc500df492 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/value.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/value.html
@@ -8,4 +8,4 @@
 	attr("maxlength", self.maxlength) ..
 	attr("data-type", self.datatype) ..
 	attr("data-optional", self.datatype and self.optional)
-%> />
+%>>
diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/valuewrapper.html b/package/gluon-web-model/files/lib/gluon/web/view/model/valuewrapper.html
index 1a1a63d1576a6320583363bc7bad9a19ee6e090b..b4a331e593a420b94a01aaac90c66d13961a2408 100644
--- a/package/gluon-web-model/files/lib/gluon/web/view/model/valuewrapper.html
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/valuewrapper.html
@@ -7,7 +7,7 @@
 	<%- end -%>
 	<% if self.subtemplate then include(self.subtemplate) end %>
 	<% if self.description and #self.description > 0 then -%>
-		<br />
+		<br>
 		<div class="gluon-value-description">
 			<%=self.description%>
 		</div>
diff --git a/package/gluon-web-osm/files/lib/gluon/web/view/model/osm/map.html b/package/gluon-web-osm/files/lib/gluon/web/view/model/osm/map.html
index a2822cd4420bc691c43fe9851152ef23edbdee7f..2caa3f379161d18a03c16cdf48341b57a9cd4581 100644
--- a/package/gluon-web-osm/files/lib/gluon/web/view/model/osm/map.html
+++ b/package/gluon-web-osm/files/lib/gluon/web/view/model/osm/map.html
@@ -1,7 +1,6 @@
 <div id="<%=id%>" class="gluon-osm-map" style="display: none"></div>
 <script type="text/javascript" src="/static/gluon-web-osm.js"></script>
 <script type="text/javascript">
-	//<![CDATA[
 	(function() {
 		var elMap = document.getElementById(<%=json(id)%>);
 		var wrapper = elMap.parentNode;
@@ -42,5 +41,4 @@
 			});
 		});
 	})();
-	//]]>
 </script>
diff --git a/package/gluon-web-wifi-config/i18n/de.po b/package/gluon-web-wifi-config/i18n/de.po
index d2ddeb8b1cb9f95f1b19fefdd2870b4af01107f1..f0883ad6f4d47896db69fd38cc7dc9f3e8f980da 100644
--- a/package/gluon-web-wifi-config/i18n/de.po
+++ b/package/gluon-web-wifi-config/i18n/de.po
@@ -56,15 +56,15 @@ msgstr "WLAN"
 msgid ""
 "You can enable or disable your node's client and mesh network SSIDs here. "
 "Please don't disable the mesh network without a good reason, so other nodes "
-"can mesh with yours.<br /><br />It is also possible to configure the WLAN "
+"can mesh with yours.<br><br>It is also possible to configure the WLAN "
 "adapters transmission power here. Please note that the transmission power "
 "values include the antenna gain where available, but there are many devices "
 "for which the gain is unavailable or inaccurate."
 msgstr ""
 "In diesem Abschnitt hast du die Möglichkeit, die SSIDs des Client- und des "
 "Mesh-Netzes zu aktivieren bzw. deaktivieren. Bitte lass die SSID des Mesh-"
-"Netzes aktiviert, damit sich andere Knoten mit deinem verbinden können.<br /"
-"><br />Außerdem kann hier die Sendeleistung des WLAN-Adapters konfiguriert "
+"Netzes aktiviert, damit sich andere Knoten mit deinem verbinden können.<br"
+"><br>Außerdem kann hier die Sendeleistung des WLAN-Adapters konfiguriert "
 "werden. Wenn möglich, ist in den Werten der Sendeleistung der Antennengewinn "
 "enthalten; diese Werte sind allerdings für viele Geräte nicht verfügbar oder "
 "fehlerhaft."
diff --git a/package/gluon-web-wifi-config/i18n/fr.po b/package/gluon-web-wifi-config/i18n/fr.po
index faf6d47d8279cefa14b4b822814abfec1ac6fc4f..eb09694f47c81187fbbf3afb77a25d3b3fa3305e 100644
--- a/package/gluon-web-wifi-config/i18n/fr.po
+++ b/package/gluon-web-wifi-config/i18n/fr.po
@@ -51,14 +51,14 @@ msgstr "Wi-Fi"
 msgid ""
 "You can enable or disable your node's client and mesh network SSIDs here. "
 "Please don't disable the mesh network without a good reason, so other nodes "
-"can mesh with yours.<br /><br />It is also possible to configure the WLAN "
+"can mesh with yours.<br><br>It is also possible to configure the WLAN "
 "adapters transmission power here. Please note that the transmission power "
 "values include the antenna gain where available, but there are many devices "
 "for which the gain is unavailable or inaccurate."
 msgstr ""
 "Ici vous pouvez activer ou désactiver la SSID du client ou MESH. Pensez a "
 "laisser la SSID du MESH activée pour que les autres nœuds puissent se "
-"connecter. <br /><br />Ici vous pouvez aussi configurer la puissance "
+"connecter. <br><br>Ici vous pouvez aussi configurer la puissance "
 "d'émmission se votre Wi-Fi. Prenez note que les valeurs fournies pour la "
 "puissance de transmission prennent en compte les gains fournis par "
 "l'antenne, et que ces valeurs ne sont pas toujours disponibles ou exactes."
diff --git a/package/gluon-web-wifi-config/i18n/gluon-web-wifi-config.pot b/package/gluon-web-wifi-config/i18n/gluon-web-wifi-config.pot
index 19536e30512ff9865bfa5fed781ca722896c1da6..2af9b5f3a5787b13fdfe8046dcc2b26fb5c52ee0 100644
--- a/package/gluon-web-wifi-config/i18n/gluon-web-wifi-config.pot
+++ b/package/gluon-web-wifi-config/i18n/gluon-web-wifi-config.pot
@@ -42,7 +42,7 @@ msgstr ""
 msgid ""
 "You can enable or disable your node's client and mesh network SSIDs here. "
 "Please don't disable the mesh network without a good reason, so other nodes "
-"can mesh with yours.<br /><br />It is also possible to configure the WLAN "
+"can mesh with yours.<br><br>It is also possible to configure the WLAN "
 "adapters transmission power here. Please note that the transmission power "
 "values include the antenna gain where available, but there are many devices "
 "for which the gain is unavailable or inaccurate."
diff --git a/package/gluon-web-wifi-config/luasrc/lib/gluon/config-mode/model/admin/wifi-config.lua b/package/gluon-web-wifi-config/luasrc/lib/gluon/config-mode/model/admin/wifi-config.lua
index 13ac6434628f2faa6aee6196a6fc58063230a3ca..49009eaf4621c1913b3a25f57febdacaa4fc255d 100644
--- a/package/gluon-web-wifi-config/luasrc/lib/gluon/config-mode/model/admin/wifi-config.lua
+++ b/package/gluon-web-wifi-config/luasrc/lib/gluon/config-mode/model/admin/wifi-config.lua
@@ -29,7 +29,7 @@ local f = Form(translate("WLAN"))
 f:section(Section, nil, translate(
 	"You can enable or disable your node's client and mesh network "
 	.. "SSIDs here. Please don't disable the mesh network without "
-	.. "a good reason, so other nodes can mesh with yours.<br /><br />"
+	.. "a good reason, so other nodes can mesh with yours.<br><br>"
 	.. "It is also possible to configure the WLAN adapters transmission power "
 	.. "here. Please note that the transmission power values include the antenna gain "
 	.. "where available, but there are many devices for which the gain is unavailable or inaccurate."
diff --git a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/http.lua b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/http.lua
index c77d4ace01ea44face7f07b6e11340b29c80ae40..eae38bff30f8d4a3ac23d1923db77812671f2e56 100644
--- a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/http.lua
+++ b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/http.lua
@@ -78,13 +78,6 @@ end
 function Http:prepare_content(mime)
 	if self.headers["content-type"] then return end
 
-	if mime == "application/xhtml+xml" then
-		local accept = self:getenv("HTTP_ACCEPT")
-		if not accept or not accept:find("application/xhtml+xml", nil, true) then
-			mime = "text/html; charset=UTF-8"
-		end
-		self:header("Vary", "Accept")
-	end
 	self:header("Content-Type", mime)
 end