diff --git a/plugin/markdown/markdown.js b/plugin/markdown/markdown.js
index 14433e6608db0d71aa40970f8304e4fdb5559dbb..f4035e2e956dc74a133372ffdcdd882cfc00c98e 100755
--- a/plugin/markdown/markdown.js
+++ b/plugin/markdown/markdown.js
@@ -31,6 +31,8 @@
 		DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
 		DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
 
+	var SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';
+
 
 	/**
 	 * Retrieves the markdown contents of a slide section
@@ -42,8 +44,10 @@
 
 		// strip leading whitespace so it isn't evaluated as code
 		var text = ( template || section ).textContent;
-		// restore script end tag
-		text = text.replace(/__SCRIPT_END__/g, '</script>');
+
+		// restore script end tags
+		text = text.replace( new RegExp( SCRIPT_END_PLACEHOLDER, 'g' ), '</script>' );
+
 		var leadingWs = text.match( /^\n?(\s*)/ )[1].length,
 			leadingTabs = text.match( /^\n?(\t*)/ )[1].length;
 
@@ -115,8 +119,11 @@
 		if( notesMatch.length === 2 ) {
 			content = notesMatch[0] + '<aside class="notes" data-markdown>' + notesMatch[1].trim() + '</aside>';
 		}
-		//handle script end tag bug
-		content = content.replace(/<\/script>/g, '__SCRIPT_END__');
+
+		// prevent script end tags in the content from interfering
+		// with parsing
+		content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER );
+
 		return '<script type="text/template">' + content + '</script>';
 
 	}