cl.websocketTrackers = websocketTrackers{
                PeerId: cl.peerID,
                Logger: cl.logger,
-               GetAnnounceRequest: func(event tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest {
+               GetAnnounceRequest: func(event tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error) {
                        cl.lock()
                        defer cl.unlock()
-                       return cl.torrents[infoHash].announceRequest(event)
+                       t, ok := cl.torrents[infoHash]
+                       if !ok {
+                               return tracker.AnnounceRequest{}, errors.New("torrent not tracked by client")
+                       }
+                       return t.announceRequest(event), nil
                },
                OnConn: func(dc datachannel.ReadWriteCloser, dcc webtorrent.DataChannelContext) {
                        cl.lock()
 
 // Client represents the webtorrent client
 type TrackerClient struct {
        Url                string
-       GetAnnounceRequest func(_ tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest
+       GetAnnounceRequest func(_ tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error)
        PeerId             [20]byte
        OnConn             onDataChannelOpen
        Logger             log.Logger
                return fmt.Errorf("creating offer: %w", err)
        }
 
-       request := tc.GetAnnounceRequest(event, infoHash)
+       request, err := tc.GetAnnounceRequest(event, infoHash)
+       if err != nil {
+               return fmt.Errorf("getting announce parameters: %w", err)
+       }
 
        req := AnnounceRequest{
                Numwant:    1, // If higher we need to create equal amount of offers.
 
 type websocketTrackers struct {
        PeerId             [20]byte
        Logger             log.Logger
-       GetAnnounceRequest func(event tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest
+       GetAnnounceRequest func(event tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error)
        OnConn             func(datachannel.ReadWriteCloser, webtorrent.DataChannelContext)
        mu                 sync.Mutex
        clients            map[string]*refCountedWebtorrentTrackerClient