diff --git a/package/gluon-web-admin/files/lib/gluon/web/view/admin/info.html b/package/gluon-web-admin/files/lib/gluon/web/view/admin/info.html
index 6f593378d4e1aac5e590daac1a2217003b36eaf6..889b0ca3e5bc19513231628d8de73244031d8b3b 100644
--- a/package/gluon-web-admin/files/lib/gluon/web/view/admin/info.html
+++ b/package/gluon-web-admin/files/lib/gluon/web/view/admin/info.html
@@ -34,6 +34,6 @@
 <h2><%:Information%></h2>
 <% for _, v in ipairs(values) do %>
 <div class="gluon-value">
-	<div class="gluon-value-title"><%=v[1]%></div><div class="gluon-value-field-text"><%=pcdata(v[2] or 'n/a')%></div>
+	<div class="gluon-value-title"><%|v[1]%></div><div class="gluon-value-field-text"><%|v[2] or 'n/a'%></div>
 </div>
 <% end %>
diff --git a/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade.html b/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade.html
index ecafa33f361ea7dd80867a05dbf829504a0b5ee3..456b9e5c7a0c774c1f25ad2ec99f78d6d1842405 100644
--- a/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade.html
+++ b/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade.html
@@ -13,7 +13,7 @@ $Id$
 -%>
 <h2><%:Upgrade firmware%></h2>
 
-<form method="post" enctype="multipart/form-data" action="<%=url(request)%>">
+<form method="post" enctype="multipart/form-data" action="<%|url(request)%>">
 	<p>
 		<%:You can manually upgrade your firmware here.%>
 	</p>
diff --git a/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade_confirm.html b/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade_confirm.html
index 6659d3638d4b1931ed7b3867e090b945562c17f2..80ef7ac72d8603e3eaa7f2aa7fc6a54bb92cfe24 100644
--- a/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade_confirm.html
+++ b/package/gluon-web-admin/files/lib/gluon/web/view/admin/upgrade_confirm.html
@@ -46,13 +46,13 @@ You may obtain a copy of the License at
   </ul>
 </p>
 <div class="gluon-page-actions">
-  <form method="post" enctype="multipart/form-data" action="<%=url(request)%>" style="display:inline">
+  <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 type="hidden" name="token" value="<%=token%>" />
     <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">
+  <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 type="hidden" name="token" value="<%=token%>" />
diff --git a/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/web/view/model/mesh-vpn-fastd.html b/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/web/view/model/mesh-vpn-fastd.html
index 50eff069749cf6abee530789e4560068bfe31e05..ed527c8ec55e5a0c578e8f939156fd56b33263b7 100644
--- a/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/web/view/model/mesh-vpn-fastd.html
+++ b/package/gluon-web-mesh-vpn-fastd/files/lib/gluon/web/view/model/mesh-vpn-fastd.html
@@ -6,7 +6,7 @@
   <div class="gluon-value-field-long">
     <label<%= attr("for", id..'.1') %> class="gluon-value-title"><%:Security mode%></label>
     <br />
-    <%= translate(
+    <%| 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.'
@@ -24,7 +24,7 @@
   <div class="gluon-value-field-long">
     <label<%= attr("for", id..'.2') %> class="gluon-value-title"><%:Performance mode%></label>
     <br />
-    <%= translate(
+    <%| 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.'
     ) %>
diff --git a/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html b/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html
index c1915f48df35b03c6ee04949d316392b86fb255a..b7f60d09f2162a551b5ed91a2054084b810f509a 100644
--- a/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html
+++ b/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html
@@ -52,7 +52,7 @@ You may obtain a copy of the License at
 					local active = (v == name)
 			%>
 			<li class="tabmenu-item-<%=v%><% if active then %> active<% end %>">
-				<a href="<%=url(append(prefix, v))%>"><%=pcdata(title(child))%></a>
+				<a href="<%|url(append(prefix, v))%>"><%|title(child)%></a>
 			</li>
 			<%
 				end
@@ -74,17 +74,17 @@ You may obtain a copy of the License at
 <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
 	<head>
 		<meta charset="UTF-8" />
-		<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
-		<title><%=pcdata( hostname .. ((rnode and rnode.title) and ' - ' .. title(rnode) or '')) %></title>
+		<link rel="stylesheet" type="text/css" media="screen" href="<%|media%>/cascade.css" />
+		<title><%| hostname .. ((rnode and rnode.title) and ' - ' .. title(rnode) or '') %></title>
 	</head>
 	<body>
 
 	<div id="menubar">
 		<div class="hostinfo">
-			<a href="<%=url({})%>">
-				<%=pcdata(hostname)%>
+			<a href="<%|url({})%>">
+				<%|hostname%>
 				<% if release then %>
-				/ <%=pcdata(release)%>
+				/ <%|release%>
 				<% end %>
 			</a>
 		</div>
@@ -92,7 +92,7 @@ You may obtain a copy of the License at
 		<% if #categories > 1 and not hidenav then %>
 			<ul id="topmenu">
 				<% for i, r in ipairs(categories) do %>
-					<li><a class="topcat<% if request[1] == r then %> active<%end%>" href="<%=url({r})%>"><%=pcdata(title(root.nodes[r]))%></a></li>
+					<li><a class="topcat<% if request[1] == r then %> active<%end%>" href="<%|url({r})%>"><%|title(root.nodes[r])%></a></li>
 				<% end %>
 			</ul>
 		<% end %>
diff --git a/package/gluon-web/files/lib/gluon/web/view/error404.html b/package/gluon-web/files/lib/gluon/web/view/error404.html
index d1dce5891a8f91626b81ad414edc3d781e435707..b2db7d0f15d6d883e97910126b3f65328254f9d6 100644
--- a/package/gluon-web/files/lib/gluon/web/view/error404.html
+++ b/package/gluon-web/files/lib/gluon/web/view/error404.html
@@ -6,4 +6,4 @@
 
 <h2 name="content">404 <%:Not Found%></h2>
 <p><%:Sorry, the object you requested was not found.%></p>
-<tt><%=pcdata(message)%></tt>
+<tt><%|message%></tt>
diff --git a/package/gluon-web/files/lib/gluon/web/view/error500.html b/package/gluon-web/files/lib/gluon/web/view/error500.html
index 6c1862861b7867ac7c40f74f4a56c5b19abb38a9..8f1532bebdd8671aede2e9e9c93218fee0315fdd 100644
--- a/package/gluon-web/files/lib/gluon/web/view/error500.html
+++ b/package/gluon-web/files/lib/gluon/web/view/error500.html
@@ -6,4 +6,4 @@
 
 <h2 name="content">500 <%:Internal Server Error%></h2>
 <p><%:Sorry, the server encountered an unexpected error.%></p>
-<pre class="error500"><%=pcdata(message)%></pre>
+<pre class="error500"><%|message%></pre>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/dynlist.html b/package/gluon-web/files/lib/gluon/web/view/model/dynlist.html
index 56edefe18fa9bd84afe12aa20b50237ac0a6ebaf..512a194b533770e7ea222ea4c0df16427ab01343 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/dynlist.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/dynlist.html
@@ -10,7 +10,7 @@
 <%
 	for i, val in ipairs(self:cfgvalue()) do
 %>
-	<input class="gluon-input-text" value="<%=pcdata(val)%>" data-update="change" type="text"<%=
+	<input class="gluon-input-text" value="<%|val%>" data-update="change" type="text"<%=
 		attr("id", id .. "." .. i) ..
 		attr("name", id) ..
 		attr("size", self.size) ..
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/form.html b/package/gluon-web/files/lib/gluon/web/view/model/form.html
index 6fcb0d48113923babebc617c9d326d1c80a56f17..1b642b0dcba166e35d66c1d9c2a61905aad50c45 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/form.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/form.html
@@ -1,27 +1,27 @@
-<form method="post" enctype="multipart/form-data" action="<%=url(request)%>">
+<form method="post" enctype="multipart/form-data" action="<%|url(request)%>">
 	<input type="hidden" name="token" value="<%=token%>" />
 	<input type="hidden" name="<%=id%>" value="1" />
 
 	<div class="gluon-map" id="gluon-<%=self.config%>">
-		<% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %>
+		<% if self.title and #self.title > 0 then %><h2 name="content"><%|self.title%></h2><% end %>
 		<% if self.description and #self.description > 0 then %><div class="gluon-map-descr"><%=self.description%></div><% end %>
 		<% self:render_children(renderer) %>
 	</div>
 <%- if self.message then %>
-	<div><%=self.message%></div>
+	<div><%|self.message%></div>
 <%- end %>
 <%- if self.errmessage then %>
-	<div class="error"><%=self.errmessage%></div>
+	<div class="error"><%|self.errmessage%></div>
 <%- end %>
 	<div class="gluon-page-actions">
 	<%- if self.submit ~= false then %>
 		<input class="gluon-button gluon-button-submit" type="submit" value="
-			<%- if not self.submit then -%><%-:Save-%><%-else-%><%=pcdata(self.submit)%><%end-%>
+			<%- 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-%><%=pcdata(self.reset)%><%end-%>
+			<%- if not self.reset then -%><%-:Reset-%><%-else-%><%|self.reset%><%end-%>
 		" />
 	<% end %>
 	</div>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/lvalue.html b/package/gluon-web/files/lib/gluon/web/view/model/lvalue.html
index 85ce596ad1470dc371ad2306323101b398708dbe..47a2ffd12e69fb1da405222cb9ca09165a3bbdf6 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/lvalue.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/lvalue.html
@@ -18,7 +18,7 @@
 				attr("data-index", i) ..
 				attr("data-depends", self:deplist(entry.deps)) ..
 				attr("selected", (self:cfgvalue() == entry.key) and "selected")
-			%>><%=pcdata(entry.value)%></option>
+			%>><%|entry.value%></option>
 		<%- end %>
 	</select>
 <% elseif self.widget == "radio" then %>
@@ -35,7 +35,7 @@
 					attr("checked", (self:cfgvalue() == entry.key) and "checked")
 				%> />
 				<label<%= attr("for", id.."."..entry.key)%>></label>
-				<%=pcdata(entry.value)%>
+				<%|entry.value%>
 			</label>
 			<% if i ~= #entries then write(br) end %>
 		<% end %>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/section.html b/package/gluon-web/files/lib/gluon/web/view/model/section.html
index 45ee027224da6ef0586b151689103356f0738770..de4d7a5c112104e42f117c8a92de6d7414a697fb 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/section.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/section.html
@@ -1,6 +1,6 @@
 <fieldset class="gluon-section">
 	<% if self.title and #self.title > 0 then -%>
-		<legend><%=self.title%></legend>
+		<legend><%|self.title%></legend>
 	<%- end %>
 	<% if self.description and #self.description > 0 then -%>
 		<div class="gluon-section-descr"><%=self.description%></div>
@@ -18,7 +18,7 @@
 						<%- elseif e == "missing" then -%>
 							<%:One or more required fields have no value!%>
 						<%- else -%>
-							<%=pcdata(e)%>
+							<%|e%>
 						<%- end -%>
 					</li>
 				<%- end %></ul>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/tvalue.html b/package/gluon-web/files/lib/gluon/web/view/model/tvalue.html
index bac1d829af98a679a7a18fe317e9b09701654143..cfc5e4b05cb108695d4f20a8e7d1407700199d34 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/tvalue.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/tvalue.html
@@ -1,3 +1,3 @@
 <textarea class="gluon-input-textarea" <% if not self.size then %> style="width: 100%"<% else %> cols="<%=self.size%>"<% end %> data-update="change"<%= attr("name", id) .. attr("id", id) .. attr("rows", self.rows) .. attr("wrap", self.wrap) %>>
-<%-=pcdata(self:cfgvalue())-%>
+<%-|self:cfgvalue()-%>
 </textarea>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/valuewrapper.html b/package/gluon-web/files/lib/gluon/web/view/model/valuewrapper.html
index 35926cae9a1e3f02cc821ab48d41dee53ef39934..1a1a63d1576a6320583363bc7bad9a19ee6e090b 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/valuewrapper.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/valuewrapper.html
@@ -1,7 +1,7 @@
 <div class="gluon-value<% if self.error then %> gluon-value-error<% end %>" id="value-<%=id%>" data-index="<%=self.index%>"<%= attr("data-depends", self:deplist()) %>>
 	<%- if self.title and #self.title > 0 then -%>
 		<label class="gluon-value-title"<%= attr("for", id) %>>
-			<%-=self.title-%>
+			<%-|self.title-%>
 		</label>
 		<div class="gluon-value-field">
 	<%- end -%>
diff --git a/package/gluon-web/files/lib/gluon/web/view/model/wrapper.html b/package/gluon-web/files/lib/gluon/web/view/model/wrapper.html
index 5b45aa7ddb289d3de1cd68d6de4ab1ab073aef90..2d0cfdd508af3105899eb9fc7d6d37a706c61b4f 100644
--- a/package/gluon-web/files/lib/gluon/web/view/model/wrapper.html
+++ b/package/gluon-web/files/lib/gluon/web/view/model/wrapper.html
@@ -3,4 +3,4 @@
 		map:render(renderer)
 	end
 %>
-<script type="text/javascript" src="<%=resource%>/gluon-web.js"></script>
+<script type="text/javascript" src="<%|resource%>/gluon-web.js"></script>