code: function copyFolder(from, to, cb) {
  		var isError
  		var cbCounter = 1
  		var result = []
  		if (from !== to) copyAFolder(from, to)
  		end()
  
  		function copyAFolder(from, to) {
  			cbCounter++
  			fs.readdir(from, readdirResult)
  
  			function readdirResult(err, files) {
  				if (!err) {
  					files.forEach(processEntry)
  					end(null, from)
  				} else end(err)
  			}
  
  			function processEntry(entry) {
  				var from0 = path.join(from, entry)
  				var to0 = path.join(to, entry)
  				switch (haraldutil.getType(from0)) {
  				case 1: // folder
  					if (haraldutil.getType(to0) === undefined) fs.mkdir(to0, createdFolder)
  					else copyAFolder(from0, to0)
  					break
  				case true: // file
  					cbCounter++
  					copyFile(from0, to0, end)
  				}
  
  				function createdFolder(err) {
  					if (!err) copyAFolder(from0, to0)
  					else end(err)
  				}
  			}
  		}
  
  		function end(err, from) {
  			if (!err) {
  				if (from) {
  					doCopyWatcherCount++
  					wm.add(from)
  				}
  				if (!--cbCounter) {
  					cb(null)
  				}
  			} else if (!isError) {
  				isError = true
  				cb(err)
  			}
  		}
  	}
docs: cb(err, [from])