Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 1110)
+++ src/mlx/gui/flight.py	(revision 1118)
@@ -2999,8 +2999,18 @@
         return self._cruiseLevel.get_value_as_int()
 
+    @filedCruiseLevel.setter
+    def filedCruiseLevel(self, fl):
+        """Set the filed cruise level."""
+        self._cruiseLevel.set_value(fl)
+
     @property
     def route(self):
         """Get the route."""
         return self._getRoute()
+
+    @route.setter
+    def route(self, r):
+        """Set the route."""
+        self._route.get_buffer().set_text(r)
 
     @property
@@ -3025,9 +3035,18 @@
     def _updateForwardButton(self):
         """Update the sensitivity of the forward button."""
-        cruiseLevelText = self._cruiseLevel.get_text()
-        cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 0
+        flight = self._wizard.gui.flight
+        useSimBrief = \
+            flight is not None and flight.aircraft.simBriefData is not None and \
+            self._wizard.gui.config.useSimBrief and \
+            self._wizard.usingSimBrief is not False
+
         alternate = self._alternate.get_text()
-        self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="" and
-                                   (len(alternate)==4 or self._wizard.entranceExam))
+        if useSimBrief:
+            self._button.set_sensitive(len(alternate)==4 or self._wizard.entranceExam)
+        else:
+            cruiseLevelText = self._cruiseLevel.get_text()
+            cruiseLevel = int(cruiseLevelText) if cruiseLevelText else 0
+            self._button.set_sensitive(cruiseLevel>=50 and self._getRoute()!="" and
+                                       (len(alternate)==4 or self._wizard.entranceExam))
 
     def _cruiseLevelChanged(self, *arg):
@@ -3455,4 +3474,5 @@
         self._cruiseProfile.set_active(0)
         self._descentProfile.set_active(0)
+        self._cruiseParameter.set_text("")
 
         self._resultTimestamp = None
@@ -3700,6 +3720,11 @@
         plan["cargo"] = str((wizard.bagWeight + wizard.cargoWeight + wizard.mailWeight)/1000.0)
 
-        plan["route"] = wizard.route
-        plan["fl"] = str(wizard.filedCruiseAltitude)
+        route = wizard.route
+        if route:
+            plan["route"] = route
+
+        filedCruiseAltitude = wizard.filedCruiseAltitude
+        if filedCruiseAltitude>0:
+            plan["fl"] = filedCruiseAltitude
         plan["altn"] = wizard.alternate
 
@@ -3798,4 +3823,26 @@
                 elif element.tag in ["files", "prefile"]:
                     availableInfo[element.tag] = element
+                elif element.tag == "general":
+                    generalElementList = list(element)
+                    for generalElement in generalElementList:
+                        if generalElement.tag in ["initial_altitude",
+                                                  "route_ifps",
+                                                  "costindex"]:
+                            flightInfo[generalElement.tag] = generalElement.text
+                elif element.tag == "origin":
+                    originElementList = list(element)
+                    for originElement in originElementList:
+                        if originElement.tag == "plan_rwy":
+                            flightInfo["dep_rwy"] = originElement.text
+                elif element.tag == "destination":
+                    destinationElementList = list(element)
+                    for destinationElement in destinationElementList:
+                        if destinationElement.tag == "plan_rwy":
+                            flightInfo["arr_rwy"] = destinationElement.text
+                elif element.tag == "fuel":
+                    fuelElementList = list(element)
+                    for fuelElement in fuelElementList:
+                        if fuelElement.tag == "extra":
+                            flightInfo["fuel_extra"] = fuelElement.text
                 else:
                     availableInfo[element.tag] = element.text
@@ -3884,4 +3931,27 @@
             self._wizard.arrivalMETARChanged(flightInfo["dest_metar"], self,
                                              fromDownload = True)
+
+            cruiseLevel = int(flightInfo["initial_altitude"])/100
+            self._wizard.filedCruiseLevel = cruiseLevel
+
+            (route, sid, star) = self._getRouteData(flightInfo)
+            self._wizard.route = route
+            self._wizard.departureSID = sid
+            self._wizard.arrivalSTAR = star
+
+            takeoffRunway = flightInfo["dep_rwy"]
+            self._wizard.takeoffRunway = takeoffRunway
+            self._takeoffRunway.set_text(takeoffRunway)
+
+            landingRunway = flightInfo["arr_rwy"]
+            self._wizard.landingRunway = landingRunway
+            self._landingRunway.set_text(landingRunway)
+
+            if "costindex" in flightInfo:
+                self._setCostIndex(flightInfo["costindex"])
+
+            if "fuel_extra" in flightInfo:
+                self._extraFuel.set_text(flightInfo["fuel_extra"])
+
             self._wizard.nextPage()
         else:
@@ -3907,5 +3977,47 @@
         self._wizard.jumpPage("fuel", fromPageShift = 1)
 
-
+    def _getRouteData(self, flightInfo):
+        """Analyze the route information provided by SimBrief.
+
+        Returns a tuple of
+        - the route
+        - the SID (may be None)
+        - the STAR (may be None)"""
+        route = flightInfo["route_ifps"]
+        print("route:", route)
+        words = re.split("\\s+", route)
+
+        sid = None
+        star = None
+
+        if len(words)>1:
+            if words[0]=="DCT":
+                words = words[1:]
+            elif len(words[0])>=7 and len(words[1])==5:
+                if words[0][:5]==words[1]:
+                    sid = words[0]
+                    words = words[1:]
+
+            if words[-1]=="DCT":
+                words = words[:-1]
+            elif len(words[-1])>=7 and len(words[-2])==5:
+                if words[-1][:5]==words[-2]:
+                    star = words[-1]
+                    words = words[:-1]
+
+        if sid is not None and sid[5].isdigit():
+            sid = sid[:5] + " " + sid[5:]
+        if star is not None and star[5].isdigit():
+            star = star[:5] + " " + star[5:]
+
+        return (" ".join(words), sid, star)
+
+    def _setCostIndex(self, costIndex):
+        """Set the cost index, if the selected cruise profile is a CI."""
+        cruiseParameters = self._wizard.gui.flight.aircraft.simBriefData.cruiseParameters
+        cruiseProfileIndex = self._cruiseProfile.get_active()
+        if cruiseProfileIndex in cruiseParameters:
+            if cruiseParameters[cruiseProfileIndex][1]=="civalue":
+                self._cruiseParameter.set_text(str(costIndex))
 
 #-----------------------------------------------------------------------------
@@ -4820,5 +4932,8 @@
             self._runway.set_text(self._wizard.takeoffRunway)
         self._runway.set_sensitive(True)
-        self._sid.set_active(0)
+        if self._wizard.departureSID is None:
+            self._sid.set_active(0)
+        else:
+            self._sid.get_child().set_text(self._wizard.departureSID)
         self._sid.set_sensitive(True)
         self._v1.set_int(None)
@@ -5359,5 +5474,8 @@
         self._updatingMETAR = False
 
-        self._star.set_active(0)
+        if self._wizard.arrivalSTAR is None:
+            self._star.set_active(0)
+        else:
+            self._star.get_child().set_text(self._wizard.arrivalSTAR)
         self._star.set_sensitive(True)
 
@@ -6349,4 +6467,9 @@
         return self._routePage.filedCruiseLevel
 
+    @filedCruiseLevel.setter
+    def filedCruiseLevel(self, fl):
+        """Set the filed cruise level."""
+        self._routePage.filedCruiseLevel = fl
+
     @property
     def filedCruiseAltitude(self):
@@ -6374,4 +6497,9 @@
         return self._routePage.route
 
+    @route.setter
+    def route(self, r):
+        """Set the route."""
+        self._routePage.route = r
+
     @property
     def alternate(self):
@@ -6398,4 +6526,9 @@
         """Get the SID."""
         return self._takeoffPage.sid
+
+    @sid.setter
+    def sid(self, s):
+        """Set the SID."""
+        self._takeoffPage.sid = s
 
     @property
@@ -6443,4 +6576,9 @@
         """Get the STAR."""
         return self._landingPage.star
+
+    @star.setter
+    def star(self, s):
+        """Set the STAR."""
+        self._landingPage.star = s
 
     @property
@@ -6552,5 +6690,7 @@
         self._usingSimBrief = None
         self.takeoffRunway = None
+        self.departureSID = None
         self.landingRunway = None
+        self.arrivalSTAR = None
 
         firstPage = 0 if self._loginResult is None else 1
