         decisionHandler(WKNavigationActionPolicy.allow)
     }
     
+    func isTableContentNew(oldHTMLTable: inout String, newHTML: String) -> Bool {
+        guard let doc = Kanna.HTML(html: newHTML, encoding: String.Encoding.utf8) else {
+            return false
+        }
+        
+        /**
+         I'm not sure what doc.css("table#queue tbody tr").underestimatedCount is.
+         So I count in a for-loop instead.
+         */
+        
+        let tableAsXPath = doc.css("table#queue tbody tr")
+        var newHTMLTable = ""
+        
+        tableAsXPath.forEach { p in
+            if let text = p.text {
+                newHTMLTable += text
+            }
+        }
+        
+        print(oldHTMLTable)
+        print(newHTMLTable)
+        
+        let result = oldHTMLTable != newHTMLTable
+        oldHTMLTable = newHTMLTable
+        return result
+        
+    }
     
     func parseHTML(html: String) -> Void {
         print(">>> @parseHTML()")
+        guard isTableContentNew(oldHTMLTable: &oldHTMLTable, newHTML: html) else { print("    Nothing new"); return }
         
         if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8) {
             

    var audioPlayer: AVAudioPlayer!
    var students = [Student]()
    var queueChecker = Timer()
    
    private var isOnManagePage: Bool = false {
        didSet {

                }
                
                self.parseRow(row: rowSeparated, queueLength: queueLength)
                
            }
            
            UIApplication.shared.applicationIconBadgeNumber = queueLength
        }
    }
    
//    func isTableContentNew(old: inout String, new: String) -> Bool {
//        print(old)
//        print(new)
//        let result = old != new
//        old = new
//        return result
//    }
    
    
    func parseRow(row: [String], queueLength: Int){
        let name = row[1]
