diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 3325bc9165e4f6f7bd298b1de5ff23dfd4e4359a..2b496c232463de98d2f7c59b5ae86200e20b2454 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -21,15 +21,7 @@
 		<?php foreach ($_['jsfiles'] as $jsfile): ?>
 			<script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
 		<?php endforeach; ?>
-		<?php foreach ($_['headers'] as $header): ?>
-			<?php
-				print_unescaped('<'.$header['tag'].' ');
-				foreach ($header['attributes'] as $name => $value) {
-					print_unescaped("$name='$value' ");
-				};
-				print_unescaped('/>');
-			?>
-		<?php endforeach; ?>
+		<?php print_unescaped($_['headers']); ?>
 	</head>
 	<body id="body-public">
 		<noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 0ad2ea4d8073b69467d34eda63f60e8d137e62d0..763af4dc1d2d6248c85ecefea598988d6df611ed 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -22,16 +22,7 @@
 		<?php foreach($_['jsfiles'] as $jsfile): ?>
 			<script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
 		<?php endforeach; ?>
-
-		<?php foreach($_['headers'] as $header): ?>
-			<?php
-				print_unescaped('<'.$header['tag'].' ');
-				foreach($header['attributes'] as $name=>$value) {
-					print_unescaped("$name='$value' ");
-				};
-				print_unescaped('/>');
-			?>
-		<?php endforeach; ?>
+		<?php print_unescaped($_['headers']); ?>
 	</head>
 	<body id="<?php p($_['bodyid']);?>">
 		<noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index 6164d16ac177ac22852e1a7133525dd7c5f1f88f..9f94344b21b9c2f6ed114f6116dc7a1d9b66adb2 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -29,15 +29,7 @@
 		<?php foreach($_['jsfiles'] as $jsfile): ?>
 			<script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script>
 		<?php endforeach; ?>
-		<?php foreach($_['headers'] as $header): ?>
-			<?php
-				print_unescaped('<'.$header['tag'].' ');
-				foreach($header['attributes'] as $name=>$value) {
-					print_unescaped("$name='$value' ");
-				};
-				print_unescaped('/>');
-			?>
-		<?php endforeach; ?>
+		<?php print_unescaped($_['headers']); ?>
 	</head>
 	<body id="<?php p($_['bodyid']);?>">
 	<noscript><div id="nojavascript"><div><?php print_unescaped($l->t('This application requires JavaScript for correct operation. Please <a href="http://enable-javascript.com/" target="_blank">enable JavaScript</a> and reload the page.')); ?></div></div></noscript>
diff --git a/lib/private/template.php b/lib/private/template.php
index fe0cde53ff137958043290287f1886f4eb707fd2..9ad9d5466db942ea869e1f0d29a214875c52ca51 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -158,10 +158,15 @@ class OC_Template extends \OC\Template\Base {
 	 * Add a custom element to the header
 	 * @param string $tag tag name of the element
 	 * @param array $attributes array of attributes for the element
-	 * @param string $text the text content for the element
+	 * @param string $text the text content for the element. If $text is null then the
+	 * element will be written as empty element. So use "" to get a closing tag.
 	 */
-	public function addHeader( $tag, $attributes, $text='') {
-		$this->headers[]=array('tag'=>$tag,'attributes'=>$attributes, 'text'=>$text);
+	public function addHeader($tag, $attributes, $text=null) {
+		$this->headers[]= array(
+			'tag' => $tag,
+			'attributes' => $attributes,
+			'text' => $text
+		);
 	}
 
 	/**
@@ -178,12 +183,22 @@ class OC_Template extends \OC\Template\Base {
 			$page = new OC_TemplateLayout($this->renderas, $this->app);
 
 			// Add custom headers
-			$page->assign('headers', $this->headers, false);
+			$headers = '';
 			foreach(OC_Util::$headers as $header) {
-				$page->append('headers', $header);
+				$headers .= '<'.OC_Util::sanitizeHTML($header['tag']);
+				foreach($header['attributes'] as $name=>$value) {
+					$headers .= ' "'.OC_Util::sanitizeHTML($name).'"="'.OC_Util::sanitizeHTML($value).'"';
+				}
+				if ($header['text'] !== null) {
+					$headers .= '>'.OC_Util::sanitizeHTML($header['text']).'</'.OC_Util::sanitizeHTML($header['tag']).'>';
+				} else {
+					$headers .= '/>';
+				}
 			}
 
-			$page->assign( "content", $data, false );
+			$page->assign('headers', $headers, false);
+
+			$page->assign('content', $data, false );
 			return $page->fetchPage();
 		}
 		else{
diff --git a/lib/private/util.php b/lib/private/util.php
index 9b8a7a5bc40a38aac1d6d4530ccb7357c87bf6ae..de4bef4cb8a05a60a52a1113f120dbccbe6a4d1b 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -388,13 +388,13 @@ class OC_Util {
 
 	/**
 	 * Add a custom element to the header
-	 *
+	 * If $text is null then the element will be written as empty element.
+	 * So use "" to get a closing tag.
 	 * @param string $tag tag name of the element
 	 * @param array $attributes array of attributes for the element
 	 * @param string $text the text content for the element
-	 * @return void
 	 */
-	public static function addHeader($tag, $attributes, $text = '') {
+	public static function addHeader($tag, $attributes, $text=null) {
 		self::$headers[] = array(
 			'tag' => $tag,
 			'attributes' => $attributes,
diff --git a/lib/public/util.php b/lib/public/util.php
index 22ded1d0fc5f9f592834fe212cd09240b7f935a2..a87d26a40042e4b1d7ac78869d788e9c236bec2e 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -147,12 +147,14 @@ class Util {
 
 	/**
 	 * Add a custom element to the header
+	 * If $text is null then the element will be written as empty element.
+	 * So use "" to get a closing tag.
 	 * @param string $tag tag name of the element
 	 * @param array $attributes array of attributes for the element
 	 * @param string $text the text content for the element
 	 */
-	public static function addHeader( $tag, $attributes, $text='') {
-		\OC_Util::addHeader( $tag, $attributes, $text );
+	public static function addHeader($tag, $attributes, $text=null) {
+		\OC_Util::addHeader($tag, $attributes, $text);
 	}
 
 	/**