 
         watchSubdirectories()
         
-        source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, UInt(fid), DISPATCH_VNODE_WRITE | DISPATCH_VNODE_DELETE | DISPATCH_VNODE_RENAME, DirectoryWatcher.watcherQueue)
+        source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, UInt(fid), DISPATCH_VNODE_WRITE | DISPATCH_VNODE_DELETE | DISPATCH_VNODE_RENAME, DirectoryWatcher.WatcherQueue)
         dispatch_source_set_event_handler(source) { 
             let mask = dispatch_source_get_data(self.source)
             if mask & DISPATCH_VNODE_DELETE == DISPATCH_VNODE_DELETE {

    }

    public func stopMonitoring() {
        for (_, submonitor) in subdirectoriesWatcher {
            submonitor.stopMonitoring()
        }
        subdirectoriesWatcher.removeAll()
        subdirectories.removeAll()
        dispatch_source_cancel(source)
    }

    private func watchSubdirectories() {
        guard self.autoWatchSubdirectory else { return }
        var directories = Set<String>()
        if let directoryEnumerator = fm.enumeratorAtPath(self.watchPath) {
            for file in directoryEnumerator {
                let directoryPath = self.watchPath as NSString
                let fullFilename = directoryPath.stringByAppendingPathComponent(file as! String)
                var isDir: ObjCBool = false
                if fm.fileExistsAtPath(fullFilename, isDirectory: &isDir) && isDir.boolValue {
                    directories.insert(fullFilename)
                }
            }
        }

        directories.forEach {
            if !self.subdirectories.contains($0) {
                self.subdirectories.insert($0)
                let dw = DirectoryWatcher(watchPath: $0, autoWatchSubdirectory: true)
                dw.delegate = delegate
                dw.startMonitoring()
                self.subdirectoriesWatcher[$0] = dw
            }
        }
    }

    @objc private func removeSubdirectoryWatcher(notification: NSNotification) {
        guard let deletedPath = notification.userInfo?[DirectoryWatchPathKey] as? String else { return }
        if subdirectories.contains(deletedPath) {
            subdirectories.remove(deletedPath)
            if let dw = subdirectoriesWatcher.removeValueForKey(deletedPath) where dw.monitoring {
                dw.stopMonitoring()
            }
        }
    }

    @objc private func clearRenamedWatcher(notification: NSNotification) {
        guard let renamedPath = notification.userInfo?[DirectoryWatchOldPathKey] as? String else { return }
        if subdirectories.contains(renamedPath) {
            subdirectories.remove(renamedPath)
            if let dw = subdirectoriesWatcher.removeValueForKey(renamedPath) where dw.monitoring {
                dw.stopMonitoring()
            }
        }
    }
}
    }

    deinit {
        stopMonitoring()
        
        let nc = NSNotificationCenter.defaultCenter()
        nc.removeObserver(self, name: DirectoryWatchDirectoryDeletedNotification, object: nil)
        nc.removeObserver(self, name: DirectoryWatchDirectoryRenamedNotification, object: nil)
