private void fileAnnouncmentHandler(FileAnnouncementMessage message, boolean delayed) {
		int ttl = message.getFile().getTTL();
		String hash = message.getFile().getHash();

		Host host = this.getOrCreateHost(message.getSource().getAddress());

		if (host.getPort() != Host.UNKNOWN_PORT) {
			logger.info("The sender of the file announcement (" + message.getSource() + ") is unknown");
			if (this.knownShares.containsKey(hash)) {
				RemoteShare tempShare = this.knownShares.get(hash);

				// if the share is already associated to the host, just
				// update
				// ttl
				if (host.getSharedFiles().containsKey(hash)) {
					logger.info("announced file " + hash + " already known for this host. Refreshing ttl");
					host.getSharedFiles().get(hash).setTTL(ttl);
					if (this.guiCallbacks != null) {
						this.guiCallbacks.updatedTTL(host.getSharedFiles().get(hash));
					}
				}

				// if the share share isn't already associated, associate it;
				// to
				// the host
				else {
					logger.info("announced file " + hash + " is unknown for the current host.");
					host.addFileToSharedFiles(tempShare.addFileSource(host, ttl, message.getFile().getDisplayName(),
							message.getFile().getMeta()));
					if (this.guiCallbacks != null) {
						this.guiCallbacks.newShareAvailable(host.getSharedFiles().get(hash));
					} else {
						logger.warning("GUI callback is null - can't announce file");
					}
				}

			} else {
				// case: share not cached, but host already cached
				logger.info("announced file " + hash + " is unknown for the current host.");
				RemoteShare tmp = new RemoteShare(hash, message.getFile().getLength());
				this.knownShares.put(hash, tmp);
				host.addFileToSharedFiles(tmp.addFileSource(host, ttl, message.getFile().getDisplayName(), message
						.getFile().getMeta()));
				if (this.guiCallbacks != null) {
					this.guiCallbacks.newShareAvailable(host.getSharedFiles().get(hash));
				}

			}
		} else {
			logger.info("FileAnnouncement will be delayed");
			try {
				if (this.udpAdapter != null && !delayed) {
					this.udpAdapter.sendUnicast(new PeerDiscoveryMessage(PeerDiscoveryMessage.DiscoveryMessageType.HI,
							Config.alias, buschtrommel.getTransferPort()), host.getAddress());
					handleFileAnnouncementMessageLater(message, DELAY_FILE_MESSAGE_AFTER_HOST_DISCOVER);
				}

			} catch (IOException e) {
				logger.warning(e.getMessage());
			}

		}
	}