diff --git a/spec/stdlib/template/builder-spec.coffee b/spec/stdlib/template/builder-spec.coffee
index 16ae0e4cd..5e182cdb0 100644
--- a/spec/stdlib/template/builder-spec.coffee
+++ b/spec/stdlib/template/builder-spec.coffee
@@ -30,6 +30,10 @@ describe "Builder", ->
builder.tag 'div', 22
expect(builder.toHtml()).toBe "
22
"
+ it "HTML escapes tag text", ->
+ builder.tag('div', "
")
+ expect(builder.toHtml()).toBe "<br/>
"
+
it "can generate tags with attributes", ->
builder.tag 'div', id: 'foo', class: 'bar'
fragment = builder.toFragment()
diff --git a/src/stdlib/template/text.coffee b/src/stdlib/template/text.coffee
index 5f20e1d2e..de8b25e3a 100644
--- a/src/stdlib/template/text.coffee
+++ b/src/stdlib/template/text.coffee
@@ -2,5 +2,11 @@ module.exports =
class Text
constructor: (@string) ->
- toHtml: -> @string
+ toHtml: ->
+ @string
+ .replace(/&/g, '&')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''')
+ .replace(//g, '>')