diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/warning.html b/package/gluon-web-model/files/lib/gluon/web/view/model/warning.html
new file mode 100644
index 0000000000000000000000000000000000000000..41688b77fab7d3d2d3710e2d89f12ac4840e1617
--- /dev/null
+++ b/package/gluon-web-model/files/lib/gluon/web/view/model/warning.html
@@ -0,0 +1,14 @@
+<%- if self.title or self.content then -%>
+<div class="gluon-warning"<%=
+  attr("id", id) ..
+  attr("data-index", self.index) ..
+  attr("data-depends", self:deplist(self.deps))
+%>>
+  <%- if self.content then -%>
+  <%=self.content%>
+  <%- else -%>
+  <b><%=self.title%></b><br>
+  <%=self.description%>
+  <%- end -%>
+</div>
+<%- end -%>
diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
index 2ec0d71fa648a76f8d289d81224f11c9d04e7a31..88f378c00716ea37d25b400fa9a54ba2dae02cc9 100644
--- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
+++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model/classes.lua
@@ -196,7 +196,6 @@ function Template:__init__(template)
 	self.template = template
 end
 
-
 local AbstractValue = class(Node)
 M.AbstractValue = AbstractValue
 
@@ -411,6 +410,25 @@ function TextValue:__init__(...)
 end
 
 
+local Element = class(Node)
+M.Element = Element
+
+function Element:__init__(template, kv, ...)
+	Node.__init__(self, ...)
+
+	self.default   = nil
+	self.size      = nil
+	self.optional  = false
+
+	self.template  = template
+
+	for key, value in pairs(kv) do
+		self[key] = value
+	end
+
+	self.error = false
+end
+
 local Section = class(Node)
 M.Section = Section
 
@@ -427,6 +445,11 @@ function Section:option(t, ...)
 	return obj
 end
 
+function Section:element(...)
+	local obj  = Element(...)
+	self:append(obj)
+	return obj
+end
 
 local Form = class(Node)
 M.Form = Form