     let label: EventLoggingLabel?
     let key: String?
     let midnightUTCDate: Date?
+    let siteURLString: String?
     convenience init(_ group: WMFContentGroup?) {
-        self.init(label: group?.eventLoggingLabel, key: group?.key, midnightUTCDate: group?.midnightUTCDate)
+        self.init(label: group?.eventLoggingLabel, key: group?.key, midnightUTCDate: group?.midnightUTCDate, siteURLString: group?.siteURLString)
     }
-    init(label: EventLoggingLabel?, key: String?, midnightUTCDate: Date?) {
+    init(label: EventLoggingLabel?, key: String?, midnightUTCDate: Date?, siteURLString: String?) {
         self.label = label
         self.key = key
         self.midnightUTCDate = midnightUTCDate
+        self.siteURLString = siteURLString
         super.init()
     }
 }

    }

    public func logFeedImpression(for context: FeedFunnelContext?) {
        log(event(category: .feed, label: context?.label, action: .impression, measureAge: measureAge(for: context?.midnightUTCDate)))
    }

    // MARK: Feed detail

    public func logArticleInFeedDetailPreviewed(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feedDetail, label: context?.label, action: .preview, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index))
    }

    public func logArticleInFeedDetailReadingStarted(for context: FeedFunnelContext?, index: Int?, maxViewed: Double) {
        log(event(category: .feedDetail, label: context?.label, action: .readStart, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index, measureTime: measureTime(key: context?.key), measureMaxViewed: maxViewed))
        startMeasuringTime(for: context?.label, key: context?.key)
    }

    public func logFeedCardClosed(for context: FeedFunnelContext?, maxViewed: Double) {
        log(event(category: .feedDetail, label: context?.label, action: .closeCard, measureAge: measureAge(for: context?.midnightUTCDate), measureTime: measureTime(key: context?.key), measureMaxViewed: maxViewed))
    }

    public func logFeedDetailShareTapped(for context: FeedFunnelContext?, index: Int?, midnightUTCDate: Date?) {
        log(event(category: .feedDetail, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index))
    }

    public func logFeedDetailShareTapped(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feedDetail, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: index))
    }

    // MARK: Utilities


    @objc public func logFeedCardOpened(for context: FeedFunnelContext?) {
        startMeasuringTime(for: context?.label, key: context?.key)
        log(event(category: .feed, label: context?.label, action: .openCard, measureAge: measureAge(for: context?.midnightUTCDate)), language: language(from: context?.siteURLString))
    }

    @objc public func logFeedCardDismissed(for context: FeedFunnelContext?) {
        log(event(category: .feed, label: context?.label, action: .dismiss, measureAge: measureAge(for: context?.midnightUTCDate)), language: language(from: context?.siteURLString))
    }

    @objc public func logFeedCardRetained(for context: FeedFunnelContext?) {
        log(event(category: .feed, label: context?.label, action: .retain, measureAge: measureAge(for: context?.midnightUTCDate)), language: language(from: context?.siteURLString))
    }

    @objc public func logFeedCardPreviewed(for context: FeedFunnelContext?, index: Int) {
        log(event(category: .feed, label: context?.label, action: .preview, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: measurePosition(for: context?.label, index: index)), language: language(from: context?.siteURLString))
    }

    public func logFeedCardReadingStarted(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feed, label: context?.label, action: .readStart, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: measurePosition(for: context?.label, index: index)), language: language(from: context?.siteURLString))
    }

    public func logFeedShareTapped(for context: FeedFunnelContext?, index: Int?) {
        log(event(category: .feed, label: context?.label, action: .shareTap, measureAge: measureAge(for: context?.midnightUTCDate), measurePosition: measurePosition(for: context?.label, index: index)), language: language(from: context?.siteURLString))
    }

    public func logFeedRefreshed() {
