protected void addLevelSolutionToQueue(final Route newRoute,
			final Queue<Route> routeQueue) {
		boolean shouldAdd = true;
		Route routeToRemove = null;

		final Game game = newRoute.getFinalState();
		for (Route existingRoute : routeQueue) {
			// 1. The routes must have the same RNG. We can't compare routes
			// with different RNGs because we don't know what effect those RNGs
			// will have later on.
			final Game existingGame = existingRoute.getFinalState();
			boolean match = game.getSlotRng().equals(existingGame.getSlotRng());

			// 2. The routes must have completed exactly the same levels.
			for (final Iterator<Floor> fit = game.getFloors().iterator(); match
					&& fit.hasNext();) {
				final Floor floor = fit.next();
				for (final Iterator<Level> lit = floor.getLevels().iterator(); match
						&& lit.hasNext();) {
					final Level level = lit.next();
					match = level.isCompleted() == existingGame.getLevel(
							floor.getFloorId(), level.getLevelId())
							.isCompleted();
				}
			}

			if (match) {
				// XXX See if this is worth it...
				timesThatThingWorked++;

				// If the routes match, plan to keep whichever one is faster.
				if (newRoute.getTotalTime() < existingRoute.getTotalTime()) {
					routeToRemove = existingRoute;
				} else {
					shouldAdd = false;
				}

				// As long as we always use this method to add routes, we'll
				// never have duplicates, so we can stop now.
				break;
			}
		}

		if (routeToRemove != null) {
			routeQueue.remove(routeToRemove);
		}
		if (shouldAdd) {
			routeQueue.add(newRoute);
		}
	}