                 top.append((path, (try? path.recursiveChildren()) ?? []))
             } else {
                 let dir = path.parent()
-                top.append((dir, (try? dir.recursiveChildren()) ?? []))
+                let children = (try? dir.recursiveChildren()) ?? []
+                if children.contains(path) {
+                    top.append((dir, children))
+                } else {
+                    top.append((path, []))
+                }
             }
         }
 

        return Array([sourceWatchers, templateWatchers].joined())
    }

    private func topDirectories(from paths: [Path]) -> [Path] {
        var top = [(Path, [Path])]()
        paths.forEach { path in
            // See if its already contained by the topDirectories


        Log.info("Starting watching templates.")

        let templateWatchers = topPaths(from: templatesPaths.allPaths).map({ templatesPath in
            return FolderWatcher.Local(path: templatesPath.string) { events in
                let events = events
                    .filter { $0.flags.contains(.isFile) && Path($0.path).isTemplateFile }
