diff --git a/ui/src/album/AlbumActions.js b/ui/src/album/AlbumActions.js
index 433da1d62..8c647e2db 100644
--- a/ui/src/album/AlbumActions.js
+++ b/ui/src/album/AlbumActions.js
@@ -8,7 +8,7 @@ import PlayArrowIcon from '@material-ui/icons/PlayArrow'
 import ShuffleIcon from '@material-ui/icons/Shuffle'
 import React from 'react'
 import { useDispatch } from 'react-redux'
-import { playAlbum } from '../audioplayer'
+import { playAlbum, shuffleAlbum } from '../audioplayer'
 
 export const AlbumActions = ({
   className,
@@ -28,17 +28,6 @@ export const AlbumActions = ({
     return acc
   }, {})
 
-  const shuffle = (data) => {
-    const ids = Object.keys(data)
-    for (let i = ids.length - 1; i > 0; i--) {
-      let j = Math.floor(Math.random() * (i + 1))
-      ;[ids[i], ids[j]] = [ids[j], ids[i]]
-    }
-    const shuffled = {}
-    ids.forEach((id) => (shuffled[id] = data[id]))
-    return shuffled
-  }
-
   return (
     <TopToolbar className={className} {...sanitizeListRestProps(rest)}>
       <Button
@@ -51,9 +40,7 @@ export const AlbumActions = ({
       </Button>
       <Button
         onClick={() => {
-          const shuffled = shuffle(filteredData)
-          const firstId = Object.keys(shuffled)[0]
-          dispatch(playAlbum(firstId, shuffled))
+          dispatch(shuffleAlbum(filteredData))
         }}
         label={translate('resources.album.actions.shuffle')}
       >
diff --git a/ui/src/audioplayer/index.js b/ui/src/audioplayer/index.js
index 754843c37..146ee4b60 100644
--- a/ui/src/audioplayer/index.js
+++ b/ui/src/audioplayer/index.js
@@ -1,4 +1,10 @@
 import Player from './Player'
-import { addTrack, setTrack, playQueueReducer, playAlbum } from './queue'
+import {
+  addTrack,
+  setTrack,
+  playQueueReducer,
+  playAlbum,
+  shuffleAlbum,
+} from './queue'
 
-export { Player, addTrack, setTrack, playAlbum, playQueueReducer }
+export { Player, addTrack, setTrack, playAlbum, playQueueReducer, shuffleAlbum }
diff --git a/ui/src/audioplayer/queue.js b/ui/src/audioplayer/queue.js
index 416953d69..ec9bb6951 100644
--- a/ui/src/audioplayer/queue.js
+++ b/ui/src/audioplayer/queue.js
@@ -26,6 +26,27 @@ const setTrack = (data) => ({
   data,
 })
 
+const shuffle = (data) => {
+  const ids = Object.keys(data)
+  for (let i = ids.length - 1; i > 0; i--) {
+    let j = Math.floor(Math.random() * (i + 1))
+    ;[ids[i], ids[j]] = [ids[j], ids[i]]
+  }
+  const shuffled = {}
+  ids.forEach((id) => (shuffled[id] = data[id]))
+  return shuffled
+}
+
+const shuffleAlbum = (data) => {
+  const shuffled = shuffle(data)
+  const firstId = Object.keys(shuffled)[0]
+  return {
+    type: PLAYER_PLAY_ALBUM,
+    id: firstId,
+    data: shuffled,
+  }
+}
+
 const playAlbum = (id, data) => ({
   type: PLAYER_PLAY_ALBUM,
   id,
@@ -109,4 +130,12 @@ const playQueueReducer = (
   }
 }
 
-export { addTrack, setTrack, playAlbum, syncQueue, scrobble, playQueueReducer }
+export {
+  addTrack,
+  setTrack,
+  playAlbum,
+  syncQueue,
+  scrobble,
+  shuffleAlbum,
+  playQueueReducer,
+}