diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php
index 78be4eeed5e25cd6d6211fd955b050985eaf0c98..f09580f94d7286e3e39f35d9caa6c87f5e854b99 100644
--- a/lib/SimpleSAML/Utilities.php
+++ b/lib/SimpleSAML/Utilities.php
@@ -833,7 +833,7 @@ class SimpleSAML_Utilities {
 			return array();
 		}
 
-		$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+		$languages = explode(',', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
 
 		$ret = array();
 
diff --git a/lib/SimpleSAML/XHTML/Template.php b/lib/SimpleSAML/XHTML/Template.php
index e9da55d21d55b8f0f1706638ec348ec78f97c26f..49582bbecb4005081f66693518be8907d38be9de 100644
--- a/lib/SimpleSAML/XHTML/Template.php
+++ b/lib/SimpleSAML/XHTML/Template.php
@@ -76,10 +76,13 @@ class SimpleSAML_XHTML_Template {
 	 * 
 	 * @param $language    Language code for the language to set.
 	 */
-	public function setLanguage($language) {
+	public function setLanguage($language, $setLanguageCookie = TRUE) {
+		$language = strtolower($language);
 		if (in_array($language, $this->availableLanguages, TRUE)) {
 			$this->language = $language;
-			SimpleSAML_XHTML_Template::setLanguageCookie($language);
+			if ($setLanguageCookie === TRUE) {
+				SimpleSAML_XHTML_Template::setLanguageCookie($language);
+			}
 		}
 	}
 
@@ -109,7 +112,7 @@ class SimpleSAML_XHTML_Template {
 
 		// Language is provided in a stored COOKIE
 		$languageCookie = SimpleSAML_XHTML_Template::getLanguageCookie();
-		if ($languageCookie !== NULL && in_array($languageCookie, $this->availableLanguages, TRUE)) {
+		if ($languageCookie !== NULL) {
 			$this->language = $languageCookie;
 			return $languageCookie;
 		}
@@ -667,8 +670,11 @@ class SimpleSAML_XHTML_Template {
 		$config = SimpleSAML_Configuration::getInstance();
 		$availableLanguages = $config->getArray('language.available', array('en'));
 
-		if (isset($_COOKIE['language']) && in_array((string)$_COOKIE['language'], $availableLanguages, TRUE)) {
-			return (string)$_COOKIE['language'];
+		if (isset($_COOKIE['language'])) {
+			$language = strtolower((string)$_COOKIE['language']);
+			if (in_array($language, $availableLanguages, TRUE)) {
+				return $language;
+			}
 		}
 
 		return NULL;
@@ -683,6 +689,7 @@ class SimpleSAML_XHTML_Template {
 	public static function setLanguageCookie($language) {
 		assert('is_string($language)');
 
+		$language = strtolower($language);
 		$config = SimpleSAML_Configuration::getInstance();
 		$availableLanguages = $config->getArray('language.available', array('en'));