diff --git a/src/compiler/parser/html-parser.js b/src/compiler/parser/html-parser.js
index e317dfa8..522e373b 100644
--- a/src/compiler/parser/html-parser.js
+++ b/src/compiler/parser/html-parser.js
@@ -46,7 +46,7 @@ let IS_REGEX_CAPTURING_BROKEN = false
})
// Special Elements (can contain anything)
-const isPlainTextElement = makeMap('script,style,textarea', true)
+export const isPlainTextElement = makeMap('script,style,textarea', true)
const reCache = {}
const decodingMap = {
diff --git a/src/compiler/parser/index.js b/src/compiler/parser/index.js
index 4e9506ba..c49491b4 100644
--- a/src/compiler/parser/index.js
+++ b/src/compiler/parser/index.js
@@ -252,7 +252,7 @@ export function parse (
}
const children = currentParent.children
text = inPre || text.trim()
- ? decodeHTMLCached(text)
+ ? isTextTag(currentParent) ? text : decodeHTMLCached(text)
// only preserve whitespace if its not right after a starting tag
: preserveWhitespace && children.length ? ' ' : ''
if (text) {
@@ -544,6 +544,11 @@ function makeAttrsMap (attrs: Array