public Map<String, String> getDirectoriesAndDestinations() {
	    
	    final File sourceDirectory = new File(source.getDirectory());
	    
		// Scan for directories
		final DirectoryScanner scanner = new DirectoryScanner();
        scanner.setBasedir(sourceDirectory);
    	scanner.setIncludes(source.getIncludes().toArray(new String[source.getIncludes().size()]));
    	scanner.setExcludes(source.getExcludes().toArray(new String[source.getExcludes().size()]));

        // Add default excludes to the list of excludes (see http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/AbstractScanner.html#DEFAULTEXCLUDES
        // or http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/AbstractScanner.html#addDefaultExcludes() )
        scanner.addDefaultExcludes();

    	scanner.scan();

    	
    	final Map<String, String> result = new LinkedHashMap<String, String>();
    	
    	result.put(FilenameUtils.separatorsToUnix(sourceDirectory.toString()), FilenameUtils.separatorsToUnix(destination.toString()));
    	
    	for (String included : scanner.getIncludedDirectories()) {
    		if (!included.isEmpty()) {
	    		final String subdir = StringUtils.difference(sourceDirectory.toString(), included);
	    		
	    		final File sourceDir = new File(sourceDirectory, included);

	    		File destDir = new File(this.destination, subdir);
                if (this.relativeOutputDirectory != null && !this.relativeOutputDirectory.isEmpty()) {
                    destDir = new File(destDir, this.relativeOutputDirectory);
                }
                
                result.put(FilenameUtils.separatorsToUnix(sourceDir.toString()), FilenameUtils.separatorsToUnix(destDir.toString()));
    		}
    	}

        return result;
	}