Index: src/mlx/const.py
===================================================================
--- src/mlx/const.py	(revision 197)
+++ src/mlx/const.py	(revision 220)
@@ -203,4 +203,24 @@
 #-------------------------------------------------------------------------------
 
+flightTypes = [ FLIGHTTYPE_SCHEDULED,
+                FLIGHTTYPE_OLDTIMER,
+                FLIGHTTYPE_VIP,
+                FLIGHTTYPE_CHARTER ]
+
+#-------------------------------------------------------------------------------
+
+_flightTypeStrings = { FLIGHTTYPE_SCHEDULED : "scheduled",
+                       FLIGHTTYPE_OLDTIMER : "ot",
+                       FLIGHTTYPE_VIP : "vip",
+                       FLIGHTTYPE_CHARTER : "charter" }
+
+def flightType2string(flightType):
+    """Get the string equivalent of the given flight type."""
+    print _flightTypeStrings
+    return _flightTypeStrings[flightType] \
+           if flightType in _flightTypeStrings else None    
+
+#-------------------------------------------------------------------------------
+
 # Delay code: loading problems
 DELAYCODE_LOADING = 0
Index: src/mlx/gui/common.py
===================================================================
--- src/mlx/gui/common.py	(revision 191)
+++ src/mlx/gui/common.py	(revision 220)
@@ -53,4 +53,8 @@
 
     SELECTION_MULTIPLE = gtk.SELECTION_MULTIPLE
+
+    SHADOW_IN = gtk.SHADOW_IN
+
+    POLICY_AUTOMATIC = gtk.POLICY_AUTOMATIC
 
     def text2unicode(text):
@@ -97,4 +101,8 @@
     SELECTION_MULTIPLE = gtk.SelectionMode.MULTIPLE
 
+    SHADOW_IN = gtk.ShadowType.IN
+
+    POLICY_AUTOMATIC = gtk.PolicyType.AUTOMATIC
+
     import codecs
     _utf8Decoder = codecs.getdecoder("utf-8")
Index: src/mlx/gui/gui.py
===================================================================
--- src/mlx/gui/gui.py	(revision 215)
+++ src/mlx/gui/gui.py	(revision 220)
@@ -12,4 +12,5 @@
 from mlx.gui.prefs import Preferences
 from mlx.gui.checklist import ChecklistEditor
+from mlx.gui.pirep import PIREPViewer
 
 import mlx.const as const
@@ -144,4 +145,6 @@
         self._monitorWindowY = None
         self._selfToggling = False
+
+        self._pirepViewer = PIREPViewer(self)
 
         window.show_all()
@@ -1006,4 +1009,9 @@
                 if result==RESPONSETYPE_OK:
                     self.sendPIREP(pirep)
+                elif result==1:
+                    self._pirepViewer.setPIREP(pirep)
+                    self._pirepViewer.show_all()
+                    self._pirepViewer.run()
+                    self._pirepViewer.hide()
 
     def _getLoadPirepDialog(self):
@@ -1138,4 +1146,5 @@
 
         dialog.add_button(xstr("button_cancel"), RESPONSETYPE_REJECT)
+        dialog.add_button(xstr("viewPIREP"), 1)
         dialog.add_button(xstr("sendPIREP"), RESPONSETYPE_OK)
         
Index: src/mlx/gui/pirep.py
===================================================================
--- src/mlx/gui/pirep.py	(revision 220)
+++ src/mlx/gui/pirep.py	(revision 220)
@@ -0,0 +1,506 @@
+# Module for the detailed PIREP viewer
+
+#------------------------------------------------------------------------------
+
+from common import *
+
+from mlx.const import *
+
+import time
+
+#------------------------------------------------------------------------------
+
+class PIREPViewer(gtk.Dialog):
+    """The dialog for PIREP viewing."""
+    @staticmethod
+    def createFrame(label):
+        """Create a frame with the given label.
+
+        The frame will contain an alignment to properly distance the
+        insides. The alignment will contain a VBox to contain the real
+        contents. 
+
+        The function returns a tuple with the following items:
+        - the frame,
+        - the inner VBox."""
+        frame = gtk.Frame(label = label)
+
+        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
+                                  xscale = 1.0, yscale = 1.0)
+        frame.add(alignment)
+        alignment.set_padding(padding_top = 4, padding_bottom = 4,
+                              padding_left = 4, padding_right = 4)
+        box = gtk.VBox()
+        alignment.add(box)
+        
+        return (frame, box)
+
+    @staticmethod
+    def getLabel(text):
+        """Get a bold label with the given text."""
+        label = gtk.Label("<b>" + text + "</b>")
+        label.set_use_markup(True)
+        label.set_alignment(0.0, 0.5)
+        return label
+
+    @staticmethod
+    def getDataLabel(width = None, xAlignment = 0.0):
+        """Get a bold label with the given text."""
+        label = gtk.Label()
+        if width is not None:
+            label.set_width_chars(width)
+        label.set_alignment(xAlignment, 0.5)
+        return label
+
+    @staticmethod
+    def getTextWindow(heightRequest = 40):
+        """Get a scrollable text window.
+        
+        Returns a tuple of the following items:
+        - the window,
+        - the text view."""
+        scrolledWindow = gtk.ScrolledWindow()
+        scrolledWindow.set_shadow_type(SHADOW_IN)
+        scrolledWindow.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC)
+
+        textView = gtk.TextView()
+        textView.set_wrap_mode(WRAP_WORD)
+        textView.set_editable(False)
+        textView.set_cursor_visible(False)
+        textView.set_size_request(-1, heightRequest)
+        scrolledWindow.add(textView)
+
+        return (scrolledWindow, textView)
+
+    @staticmethod
+    def tableAttach(table, column, row, labelText, width = None,
+                    dataLabelXAlignment = 0.0):
+        """Attach a labeled data to the given column and row of the
+        table. 
+        
+        If width is given, that will be the width of the data
+        label.
+
+        Returns the data label attached."""
+        dataBox = gtk.HBox()
+        table.attach(dataBox, column, column+1, row, row+1)
+        
+        dataLabel = PIREPViewer.addLabeledData(dataBox, labelText,
+                                               width = width)
+        dataLabel.set_alignment(dataLabelXAlignment, 0.5)
+
+        return dataLabel
+
+    @staticmethod
+    def addLabeledData(hBox, labelText, width = None, dataPadding = 8):
+        """Add a label and a data label to the given HBox.
+        
+        Returnsd the data label."""
+        label = PIREPViewer.getLabel(labelText)
+        hBox.pack_start(label, False, False, 0)
+                
+        dataLabel = PIREPViewer.getDataLabel(width = width)
+        hBox.pack_start(dataLabel, False, False, dataPadding)
+
+        return dataLabel
+
+    @staticmethod
+    def addVFiller(vBox, height = 4):
+        """Add a filler eventbox to the given vertical box."""
+        filler = gtk.EventBox()
+        filler.set_size_request(-1, height)
+        vBox.pack_start(filler, False, False, 0)
+        
+    @staticmethod
+    def timestamp2text(label, timestamp):
+        """Convert the given timestamp into a text containing the hour
+        and minute in UTC and put that text into the given label."""
+        tm = time.gmtime(timestamp)
+        label.set_text("%02d:%02d" % (tm.tm_hour, tm.tm_min))
+
+    def __init__(self, gui):
+        """Construct the PIREP viewer."""
+        super(PIREPViewer, self).__init__(title = WINDOW_TITLE_BASE +
+                                          " - " +
+                                          xstr("pirepView_title"),
+                                          parent = gui.mainWindow)
+                                          
+        self.set_resizable(False)
+
+        self._gui = gui
+        
+        contentArea = self.get_content_area()
+        dataTab = self._buildDataTab()
+        contentArea.pack_start(dataTab, False, False, 0)
+        
+    def setPIREP(self, pirep):
+        """Setup the data in the dialog from the given PIREP."""
+        bookedFlight = pirep.bookedFlight
+
+        self._callsign.set_text(bookedFlight.callsign)
+        self._tailNumber.set_text(bookedFlight.tailNumber)
+        aircraftType = xstr("aircraft_" + icaoCodes[bookedFlight.aircraftType].lower())
+        self._aircraftType.set_text(aircraftType)
+        
+        self._departureICAO.set_text(bookedFlight.departureICAO)
+        self._departureTime.set_text("%02d:%02d" % \
+                                     (bookedFlight.departureTime.hour,
+                                      bookedFlight.departureTime.minute))
+
+        self._arrivalICAO.set_text(bookedFlight.arrivalICAO)
+        self._arrivalTime.set_text("%02d:%02d" % \
+                                   (bookedFlight.arrivalTime.hour,
+                                    bookedFlight.arrivalTime.minute))
+
+        self._numPassengers.set_text(str(bookedFlight.numPassengers))
+        self._numCrew.set_text(str(bookedFlight.numCrew))
+        self._bagWeight.set_text(str(bookedFlight.bagWeight))
+        self._cargoWeight.set_text(str(bookedFlight.cargoWeight))
+        self._mailWeight.set_text(str(bookedFlight.mailWeight))
+        
+        self._route.get_buffer().set_text(bookedFlight.route)
+
+        self._filedCruiseLevel.set_text("FL" + str(pirep.filedCruiseAltitude/100))
+
+        if pirep.cruiseAltitude != pirep.filedCruiseAltitude:
+            self._modifiedCruiseLevel.set_text("FL" + str(pirep.cruiseAltitude/100))
+        else:
+            self._modifiedCruiseLevel.set_text("-")
+
+        self._userRoute.get_buffer().set_text(pirep.route)
+
+        self._departureMETAR.get_buffer().set_text(pirep.departureMETAR)
+
+        self._arrivalMETAR.get_buffer().set_text(pirep.arrivalMETAR)
+        self._departureRunway.set_text(pirep.departureRunway)
+        self._sid.set_text(pirep.sid)
+
+        self._star.set_text("-" if pirep.star is None else pirep.star)
+        self._transition.set_text("-" if pirep.transition is None else pirep.transition)
+        self._approachType.set_text(pirep.approachType)
+        self._arrivalRunway.set_text(pirep.arrivalRunway)
+
+        PIREPViewer.timestamp2text(self._blockTimeStart, pirep.blockTimeStart)
+        PIREPViewer.timestamp2text(self._blockTimeEnd, pirep.blockTimeEnd)
+        PIREPViewer.timestamp2text(self._flightTimeStart, pirep.flightTimeStart)
+        PIREPViewer.timestamp2text(self._flightTimeEnd, pirep.flightTimeEnd)
+        
+        self._flownDistance.set_text("%.1f" % (pirep.flownDistance,))
+        self._fuelUsed.set_text("%.0f" % (pirep.fuelUsed,))
+
+        rating = pirep.rating
+        if rating<0:
+            self._rating.set_markup('<b><span foreground="red">NO GO</span></b>')
+        else:
+            self._rating.set_text("%.1f %%" % (rating,))
+
+        self._flightType.set_text(xstr("flighttype_" + 
+                                       flightType2string(pirep.flightType)))
+        self._online.set_text(xstr("pirepView_" +
+                                   ("yes" if pirep.online else "no")))
+
+        delayCodes = ""
+        for code in pirep.delayCodes:
+            if delayCodes: delayCodes += ", "
+            delayCodes += PIREP.delayCodes[code]
+        
+        self._delayCodes.get_buffer().set_text(delayCodes)
+
+    def _buildDataTab(self):
+        """Build the data tab of the viewer."""
+        table = gtk.Table(1, 2)
+        table.set_row_spacings(4)
+        table.set_col_spacings(16)
+        table.set_homogeneous(True)
+
+        box1 = gtk.VBox()
+        table.attach(box1, 0, 1, 0, 1)
+        
+        box2 = gtk.VBox()
+        table.attach(box2, 1, 2, 0, 1)
+        
+        flightFrame = self._buildFlightFrame()
+        box1.pack_start(flightFrame, False, False, 4)
+
+        routeFrame = self._buildRouteFrame()
+        box1.pack_start(routeFrame, False, False, 4)
+
+        departureFrame = self._buildDepartureFrame()
+        box2.pack_start(departureFrame, True, True, 4)
+
+        arrivalFrame = self._buildArrivalFrame()
+        box2.pack_start(arrivalFrame, True, True, 4)
+
+        statisticsFrame = self._buildStatisticsFrame()
+        box2.pack_start(statisticsFrame, False, False, 4)
+
+        miscellaneousFrame = self._buildMiscellaneousFrame()
+        box1.pack_start(miscellaneousFrame, False, False, 4)
+
+        return table
+
+    def _buildFlightFrame(self):
+        """Build the frame for the flight data."""
+        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_flight"))
+        
+        dataBox = gtk.HBox()
+        mainBox.pack_start(dataBox, False, False, 0)
+        
+        self._callsign = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_callsign"),
+                                       width = 8)
+
+        self._tailNumber = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_tailNumber"),
+                                       width = 7)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        dataBox = gtk.HBox()
+        mainBox.pack_start(dataBox, False, False, 0)
+
+        self._aircraftType = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_aircraftType"),
+                                       width = 25)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        table = gtk.Table(3, 2)
+        mainBox.pack_start(table, False, False, 0)
+        table.set_row_spacings(4)
+        table.set_col_spacings(8)        
+
+        self._departureICAO = \
+            PIREPViewer.tableAttach(table, 0, 0,
+                                    xstr("pirepView_departure"),
+                                    width = 5)
+
+        self._departureTime = \
+            PIREPViewer.tableAttach(table, 1, 0,
+                                    xstr("pirepView_departure_time"),
+                                    width = 6)
+
+        self._arrivalICAO = \
+            PIREPViewer.tableAttach(table, 0, 1,
+                                    xstr("pirepView_arrival"),
+                                    width = 5)
+
+        self._arrivalTime = \
+            PIREPViewer.tableAttach(table, 1, 1,
+                                    xstr("pirepView_arrival_time"),
+                                    width = 6)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        table = gtk.Table(3, 2)
+        mainBox.pack_start(table, False, False, 0)
+        table.set_row_spacings(4)
+        table.set_col_spacings(8)        
+
+        self._numPassengers = \
+            PIREPViewer.tableAttach(table, 0, 0,
+                                    xstr("pirepView_numPassengers"),
+                                    width = 4)
+
+        self._numCrew = \
+            PIREPViewer.tableAttach(table, 1, 0,
+                                    xstr("pirepView_numCrew"),
+                                    width = 3)
+
+        self._bagWeight = \
+            PIREPViewer.tableAttach(table, 0, 1, 
+                                    xstr("pirepView_bagWeight"),
+                                    width = 5)
+
+        self._cargoWeight = \
+            PIREPViewer.tableAttach(table, 1, 1, 
+                                    xstr("pirepView_cargoWeight"),
+                                    width = 5)
+
+        self._mailWeight = \
+            PIREPViewer.tableAttach(table, 2, 1, 
+                                    xstr("pirepView_mailWeight"),
+                                    width = 5)
+            
+        PIREPViewer.addVFiller(mainBox)
+
+        mainBox.pack_start(PIREPViewer.getLabel(xstr("pirepView_route")),
+                           False, False, 0)
+        
+        (routeWindow, self._route) = PIREPViewer.getTextWindow()
+        mainBox.pack_start(routeWindow, False, False, 0)
+
+        return frame
+
+    def _buildRouteFrame(self):
+        """Build the frame for the user-specified route and flight
+        level."""
+        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_route"))
+
+        levelBox = gtk.HBox()
+        mainBox.pack_start(levelBox, False, False, 0)
+        
+        self._filedCruiseLevel = \
+            PIREPViewer.addLabeledData(levelBox, 
+                                       xstr("pirepView_filedCruiseLevel"),
+                                       width = 6)
+
+        self._modifiedCruiseLevel = \
+            PIREPViewer.addLabeledData(levelBox,
+                                       xstr("pirepView_modifiedCruiseLevel"),
+                                       width = 6)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        (routeWindow, self._userRoute) = PIREPViewer.getTextWindow()
+        mainBox.pack_start(routeWindow, False, False, 0)
+
+        return frame
+
+    def _buildDepartureFrame(self):
+        """Build the frame for the departure data."""        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_departure"))
+
+        mainBox.pack_start(PIREPViewer.getLabel("METAR:"),
+                           False, False, 0)
+        (metarWindow, self._departureMETAR) = \
+            PIREPViewer.getTextWindow(heightRequest = -1)
+        mainBox.pack_start(metarWindow, True, True, 0)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        dataBox = gtk.HBox()
+        mainBox.pack_start(dataBox, False, False, 0)
+        
+        self._departureRunway = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_runway"),
+                                       width = 5)
+
+        self._sid = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_sid"),
+                                       width = 12)
+
+        return frame
+                           
+    def _buildArrivalFrame(self):
+        """Build the frame for the arrival data."""        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_arrival"))
+
+        mainBox.pack_start(PIREPViewer.getLabel("METAR:"),
+                           False, False, 0)
+        (metarWindow, self._arrivalMETAR) = \
+            PIREPViewer.getTextWindow(heightRequest = -1)
+        mainBox.pack_start(metarWindow, True, True, 0)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        table = gtk.Table(2, 2)
+        mainBox.pack_start(table, False, False, 0)
+        table.set_row_spacings(4)
+        table.set_col_spacings(8)        
+
+        self._star = \
+            PIREPViewer.tableAttach(table, 0, 0,
+                                    xstr("pirepView_star"),
+                                    width = 12)
+
+        self._transition = \
+            PIREPViewer.tableAttach(table, 1, 0,
+                                    xstr("pirepView_transition"),
+                                    width = 12)
+                           
+        self._approachType = \
+            PIREPViewer.tableAttach(table, 0, 1,
+                                    xstr("pirepView_approachType"),
+                                    width = 7)
+                           
+        self._arrivalRunway = \
+            PIREPViewer.tableAttach(table, 1, 1, 
+                                    xstr("pirepView_runway"),
+                                    width = 5)
+                           
+        return frame
+
+    def _buildStatisticsFrame(self):
+        """Build the frame for the statistics data."""        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_statistics"))
+
+        table = gtk.Table(4, 2)
+        mainBox.pack_start(table, False, False, 0)
+        table.set_row_spacings(4)
+        table.set_col_spacings(8)
+        
+        self._blockTimeStart = \
+            PIREPViewer.tableAttach(table, 0, 0,
+                                    xstr("pirepView_blockTimeStart"),
+                                    width = 6)
+        
+        self._blockTimeEnd = \
+            PIREPViewer.tableAttach(table, 1, 0,
+                                    xstr("pirepView_blockTimeEnd"),
+                                    width = 8)
+
+        self._flightTimeStart = \
+            PIREPViewer.tableAttach(table, 0, 1,
+                                    xstr("pirepView_flightTimeStart"),
+                                    width = 6)
+        
+        self._flightTimeEnd = \
+            PIREPViewer.tableAttach(table, 1, 1, 
+                                    xstr("pirepView_flightTimeEnd"),
+                                    width = 6)
+
+        self._flownDistance = \
+            PIREPViewer.tableAttach(table, 0, 2,
+                                    xstr("pirepView_flownDistance"),
+                                    width = 8)
+        
+        self._fuelUsed = \
+            PIREPViewer.tableAttach(table, 1, 2,
+                                    xstr("pirepView_fuelUsed"),
+                                    width = 6)
+        
+        self._rating = \
+            PIREPViewer.tableAttach(table, 0, 3,
+                                    xstr("pirepView_rating"),
+                                    width = 7)
+        return frame
+
+    def _buildMiscellaneousFrame(self):
+        """Build the frame for the miscellaneous data."""        
+        (frame, mainBox) = PIREPViewer.createFrame(xstr("pirepView_frame_miscellaneous"))
+        
+        dataBox = gtk.HBox()
+        mainBox.pack_start(dataBox, False, False, 0)
+        
+        self._flightType = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_flightType"),
+                                       width = 10)
+            
+        self._online = \
+            PIREPViewer.addLabeledData(dataBox,
+                                       xstr("pirepView_online"),
+                                       width = 5)
+
+        PIREPViewer.addVFiller(mainBox)
+
+        mainBox.pack_start(PIREPViewer.getLabel(xstr("pirepView_delayCodes")),
+                           False, False, 0)
+    
+        (textWindow, self._delayCodes) = PIREPViewer.getTextWindow()
+        mainBox.pack_start(textWindow, False, False, 0)
+
+        return frame        
+
+#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
Index: src/mlx/i18n.py
===================================================================
--- src/mlx/i18n.py	(revision 217)
+++ src/mlx/i18n.py	(revision 220)
@@ -873,4 +873,52 @@
                  "you may try again later. Or it can be a bug;\n" \
                  "see the debug log for more information.")
+
+        self.add("viewPIREP", "_View PIREP...")
+
+        self.add("pirepView_title", "PIREP viewer")
+
+        self.add("pirepView_frame_flight", "Flight")
+        self.add("pirepView_callsign", "Callsign:")
+        self.add("pirepView_tailNumber", "Tail no.:")
+        self.add("pirepView_aircraftType", "Aircraft:")
+        self.add("pirepView_departure", "Departure airport:")
+        self.add("pirepView_departure_time", "time:")
+        self.add("pirepView_arrival", "Arrival airport:")
+        self.add("pirepView_arrival_time", "time:")
+        self.add("pirepView_numPassengers", "PAX:")
+        self.add("pirepView_numCrew", "Crew:")
+        self.add("pirepView_bagWeight", "Baggage:")
+        self.add("pirepView_cargoWeight", "Cargo:")
+        self.add("pirepView_mailWeight", "Mail:")
+        self.add("pirepView_route", "MAVA route:")
+
+        self.add("pirepView_frame_route", "Route filed")
+        self.add("pirepView_filedCruiseLevel", "Cruise level:")
+        self.add("pirepView_modifiedCruiseLevel", "modified to:")
+
+        self.add("pirepView_frame_departure", "Departure")
+        self.add("pirepView_runway", "Runway:")
+        self.add("pirepView_sid", "SID:")
+
+        self.add("pirepView_frame_arrival", "Arrival")
+        self.add("pirepView_star", "STAR:")
+        self.add("pirepView_transition", "Transition:")
+        self.add("pirepView_approachType", "Approach:")
+
+        self.add("pirepView_frame_statistics", "Statistics")
+        self.add("pirepView_blockTimeStart", "Block time start:")
+        self.add("pirepView_blockTimeEnd", "end:")
+        self.add("pirepView_flightTimeStart", "Flight time start:")
+        self.add("pirepView_flightTimeEnd", "end:")
+        self.add("pirepView_flownDistance", "Flown distance:")
+        self.add("pirepView_fuelUsed", "Fuel used:")
+        self.add("pirepView_rating", "Rating:")
+
+        self.add("pirepView_frame_miscellaneous", "Miscellaneous")
+        self.add("pirepView_flightType", "Type:")
+        self.add("pirepView_online", "Online:")
+        self.add("pirepView_yes", "yes")
+        self.add("pirepView_no", "no")
+        self.add("pirepView_delayCodes", "Delay codes:")
 
 #------------------------------------------------------------------------------
Index: src/mlx/pirep.py
===================================================================
--- src/mlx/pirep.py	(revision 151)
+++ src/mlx/pirep.py	(revision 220)
@@ -10,14 +10,14 @@
 class PIREP(object):
     """A pilot's report of a flight."""
-    _delayCodeNames = { const.DELAYCODE_LOADING : "Loading Problems",
-                        const.DELAYCODE_NETWORK : "Net Problems",
-                        const.DELAYCODE_SYSTEM : "System Crash/Freezing",
-                        const.DELAYCODE_TRAFFIC : "Traffic Problems",
-                        const.DELAYCODE_WEATHER : "Weather Problems",
-                        const.DELAYCODE_VATSIM : "VATSIM Problem",
-                        const.DELAYCODE_CONTROLLER : "Controller's Fault",
-                        const.DELAYCODE_NAVIGATION : "Navigation Problem",
-                        const.DELAYCODE_APRON : "Apron Navigation Problems",
-                        const.DELAYCODE_PERSONAL : "Personal Reasons" }
+    delayCodeNames = { const.DELAYCODE_LOADING : "Loading Problems",
+                       const.DELAYCODE_NETWORK : "Net Problems",
+                       const.DELAYCODE_SYSTEM : "System Crash/Freezing",
+                       const.DELAYCODE_TRAFFIC : "Traffic Problems",
+                       const.DELAYCODE_WEATHER : "Weather Problems",
+                       const.DELAYCODE_VATSIM : "VATSIM Problem",
+                       const.DELAYCODE_CONTROLLER : "Controller's Fault",
+                       const.DELAYCODE_NAVIGATION : "Navigation Problem",
+                       const.DELAYCODE_APRON : "Apron Navigation Problems",
+                       const.DELAYCODE_PERSONAL : "Personal Reasons" }
 
     @staticmethod
@@ -117,5 +117,5 @@
             for code in self.delayCodes:
                 if s: s += ", "
-                s += PIREP._delayCodeNames[code]
+                s += PIREP.delayCodeNames[code]
             return s
 
