public boolean restoreFromFile(String path) {
		if (path == null || !path.endsWith(".ht")) {
			throw new IllegalArgumentException("the given path: " + path + " is not valid (must end with .ht)");
		}
		BufferedReader reader;
		try {
			reader = new BufferedReader(new FileReader(path));
			int lineCount = 1;
			while (reader.ready()) {
				// split into parseable part and path
				String[] line = reader.readLine().split(String.valueOf(Message.MESSAGE_SPERATOR));
				if (line.length != 2) {
					logger.warning("Could not parse line " + lineCount + " in shareCache file");
					lineCount++;
					continue;
				}
				lineCount++;

				// check if file is still there
				if (!(new java.io.File(line[1]).exists())) {
					logger.warning("The file '" + line[1] + "' is not available any more. Removed it from ShareCache");
					continue;
				}

				// check if part 1 parseable
				Message m = MessageDeserializer.Deserialize(line[0] + Message.MESSAGE_SPERATOR); // has
																									// to
																									// append
																									// seperator
																									// because
																									// deserializer
																									// needs
																									// this
																									// and
																									// we
																									// cut
																									// it
																									// off.
				if (m == null || !(m instanceof FileAnnouncementMessage)) {
					logger.warning("Could not parse line " + line + ": " + line[0]);
					continue;
				}

				// create share from this information
				LocalShare s = ((FileAnnouncementMessage) m).getFile();
				if (s.getLength() != (new java.io.File(line[1]).length())) {
					logger.info("Length of file " + s.getPath() + " has changed from " + s.getLength() + " to " + new java.io.File(line[1]).length() + ". Ignore the share");
				} else {
					s = new LocalShare(s.getHash(), s.getLength(), s.getTTL(), s.getDisplayName(), s.getMeta(), line[1]);
					newShare(s);
				}
			}
			reader.close();
		} catch (IOException e) {
			logger.warning("Could not read ShareCache: " + e.getMessage());
		}
		return true;
	}