private Set<VehiclePart> findConnectedFuelTanks(final VehiclePart engine) {
        final Set<VehiclePart> connectedParts = new HashSet<>();

        final Set<VehiclePart> scanned = new HashSet<>();
        final Deque<VehiclePart> parts = new ArrayDeque<>();
        parts.add(engine);
        scanned.add(engine);
        while (!parts.isEmpty()) {
            final VehiclePart part = parts.pop();

            final VehiclePart parent = part.getParent();
            if (parent != null) {
                if (!scanned.contains(parent) && parent.getPart().getFuelCrossFeed()) {
                    scanned.add(parent);
                    connectedParts.add(parent);
                    parts.add(parent);
                }
            }

            for (final VehiclePart child : part.getChildren()) {
                if (!scanned.contains(child) && child.getPart().getFuelCrossFeed()) {
                    scanned.add(child);
                    connectedParts.add(child);
                    parts.add(child);
                }
            }
        }

        final Set<VehiclePart> connectedFuelTanks = new HashSet<>();
        for (final VehiclePart vehiclePart : connectedParts) {
            if (vehiclePart.getLOXFuelMass() > 0) {
                connectedFuelTanks.add(vehiclePart);
            }
        }
        return connectedFuelTanks;
    }