         }
     }
 
+    // Variables required to fetch the messages of the Subscription
+    // to the view model.
     internal var messagesQueryToken: NotificationToken?
     internal var messagesQuery: Results<Message>?
+
+    /**
+     This block is going to be called every time there's
+     an update in the data of the view model.
+     */
     internal var onDataChanged: VoidCompletion?
 
+    /**
+     Last time user read the messages from the Subscription from this view model.
+     */
     internal var lastSeen = Date()
+
+    /**
+     If the view model is requesting new data from the API.
+     */
     internal var requestingData = false
+
+    /**
+     If there's more data to be fetched from the API.
+     */
     internal var hasMoreData = true
 
     // MARK: Life Cycle Controls


    // MARK: Data Manipulation

    internal var data: [AnyChatSection] = [] {
        didSet {
            onDataChanged?()

    internal var subscription: Subscription? {
        didSet {
            guard let subscription = subscription?.validated() else { return }
            lastSeen = subscription.lastSeen ?? Date()
            subscribe(for: subscription)
            messagesQuery = subscription.fetchMessagesQueryResults()
            messagesQueryToken = messagesQuery?.observe(handleDataUpdates)
