protected LinkedHashMap<Path, Patch> getFileDiffsOfDirectories(final Path src1, final Path src2) throws IOException {
		
		final LinkedHashMap<Path, Patch> src1ToSrc2Files = new LinkedHashMap<Path,Patch>();
		
        Files.walkFileTree(src1, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                throws IOException
            {
            	if(dir.getFileName().toString().startsWith("."))
            		return FileVisitResult.SKIP_SUBTREE;
            	
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult visitFile(Path file,
                    BasicFileAttributes attrs)
                      throws IOException{

            	if(file.getFileName().toString().startsWith("."))
                    return FileVisitResult.CONTINUE;

				Path subPath = src1.relativize(file);
				Path newPath = src2.resolve(subPath);
            	
				if(Files.exists(newPath)){

					boolean compare = true;
					
					for(Path f : Arrays.asList(file,newPath)){
						long kbFile = Files.size(f)/1024;
						if(kbFile > 200){
							logger.warn("File "+f +" is "+kbFile+"kB big and will not be compared");
							compare = false;
						}
					}
					
					if(compare){
						Patch patch = DiffUtils.diff(fileToLines(file.toString()), fileToLines(newPath.toString()));
						
	
	
					    if(patch.getDeltas().size() != 0)
					    	src1ToSrc2Files.put(subPath, patch);
					}
				}
            	
                return FileVisitResult.CONTINUE;
            	
            }
        });
        return src1ToSrc2Files;
	}