diff --git a/modules/metarefresh/lib/MetaLoader.php b/modules/metarefresh/lib/MetaLoader.php
index 749fa39d5be358e3f5ec0687d6fbb72aee1e42d0..051cf22bcf5be802ecceaa19e7a8ed417cdeddbc 100644
--- a/modules/metarefresh/lib/MetaLoader.php
+++ b/modules/metarefresh/lib/MetaLoader.php
@@ -85,7 +85,13 @@ class sspmod_metarefresh_MetaLoader {
 			SimpleSAML_Logger::debug('Downloaded fresh copy');
 		}
 
-		$entities = $this->loadXML($data, $source);
+		try {
+			$entities = $this->loadXML($data, $source);
+		} catch(Exception $e) {
+			SimpleSAML_Logger::debug('XML parser error when parsing ' . $source['src'] . ' - attempting to re-use cached metadata');
+			$this->addCachedMetadata($source);
+			return;
+		}
 
 		foreach($entities as $entity) {
 
@@ -205,17 +211,13 @@ class sspmod_metarefresh_MetaLoader {
 	 */
 	private function loadXML($data, $source) {
 		$entities = array();
-		try {
-			$doc = new DOMDocument();
-			$res = $doc->loadXML($data);
-			if($res !== TRUE) {
-				throw new Exception('Failed to read XML from ' . $source['src']);
-			}
-			if($doc->documentElement ===  NULL) throw new Exception('Opened file is not an XML document: ' . $source['src']);
-			$entities = SimpleSAML_Metadata_SAMLParser::parseDescriptorsElement($doc->documentElement);
-		} catch(Exception $e) {
-			SimpleSAML_Logger::warning('metarefresh: Failed to retrieve metadata. ' . $e->getMessage());
+		$doc = new DOMDocument();
+		$res = $doc->loadXML($data);
+		if($res !== TRUE) {
+			throw new Exception('Failed to read XML from ' . $source['src']);
 		}
+		if($doc->documentElement ===  NULL) throw new Exception('Opened file is not an XML document: ' . $source['src']);
+		$entities = SimpleSAML_Metadata_SAMLParser::parseDescriptorsElement($doc->documentElement);
 		return $entities;
 	}