diff --git a/src/ui/PodcastView/EpisodeList.svelte b/src/ui/PodcastView/EpisodeList.svelte
index 90ba6efa3aa20de950415e286dbd2bacf49d27f6..feca1bee14d9634f8d24945e400f6fbf960b475d 100644
--- a/src/ui/PodcastView/EpisodeList.svelte
+++ b/src/ui/PodcastView/EpisodeList.svelte
@@ -32,6 +32,7 @@
 		<Icon
 			 icon="refresh-cw"
 			 size={25}
+			 on:click={() => dispatch("clickRefresh")}
 		/>
 	</div>
 
diff --git a/src/ui/PodcastView/PodcastView.svelte b/src/ui/PodcastView/PodcastView.svelte
index d2f3e56e7f39e20742c4ee144cc98df339c5b3d8..1767040db5e98ac191bc182f4568cd00aeef65a5 100644
--- a/src/ui/PodcastView/PodcastView.svelte
+++ b/src/ui/PodcastView/PodcastView.svelte
@@ -24,7 +24,7 @@
 		return await (new FeedParser(feed).parse(feed.url));
 	}
 
-	function handleClickPodcast(event: CustomEvent<{ feed: PodcastFeed }>) {
+	async function handleClickPodcast(event: CustomEvent<{ feed: PodcastFeed }>) {
 		episodeList = [];
 
 		const { feed } = event.detail;
@@ -35,10 +35,10 @@
 		if (cachedEpisodesInFeed && cachedEpisodesInFeed.length > 0) {
 			episodeList = cachedEpisodesInFeed;
 		} else {
-			fetchEpisodes(feed).then(episodes => {
-				episodeList = episodes;
-				episodeCache.update(cache => ({ ...cache, [feed.title]: episodes }));
-			});
+			const episodes = await fetchEpisodes(feed);
+			
+			episodeList = episodes;
+			episodeCache.update(cache => ({ ...cache, [feed.title]: episodes }));
 		}
 
 		viewState = ViewState.EpisodeList;
@@ -51,6 +51,15 @@
 		viewState = ViewState.Player;
 	}
 
+	async function handleClickRefresh() {
+		if (!selectedFeed) return;
+		const { title } = selectedFeed;
+		const episodes = await fetchEpisodes(selectedFeed)
+
+		episodeList = episodes;
+		episodeCache.update(cache => ({ ...cache, [title]: episodes }));
+	}
+
 	onDestroy(unsubscribe);
 </script>
 
@@ -68,6 +77,7 @@
 			feed={selectedFeed}
 			episodes={episodeList}
 			on:clickEpisode={handleClickEpisode}
+			on:clickRefresh={handleClickRefresh}
 		/>
 	{:else if viewState === ViewState.PodcastGrid}
 		<FeedGrid