diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php
index 3a974b00c2c087f6b3411e38fd1dff05cab0865f..29c2ca6696d6156fa66180606f7fade3c4cb25cc 100644
--- a/core/templates/layout.base.php
+++ b/core/templates/layout.base.php
@@ -15,7 +15,10 @@
 		<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
 		<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('', 'favicon-mask.svg')); ?>" color="#1d2d44">
 		<?php foreach ($_['cssfiles'] as $cssfile): ?>
-			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
+		<?php endforeach; ?>
+		<?php foreach($_['printcssfiles'] as $cssfile): ?>
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
 		<?php endforeach; ?>
 		<?php foreach ($_['jsfiles'] as $jsfile): ?>
 			<script src="<?php print_unescaped($jsfile); ?>"></script>
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 7ee282faf0f6a24f6713900bd073110d2c7be8a2..3f9c47f9aa6a53f9d68aff81192cbc160971cedb 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -16,7 +16,10 @@
 		<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
 		<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('', 'favicon-mask.svg')); ?>" color="#1d2d44">
 		<?php foreach($_['cssfiles'] as $cssfile): ?>
-			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
+		<?php endforeach; ?>
+		<?php foreach($_['printcssfiles'] as $cssfile): ?>
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
 		<?php endforeach; ?>
 		<?php foreach($_['jsfiles'] as $jsfile): ?>
 			<script src="<?php print_unescaped($jsfile); ?>"></script>
diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php
index dd4864ea73f0a41ac0053ca612caf981177cb9b2..601af6077f40b408af6ab1cb211e2831d34e6e37 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -23,7 +23,10 @@
 		<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>">
 		<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path($_['appid'], 'favicon-mask.svg')); ?>" color="#1d2d44">
 		<?php foreach($_['cssfiles'] as $cssfile): ?>
-			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
+		<?php endforeach; ?>
+		<?php foreach($_['printcssfiles'] as $cssfile): ?>
+			<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
 		<?php endforeach; ?>
 		<?php foreach($_['jsfiles'] as $jsfile): ?>
 			<script src="<?php print_unescaped($jsfile); ?>"></script>
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index 5afbd4495c4572d3b7f072c2d50ef5234d751e89..a1b75a34213ab4a6b8718f10e4f5ace219d74b52 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -160,7 +160,11 @@ class TemplateLayout extends \OC_Template {
 				$web = $info[1];
 				$file = $info[2];
 
-				$this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+			if (substr($file, -strlen('print.css')) === 'print.css') {
+					$this->append( 'printcssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+				} else {
+					$this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
+				}
 			}
 		}
 	}
@@ -227,10 +231,35 @@ class TemplateLayout extends \OC_Template {
 		}
 
 		$cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
-		$cssHash = self::hashFileNames($cssFiles);
 
-		if (!file_exists("$assetDir/assets/$cssHash.css")) {
-			$cssFiles = array_map(function ($item) {
+		// differentiate between screen stylesheets and printer stylesheets
+		$screenCssFiles = array_filter($cssFiles, function($cssFile) {
+			return substr_compare($cssFile[2], 'print.css', -strlen('print.css')) !== 0;
+		});
+		$screenCssAsset = $this->generateCssAsset($screenCssFiles);
+
+		$printCssFiles = array_filter($cssFiles, function($cssFile) {
+			return substr_compare($cssFile[2], 'print.css', -strlen('print.css')) === 0;
+		});
+		$printCssAsset = $this->generateCssAsset($printCssFiles);
+
+		$this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js"));
+		$this->append('cssfiles', $screenCssAsset);
+		$this->append('printcssfiles', $printCssAsset);
+	}
+
+	/**
+	 * generates a single css asset file from an array of css files if at least one of them has changed
+	 * otherwise it just returns the path to the old asset file
+	 * @param $files
+	 * @return string
+	 */
+	private function generateCssAsset($files) {
+		$assetDir = \OC::$server->getConfig()->getSystemValue('assetdirectory', \OC::$SERVERROOT);
+		$hash = self::hashFileNames($files);
+
+		if (!file_exists("$assetDir/assets/$hash.css")) {
+			$files = array_map(function ($item) {
 				$root = $item[0];
 				$file = $item[2];
 				$assetPath = $root . '/' . $file;
@@ -246,16 +275,17 @@ class TemplateLayout extends \OC_Template {
 					$sourceRoot,
 					$sourcePath
 				);
-			}, $cssFiles);
-			$cssCollection = new AssetCollection($cssFiles);
-			$cssCollection->setTargetPath("assets/$cssHash.css");
+			}, $files);
+
+			$cssCollection = new AssetCollection($files);
+			$cssCollection->setTargetPath("assets/$hash.css");
 
 			$writer = new AssetWriter($assetDir);
 			$writer->writeAsset($cssCollection);
+
 		}
 
-		$this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js"));
-		$this->append('cssfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$cssHash.css"));
+		return \OC::$server->getURLGenerator()->linkTo('assets', "$hash.css");
 	}
 
 	/**