public static Path findDoorToDoorPath(Door start, Door end) {
		double[][] adjacency;
		if (start.equals(end)) {
			Path result = new Path(start.getCentralPoint(),
					end.getCentralPoint());
			result.add(start.getCentralPoint());
			return result;
		}
		try {
			adjacency = SimulationEngine.getInstance().getWorld()
					.getDoorGraph();
			if (adjacency[start.getIntIdentifier()][end.getIntIdentifier()] > 0) {
				Path test = SimulationEngine.getInstance().getWorld()
						.getDoorPath(start, end);
				if (test != null) {
					// Path was calculated yet
					return test;
				}
				// doors are adjacent but there is no calculated path:
				Set<Door> doorSet = new HashSet<Door>();
				doorSet.add(start);
				doorSet.add(end);
				// two doors can belong to multiple rooms (in most cases they do
				// not):
				Room fittingRoom = WorldFactory.getRoomWithPoints(start.getCentralPoint(), end.getCentralPoint());
				if (fittingRoom == null) {
					log.severe("No room was found. This shouldn't happen!");
					return null;
				}
				// Take the first room and calculate a path:
				InRoomPathSolver solver = new InRoomPathSolver(fittingRoom, end.getCentralPoint());
				List<Point2D> tempPath = solver
						.compute(start.getCentralPoint());
				Path finalPath = new Path(start.getCentralPoint(),
						end.getCentralPoint());
				finalPath.addAll(tempPath);
				return finalPath;
			}
		} catch (IllegalAccessException e) {
			log.severe("This shouldn't happen. Don't call this method at this time! "
					+ e.fillInStackTrace());
		}
		// start and end are adjacent:
		// Last case: doors arn't adjacent:
		return findDoorToDoorPathOfNonAdjacentDoors(start, end);
	}