diff --git a/src/dbUtils.c b/src/dbUtils.c
index 359c8db47..e56b7438d 100644
--- a/src/dbUtils.c
+++ b/src/dbUtils.c
@@ -135,8 +135,7 @@ searchStatsInDirectory(struct song *song, void *data)
 
 	if (locate_song_match(song, stats->criteria)) {
 		stats->numberOfSongs++;
-		if (song->tag->time > 0)
-			stats->playTime += song->tag->time;
+		stats->playTime += song_get_duration(song);
 	}
 
 	return 0;
diff --git a/src/player_thread.c b/src/player_thread.c
index 83f348d19..1a92a3182 100644
--- a/src/player_thread.c
+++ b/src/player_thread.c
@@ -212,8 +212,7 @@ player_wait_for_decoder(struct player *player)
 	player_lock();
 
 	/* update player_control's song information */
-	pc.total_time = pc.next_song->tag != NULL
-		? pc.next_song->tag->time : 0;
+	pc.total_time = song_get_duration(pc.next_song);
 	pc.bit_rate = 0;
 	audio_format_clear(&pc.audio_format);
 
diff --git a/src/song.c b/src/song.c
index faaa208ca..bc6cb11c4 100644
--- a/src/song.c
+++ b/src/song.c
@@ -80,3 +80,12 @@ song_get_uri(const struct song *song)
 		return g_strconcat(directory_get_path(song->parent),
 				   "/", song->uri, NULL);
 }
+
+double
+song_get_duration(const struct song *song)
+{
+	if (song->tag == NULL)
+		return 0;
+
+	return song->tag->time;
+}
diff --git a/src/song.h b/src/song.h
index c8e80b0d1..832f3d700 100644
--- a/src/song.h
+++ b/src/song.h
@@ -69,6 +69,9 @@ song_file_update_inarchive(struct song *song);
 char *
 song_get_uri(const struct song *song);
 
+double
+song_get_duration(const struct song *song);
+
 static inline bool
 song_in_database(const struct song *song)
 {