anchor.diff:  
           let toBeacon (pkt : Udp.UdpReceived) =
               try
  -                let av = DefenderAvailability.ParseFrom(pkt.udpResult.Buffer)
  +                let av = DefenderAvailability.Parser.ParseFrom(pkt.udpResult.Buffer)
                   let beacon =
  -                    { timestamp = pkt.timestamp
  -                      srcIpAddr = pkt.udpResult.RemoteEndPoint.Address
  -                      serialNumber = int av.SerialNumber
  -                      systemType = enum (int av.SystemType)
  -                      softwareVersion = toSoftwareVersion av.SoftwareVersion
  -                      connectionState = enum (int av.ConnectionState)
  -                      recordState = if av.HasRecordState then Some (enum (int av.RecordState)) else None
  -                      storageState = if av.HasStorageState then Some (enum (int av.StorageState)) else None
  -                      storageLevel = if av.HasStorageLevel then Some av.StorageLevel else None
  -                      batteryState = if av.HasBatteryState then Some (enum (int av.BatteryState)) else None
  -                      batteryLevel = if av.HasBatteryLevel then Some av.BatteryLevel else None }
  +                    { Timestamp = pkt.timestamp
  +                      SrcIpAddr = pkt.udpResult.RemoteEndPoint.Address
  +                      SerialNumber = int av.SerialNumber
  +                      SystemType = enum (int av.SystemType)
  +                      SoftwareVersion = toSoftwareVersion av.SoftwareVersion
  +                      ConnectionState = enum (int av.ConnectionState)
  +                      RecordState =  enum (int av.RecordState)
  +                      StorageState = enum (int av.StorageState)
  +                      StorageLevel = av.StorageLevel
  +                      BatteryState = enum (int av.BatteryState)
  +                      BatteryLevel = av.BatteryLevel }
                   Some beacon
               with
                   _ -> None
  
positive.code: 
          let toBeacon (pkt : Udp.UdpReceived) =
              try
                  let av = SonarAvailability.ParseFrom(pkt.udpResult.Buffer)
                  let beacon =
                      { timestamp = pkt.timestamp
                        srcIpAddr = pkt.udpResult.RemoteEndPoint.Address
                        serialNumber = int av.SerialNumber
                        systemType = enum (int av.SystemType)
                        softwareVersion = toSoftwareVersion av.SoftwareVersion
                        connectionState = enum (int av.ConnectionState)
                        cpuTemp = Some(av.CpuTemp)
                        isDiverHeld = av.HasIsDiverHeld && av.IsDiverHeld
                        isVoyager = av.HasSystemVariants
                                      && av.SystemVariants.EnabledList |> Seq.contains SystemVariant.Voyager
                      }
                  Some beacon
              with
  
negative.code: 
                  // Beacon management
  
                  member __.GetKey beacon = beacon.SerialNumber
  
                  member __.IsChanged old newer = old.SrcIpAddr <> newer.SrcIpAddr
  
                  // Logging
  
                  member __.Added beacon =
  
                      ArisLog.logSonarDetected beacon.SerialNumber beacon.SrcIpAddr
  
                  member __.Expired beacon lastUpdate =
  
                      ArisLog.logSonarExpired beacon.SerialNumber lastUpdate beacon.SrcIpAddr
  
                  member __.Replaced old newer =
  
                      ArisLog.logSonarChangedAddress old.SerialNumber old.SrcIpAddr newer.SrcIpAddr
          }
  
          let combinedNotifications = match callbacks with
  