diff --git a/lib/SAML2/Utils.php b/lib/SAML2/Utils.php
index 0e37acc71988b4daf709e818c8fdf23b1bf108df..ea5dd2cc85aa218ff39cdf85fbc13521f9a757c5 100644
--- a/lib/SAML2/Utils.php
+++ b/lib/SAML2/Utils.php
@@ -434,15 +434,21 @@ class SAML2_Utils {
 	/**
 	 * Extract localized strings from a set of nodes.
 	 *
-	 * @param DOMElement $parent  The element we should rund the XPath query on.
-	 * @param string $query  The XPath query we should use to retrieve the nodes.
+	 * @param DOMElement $parent  The element that contains the localized strings.
+	 * @param string $namespaceURI  The namespace URI the localized strings should have.
+	 * @param string $localName  The localName of the localized strings.
 	 * @return array  Localized strings.
 	 */
-	public static function extractLocalizedStrings(DOMElement $parent, $query) {
-		assert('is_string($query)');
+	public static function extractLocalizedStrings(DOMElement $parent, $namespaceURI, $localName) {
+		assert('is_string($namespaceURI)');
+		assert('is_string($localName)');
 
 		$ret = array();
-		foreach (self::xpQuery($parent, $query) as $node) {
+		for ($node = $parent->firstChild; $node !== NULL; $node = $node->nextSibling) {
+			if ($node->namespaceURI !== $namespaceURI || $node->localName !== $localName) {
+				continue;
+			}
+
 			if ($node->hasAttribute('xml:lang')) {
 				$language = $node->getAttribute('xml:lang');
 			} else {
diff --git a/lib/SAML2/XML/md/AttributeConsumingService.php b/lib/SAML2/XML/md/AttributeConsumingService.php
index 3e0b6a3dea16cbdbedc2c85d0052b30f83ab8ceb..427fd28533303b3e12f729fc352b6ed803e02565 100644
--- a/lib/SAML2/XML/md/AttributeConsumingService.php
+++ b/lib/SAML2/XML/md/AttributeConsumingService.php
@@ -73,12 +73,12 @@ class SAML2_XML_md_AttributeConsumingService {
 
 		$this->isDefault = SAML2_Utils::parseBoolean($xml, 'isDefault', NULL);
 
-		$this->ServiceName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:ServiceName');
+		$this->ServiceName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'ServiceName');
 		if (empty($this->ServiceName)) {
 			throw new Exception('Missing ServiceName in AttributeConsumingService.');
 		}
 
-		$this->ServiceDescription = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:ServiceDescription');
+		$this->ServiceDescription = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'ServiceDescription');
 
 		foreach (SAML2_Utils::xpQuery($xml, './saml_metadata:RequestedAttribute') as $ra) {
 			$this->RequestedAttribute[] = new SAML2_XML_md_RequestedAttribute($ra);
diff --git a/lib/SAML2/XML/md/Organization.php b/lib/SAML2/XML/md/Organization.php
index 3869b042ae5ae7f04116e3a164d3f1ac51ed209f..5ceaeed5bca1dcce75757ca44468feaadaf84bba 100644
--- a/lib/SAML2/XML/md/Organization.php
+++ b/lib/SAML2/XML/md/Organization.php
@@ -56,17 +56,17 @@ class SAML2_XML_md_Organization {
 		$this->Extensions = SAML2_XML_md_Extensions::getList($xml);
 
 
-		$this->OrganizationName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationName');
+		$this->OrganizationName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationName');
 		if (empty($this->OrganizationName)) {
 			$this->OrganizationName = array('invalid' => '');
 		}
 
-		$this->OrganizationDisplayName = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationDisplayName');
+		$this->OrganizationDisplayName = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationDisplayName');
 		if (empty($this->OrganizationDisplayName)) {
 			$this->OrganizationDisplayName = array('invalid' => '');
 		}
 
-		$this->OrganizationURL = SAML2_Utils::extractLocalizedStrings($xml, './saml_metadata:OrganizationURL');
+		$this->OrganizationURL = SAML2_Utils::extractLocalizedStrings($xml, SAML2_Const::NS_MD, 'OrganizationURL');
 		if (empty($this->OrganizationURL)) {
 			$this->OrganizationURL = array('invalid' => '');
 		}
diff --git a/lib/SAML2/XML/mdrpi/PublicationInfo.php b/lib/SAML2/XML/mdrpi/PublicationInfo.php
index 3e1caeea8d25b89d93b79622c82f717d3678fd4d..bf6bff8d39d6f876fe9b3c81dcb67c756ea4532f 100644
--- a/lib/SAML2/XML/mdrpi/PublicationInfo.php
+++ b/lib/SAML2/XML/mdrpi/PublicationInfo.php
@@ -64,8 +64,7 @@ class SAML2_XML_mdrpi_PublicationInfo {
 			$this->publicationId = $xml->getAttribute('publicationId');
 		}
 
-		$query = './*[local-name()="UsagePolicy" and namespace-uri()="' . SAML2_XML_mdrpi_Common::NS_MDRPI . '"]';
-		$this->UsagePolicy = SAML2_Utils::extractLocalizedStrings($xml, $query);
+		$this->UsagePolicy = SAML2_Utils::extractLocalizedStrings($xml, SAML2_XML_mdrpi_Common::NS_MDRPI, 'UsagePolicy');
 	}