@Override
	public void createHardLink(String source, String destination) throws PathNotFoundException, SourceAlreadyExistsException, AccessDeniedException, UnsupportedFeatureException {
		if (hardlinks)
		{
			if (innerFs.pathExists(source))
				throw new SourceAlreadyExistsException();
			
			if (!innerFs.pathExists(destination))
				throw new PathNotFoundException(destination);
			
			//create source dummy file
			try {
				innerFs.createFile(source);
			} catch (DestinationAlreadyExistsException e1) {
				throw new SourceAlreadyExistsException();
			}
			
			try {
				String[] hardLinksBef = getHardLinks(destination);
				if (hardLinksBef.length == 0)
					hardLinksBef = new String[] { destination };
				String[] hardLinksAfter = new String[hardLinksBef.length + 1];
				System.arraycopy(hardLinksBef, 0, hardLinksAfter, 0, hardLinksBef.length);
				hardLinksAfter[hardLinksAfter.length - 1] = source;
				
				//write at first our new source file:
				FileSystemUtils.writeLines(attributeFs, getHardLinkPath(source), hardLinksAfter);
				for (String files : hardLinksBef)
					FileSystemUtils.writeLines(attributeFs, getHardLinkPath(files), hardLinksAfter);
				
			} catch (NotAFileException e) {
				e.printStackTrace();
			} catch (DriveFullException e) {
				e.printStackTrace();
			}
		} else
			innerFs.createHardLink(source, destination);
	}