         return contents?.filter({ $0.pathExtension == "utree" }).first ?? nil
     }
     
+    /**
+     Unpack a utree file at `url` to `destinationURL`
+     
+     - parameters:
+       - url: URL of compressed .utree
+       - destinationURL: Target location where the unpacked contents of the .utree will be placed
+     
+     - returns: URL of folder with .utree extension
+    */
     public func unpackTreeWithURL(url: NSURL, toDestinationURL destinationURL: NSURL) -> NSURL? {
         // Attempt to unzip
         do {

        }
    }
    
    public func treesAtRootURL() -> [NSURL] {
        if let contents = contentsOfDirectoryAtRootURL() {
            // filter contents to URLs with path extension 'utree'
            return contents.filter({ $0.pathExtension == "utree" })
        }
        
        // Return empty array if contents is nil
        return []
    }
    
    public func firstTreeInURL(url: NSURL) -> NSURL? {
        // Get directory of .utree folder in unpack directory
        let contents = try? NSFileManager.defaultManager().contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles)

        }
    }
    
    /**
     Unpack a utree file to default directory in cache. Cache directory is determined by `cacheDirectoryURL`.
     
     - parameter treeURL: URL of compressed .utree
     
     - returns: URL of folder with .utree extension
    */
    public func unpackTreeToCacheDirectoryWithTreeURL(treeURL: NSURL) -> NSURL? {
        // Generate unique string to ensure unpack to new clean directory
        let uniqueId = NSUUID().UUIDString
