     func value<T: XMLElementDeserializable>() throws -> [T?] {
         switch self {
         case .list(let elements):
-            return try elements.map { try T.deserialize($0) }
-        case .element(let element):
-            return try [element].map { try T.deserialize($0) }
+            return try elements.map {
+				let deserialized = try T.deserialize($0)
+				try deserialized.validate()
+				return deserialized
+			}
+        case .element(let element):
+            return try [element].map {
+				let deserialized = try T.deserialize($0)
+				try deserialized.validate()
+				return deserialized
+			}
         case .stream(let opStream):
             return try opStream.findElements().value()
         default:

public protocol XMLIndexerDeserializable {
    /// Method for deserializing elements from XMLIndexer
    static func deserialize(_ element: XMLIndexer) throws -> Self
}

/// Provides XMLIndexer deserialization / type transformation support

    func value<T: XMLElementDeserializable>() throws -> [T] {
        switch self {
        case .list(let elements):
            return try elements.map {
				let deserialized = try T.deserialize($0)
				try deserialized.validate()
				return deserialized
			}
        case .element(let element):
            return try [element].map {
				let deserialized = try T.deserialize($0)
				try deserialized.validate()
				return deserialized
			}
        case .stream(let opStream):
            return try opStream.findElements().value()
        default:
