 private extension NewsViewController {
 
     @objc func parse() {
-        parser?.stopParsing()
-        feedItems = []
+        guard !parser.isParsing else { return }
 
-        parser = MWFeedParser(feedURL: URL(string: RSSFeedURL)!)
-        parser?.delegate = self
-        parser?.parse()
+        DispatchQueue.global().async {
+            self.parsingFeedItems = []
+            if self.parser.parse() {
+                self.feedItems = self.parsingFeedItems ?? []
+            }
+
+            DispatchQueue.main.async {
+                self.refreshControl?.endRefreshing()
+                self.tableView?.reloadData()
+            }
+        }
     }
 
 }


class NewsViewController: UITableViewController {

    fileprivate var parser: MWFeedParser?
    fileprivate var feedItems = [MWFeedItem]()

    init() {
        super.init(style: .plain)
        title = "News"
    }

    required init?(coder aDecoder: NSCoder) {

extension NewsViewController: MWFeedParserDelegate {

    func feedParser(_ parser: MWFeedParser!, didParseFeedItem item: MWFeedItem!) {
        parsingFeedItems?.append(item)
    }

    func feedParserDidFinish(_ parser: MWFeedParser!) {
