diff --git a/modules/saml/lib/Auth/Source/SP.php b/modules/saml/lib/Auth/Source/SP.php
index ce68b088e75ef6064db5e8d2ee8736e270394dce..5004069b67b850eecb344db4dba6b5d86b25f479 100644
--- a/modules/saml/lib/Auth/Source/SP.php
+++ b/modules/saml/lib/Auth/Source/SP.php
@@ -202,10 +202,17 @@ class sspmod_saml_Auth_Source_SP extends SimpleSAML_Auth_Source {
 		}
 
 		if (isset($state['saml:NameIDPolicy'])) {
-			$ar->setNameIdPolicy(array(
-				'Format' => (string)$state['saml:NameIDPolicy'],
-				'AllowCreate' => TRUE,
-			));
+			if (is_string($state['saml:NameIDPolicy'])) {
+				$policy = array(
+					'Format' => (string)$state['saml:NameIDPolicy'],
+					'AllowCreate' => TRUE,
+				);
+			} elseif (is_array($state['saml:NameIDPolicy'])) {
+				$policy = $state['saml:NameIDPolicy'];
+			} else {
+				throw new SimpleSAML_Error_Exception('Invalid value of $state[\'saml:NameIDPolicy\'].');
+			}
+			$ar->setNameIdPolicy($policy);
 		}
 
 		if (isset($state['saml:IDPList'])) {