diff --git a/public/index.php b/public/index.php
index d006f2d4da1e78ea0a6cc469c4ece42c5672ec46..c9ece07209c170d008bba0f163d13abdd0fc6035 100644
--- a/public/index.php
+++ b/public/index.php
@@ -55,7 +55,8 @@ $templateData = [
 ];
 
 $generatePlaylistFromPlaylist = isset($_GET['generate-playlist-from-playlist']);
-$generatePlaylistFromArtists = isset($_GET['generate-playlist-top-artists']);
+$generatePlaylistFromSelectedTopArtists = isset($_GET['generate-playlist-top-artists']);
+$generatePlaylistFromRandomTopArtists = isset($_GET['generate-playlist-random-top-artists']);
 
 if ($generatePlaylistFromPlaylist) {
     $selectedPlaylists = $_GET['selected-playlist'];
@@ -109,7 +110,9 @@ if ($generatePlaylistFromPlaylist) {
     $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
     $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
     $templateData['playlist'] = createDisplayablePlaylist($newPlaylist);
-} elseif ($generatePlaylistFromArtists) {
+
+} elseif ($generatePlaylistFromSelectedTopArtists) {
+
     $selectedArtists = $_GET['selected-artist'];
     error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
     $recommendedTrackIds = [];
@@ -140,6 +143,45 @@ if ($generatePlaylistFromPlaylist) {
         }
     }
 
+    $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
+    $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
+    $templateData['playlist'] = createDisplayablePlaylist($newPlaylist);
+
+} elseif ($generatePlaylistFromRandomTopArtists) {
+
+    $countInTopArtists = random_int(4, 6);
+    $countInLessTopArtists = random_int(4, 6);
+    $limitBetweenTopAndLessTop = $topArtistsCount;
+    $selectedArtists = getRandomArtistsFromTopArtists($api, $countInTopArtists, $countInLessTopArtists, $limitBetweenTopAndLessTop);
+    error_log('Will create new playlist with filterted recommendations from random artists: '.join(', ', $selectedArtists).'".');
+    $recommendedTrackIds = [];
+
+    $shouldFilterByArtists = isset($_GET['check-top-artist-filter-artists']);
+    error_log('Filter by artists in selection: '.($shouldFilterByArtists ? 'yes' : 'no'));
+
+    foreach ($selectedArtists as $selectedArtist) {
+        error_log('Get recommendations for artist '.$selectedArtist.'');
+        $recommendations = $api->getRecommendations([
+            'seed_artists' => $selectedArtist,
+            'limit' => 100
+        ]);
+        error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
+
+        // Filter by artist if requested, remove duplicates
+        foreach ($recommendations->tracks as $recommendedTrack) {
+            if ($shouldFilterByArtists) {
+                $trackArtistInWantedArtists = false;
+                foreach ($recommendedTrack->artists as $trackArtist) {
+                    if (\in_array($trackArtist->id, $selectedArtists)) {
+                        $recommendedTrackIds[$recommendedTrack->id] = 1;
+                    }
+                }
+            } else {
+                $recommendedTrackIds[$recommendedTrack->id] = 1;
+            }
+        }
+    }
+
     $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
     $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist);
     $templateData['playlist'] = createDisplayablePlaylist($newPlaylist);
diff --git a/spotify/lib.php b/spotify/lib.php
index 60cc9e9bcdecd4adbd0eed212289b749211288fe..b8b14d5d57f200eff6c6882de9246a7b76a57ee0 100644
--- a/spotify/lib.php
+++ b/spotify/lib.php
@@ -30,6 +30,40 @@ function pickRandomTrackFromArray($recommendedTrackIds, $count = 50)
     return $pickedTrackIds;
 }
 
+function getRandomArtistsFromTopArtists($api, $countInTopArtists, $countInLessTopArtists, $limitBetweenTopAndLessTop)
+{
+    $top = $api->getMyTop(
+        'artists',
+        [
+          'limit' => $limitBetweenTopAndLessTop,
+          'time_range' => 'short_term'
+        ]
+        )->items;
+    shuffle($top);
+    $pickedTop = array_slice($top, 0, $countInTopArtists);
+
+    $lessTop = $api->getMyTop(
+        'artists',
+        [
+          'limit' => $limitBetweenTopAndLessTop,
+          'offset' => $limitBetweenTopAndLessTop,
+          'time_range' => 'short_term'
+        ]
+        )->items;
+    shuffle($lessTop);
+    $pickedLessTop = array_slice($lessTop, 0, $countInLessTopArtists);
+
+    $randomlySelected = [];
+    foreach ($pickedTop as $artist) {
+        $randomlySelected[] = $artist->id;
+    }
+    foreach ($pickedLessTop as $artist) {
+        $randomlySelected[] = $artist->id;
+    }
+
+    return $randomlySelected;
+}
+
 function createPlaylistWithRandomTracks($api, $trackIds, $count = 50)
 {
     $playlist = createEmptyPlaylist($api);
diff --git a/template.php b/template.php
index c6f9640d3c3ea1d6c7bedaad1690ac408e501f42..c2ed0fc72ebbca588bc45de11b39de7d934249af 100644
--- a/template.php
+++ b/template.php
@@ -53,8 +53,17 @@
     <?php } ?>
 
     <?php if (count($templateData['topArtists'])) { ?>
-      <form class="clearfix">
-        <legend>Generate playlist from artists:</legend>
+      <form class="clearfix mt-2">
+        <div class="row">
+          <div class="col-md-8 col-sm-12">
+            <legend>Generate playlist from artists:</legend>
+          </div>
+          <div class="col-md-4 col-sm-12">
+            <div class="btn-group float-end" role="group" aria-label="Action buttons">
+              <button name="pick-random-artist" type="button" class="btn btn-link" onclick="pickRandomArtists()">🎲 Pick random artists</button>
+            </div>
+          </div>
+        </div>
         <ul class="list-unstyled row row-cols-md-4 row-cols-2">
           <?php foreach ($templateData['topArtists'] as $artist) { ?>
             <li class="col">
@@ -92,8 +101,8 @@
           </div>
           <div class="col-md-4 col-sm-12">
             <div class="btn-group float-end" role="group" aria-label="Action buttons">
-              <button name="pick-random-artist" type="button" class="btn btn-secondary" onclick="pickRandomArtists()">🎲 Pick random artists</button>
-              <button name="generate-playlist-top-artists" type="submit" class="btn btn-primary float-end">🎶 Generate!</button>
+              <button name="generate-playlist-random-top-artists" type="submit" class="btn btn-secondary">🎲 Random!</button>
+              <button name="generate-playlist-top-artists" type="submit" class="btn btn-primary">🎶 Generate!</button>
             </div>
           </div>
         </div>