     listeners =
       "loc": @onLive
       "att": @onAttitude
-      "start": @onMissionUpdate
       "end": @onMissionEnd
       "mode": @updateVehicleMessage
       "arm": @updateVehicleMessage
+
+      # Contains a complete update of mission state - resent occasionally by the server
       "update": @onMissionUpdate
-      "user": @onUserMessage
+
+      # Formatted the same as an update, but indicates start of a new mission (we treat both cases identically)
+      "start": @onMissionUpdate
+
+      # This is like a mission update, but it is guaranteed to be the most recent flight for the current user
+      # It is also _guaranteed_ to be sent before any start/update msgs on the stream
+      "user": @onMissionUpdate
+
       "mystery": @updateVehicleMessage
       "text": @updateVehicleMessage
 

      if lat? && lon?
        v = @updateVehicle(key, lat, lon, payload)
        @updateMarkerPopup(v, payload)

  onMissionEnd: (data) =>
    vehicleKey = @vehicleKey(data.missionId)
    delete @scope.vehicleMarkers[vehicleKey]
    delete @scope.vehiclePaths[vehicleKey]

  # Returns the marker
  updateVehicle: (vehicleKey, lat, lon, newMission) =>

    # direction of arrow on icon should change depending on direction

    loginName = @authService.getUser()?.login
    v.isMine = loginName == mission?.userName
    @log.debug("#{mission?.userName} #{mission?.id} vs #{loginName} isMine=#{v.isMine}")
    v.icon =
        iconUrl:
          if v.isMine
            mission.userAvatarImage + '?d=mm'
          else if isLive
            'images/vehicle-marker-active.png'
