         }
     }
     
+    private func needsDeepLinkScroll() -> Bool {
+            return deepLinkDestination() != nil
+        }
+        
+    private func reloadDataAndScrollToDeepLink() {
+        
+        guard let destination = deepLinkDestination() else {
+            return
+        }
+        
+        let cellViewModel = destination.0
+        let indexPath = destination.1
+        let commentViewModel = destination.2
+        
+        cellViewModel.isThreadExpanded = true
+        talkPageView.collectionView.reloadData()
+        
+        isProgramaticallyScrolling = true
+        talkPageView.collectionView.scrollToItem(at: indexPath, at: .centeredVertically, animated: false)
+        isProgramaticallyScrolling = false
+        
+        if let commentViewModel = commentViewModel {
+            scrollToComment(commentViewModel: commentViewModel, animated: false)
+        }
+    }
+    
+    private func deepLinkDestination() -> (TalkPageCellViewModel, IndexPath, TalkPageCellCommentViewModel?)? {
+        
+        guard let deepLinkData = viewModel.deepLinkData,
+              let topicTitle = deepLinkData.topicTitle.unescapedNormalizedPageTitle else {
+            return nil
+        }
+        
+        var targetIndexPath: IndexPath?
+        var targetCellViewModel: TalkPageCellViewModel?
+        var targetCommentViewModel: TalkPageCellCommentViewModel?
+        
+        for (index, cellViewModel) in viewModel.topics.enumerated() {
+            if cellViewModel.topicTitle.removingHTML == topicTitle {
+                targetIndexPath = IndexPath(item: index, section: 0)
+                targetCellViewModel = cellViewModel
+                break
+            }
+        }
+        
+        guard let targetCellViewModel = targetCellViewModel,
+            let targetIndexPath = targetIndexPath else {
+            return nil
+        }
+        
+        if let replyText = deepLinkData.replyText {
+            
+            for commentViewModel in targetCellViewModel.allCommentViewModels {
+                if commentViewModel.text.removingHTML.contains(replyText.removingHTML) {
+                    targetCommentViewModel = commentViewModel
+                }
+            }
+        }
+        
+        return (targetCellViewModel, targetIndexPath, targetCommentViewModel)
+    }
+    
     private func scrollToNewComment(oldCellViewModel: TalkPageCellViewModel?, oldCommentViewModels: [TalkPageCellCommentViewModel]?) {
         
         guard let oldCellViewModel = oldCellViewModel,

        return newComment
    }
    
    private func scrollToComment(commentViewModel: TalkPageCellCommentViewModel) {
        
        guard let cellViewModel = commentViewModel.cellViewModel else {
            return

                         if let commentView = talkPageCell.commentViewForViewModel(commentViewModel),
                             let convertedCommentViewFrame = commentView.superview?.convert(commentView.frame, to: collectionView) {
                             let shiftedFrame = CGRect(x: convertedCommentViewFrame.minX, y: convertedCommentViewFrame.minY + 50, width: convertedCommentViewFrame.width, height: convertedCommentViewFrame.height)
                                 collectionView.scrollRectToVisible(shiftedFrame, animated: animated)
                         }
                    }
                }
