diff --git a/src/parser/feedParser.ts b/src/parser/feedParser.ts
index 5acb920f6b15fbe7c7bd8c2447b8ab486e015ad3..8b8d87528ce16b9bf59e87e44156deff240d9341 100644
--- a/src/parser/feedParser.ts
+++ b/src/parser/feedParser.ts
@@ -10,20 +10,13 @@ export default class FeedParser {
 	}
 
 	public async findItemByTitle(title: string, url: string): Promise<Episode> {
-		const body = await this.parseFeed(url);
-
-		const items = body.querySelectorAll("item");
+		const episodes = await this.getEpisodes(url);
 
-		const item = Array.from(items).find(item => {
-			const parsed = this.parseItem(item);
-			return parsed.title === title;
-		});
+		const episode = episodes.find(episode => episode.title === title);
 
-		if (!item) {
+		if (episode == null) {
 			throw new Error("Could not find episode");
 		}
-
-		const episode =  this.parseItem(item);
 		
 		const feed = await this.getFeed(url);
 
@@ -74,10 +67,21 @@ export default class FeedParser {
 	protected parsePage(page: Document): Episode[] {
 		const items = page.querySelectorAll("item");
 
-		return Array.from(items).map(this.parseItem.bind(this));
+		return Array.from(items).reduce(
+			(acc, rawItem) => {
+				const item = this.parseItem(rawItem);
+
+				if (item != null) {
+					return [item, ...acc];
+				}
+
+				return acc;
+			},
+			[],
+		);
 	}
 
-	protected parseItem(item: Element): Episode {
+	protected parseItem(item: Element): Episode | null {
 		const titleEl = item.querySelector("title");
 		const streamUrlEl = item.querySelector("enclosure");
 		const linkEl = item.querySelector("link");
@@ -86,8 +90,9 @@ export default class FeedParser {
 		const itunesImageEl = item.querySelector("image");
 
 		if (!titleEl || !streamUrlEl || !pubDateEl) {
-			console.log(titleEl, streamUrlEl, linkEl, descriptionEl, pubDateEl);
-			throw new Error("Invalid RSS feed");
+			console.log('Got invalid feed item', titleEl, streamUrlEl, linkEl, descriptionEl, pubDateEl);
+
+			return null;
 		}
 
 		const title = titleEl.textContent || "";