     public func extract<T : NodeInitializable>(
         path: [PathIndex])
         throws -> Set<T> {
-            let node = self[path] ?? .null
-            let array = try [T](node: node)
+            let value = node[path] ?? .null
+            let array = try [T](node: value)
             return Set(array)
     }
 }
 
 // MARK: Optional Extractions
 
-extension Node {
+extension NodeBacked {
     public func extract<T : NodeInitializable>(
         _ path: PathIndex...)
         throws -> T? {

    public func extract<T : NodeInitializable>(
        path: [PathIndex])
        throws -> [[T]]? {
            guard let initial = self[path] else { return nil }
            let array = initial.nodeArray ?? [initial]
            return try array.map { try [T](node: $0) }
    }

    public func extract<T : NodeInitializable>(
        path: [PathIndex])
        throws -> T? {
            return try node[path].flatMap { try T(node: $0) }
    }

    public func extract<T : NodeInitializable>(
