 		}
 	}
 
-	func refreshArticles(_ account: Account, completion: @escaping (Result<Void, Error>) -> Void) {
+	func refreshArticles(_ account: Account, completion: @escaping (() -> Void)) {
 
 		os_log(.debug, log: log, "Refreshing articles...")
 		
+		let group = DispatchGroup()
+		
 		for feed in account.flattenedFeeds() {
 		
+			group.enter()
+			
 			caller.retrieveEntries(feed.feedID) { [weak self] result in
 				
 				switch result {
 				case .success(let (entries, page)):
 					
-					self?.processEntries(account: account, entries: entries, completion: completion)
-					self?.refreshArticles(account, page: page)
+					self?.processEntries(account: account, entries: entries) {
+						self?.refreshArticles(account, page: page) {
+							group.leave()
+						}
+					}
 
 				case .failure(let error):
 					guard let self = self else { return }

			switch result {
			case .success():
				
				self?.refreshArticles(account) { result in
					switch result {
					case .success():
						DispatchQueue.main.async {
							completion?()
						}
					case .failure(let error):
						DispatchQueue.main.async {
							completion?()
							self?.handleError(error)
						}
					}
				}
				
			case .failure(let error):

			
		}
		
		group.notify(queue: DispatchQueue.main) {
			completion()
		}
		
		
	}
	
	func refreshArticles(_ account: Account, page: String?, completion: @escaping (() -> Void)) {
		
		guard let page = page else {
			completion()
			return
		}
		
