diff --git a/public/index.php b/public/index.php
index 32680ec59508b596e95c1095eb8b5b8ba9807532..1ff8417f53252049c32a382837688685d8a22401 100644
--- a/public/index.php
+++ b/public/index.php
@@ -57,27 +57,48 @@ if ($generatePlaylistFromPlaylist) {
     error_log('Will create new playlist with recommendations from playlists: '.join(', ', $selectedPlaylists).'".');
     $recommendedTrackIds = [];
 
+    $shouldFilterByArtists = isset($_GET['check-playlist-filter-artists']);
+    error_log('Filter by artists in source playlists: '.($shouldFilterByArtists ? 'yes' : 'no'));
+    $artistsInSourcePlaylists = [];
+
     foreach ($selectedPlaylists as $selectedPlaylistId) {
         $playlist = $api->getPlaylist($selectedPlaylistId);
-        error_log('Will get recommendations from tracks in playlist '.$selectedPlaylistId.' "'.$playlist->name.'".');
+        error_log('Will get recommendations from tracks in playlist "'.$playlist->name.'".');
         $playlistTracks = $playlist->tracks->items;
         error_log('Found '.count($playlistTracks).' tracks.');
         foreach ($playlistTracks as $track) {
             $artists = [];
             foreach ($track->track->artists as $artist) {
                 $artists[] = $artist->name;
+                $artistsInSourcePlaylists[$artist->id] = 1;
             }
-            error_log('Track '.$track->track->id.' "'.$track->track->name.'" ('.join(', ', $artists).')');
+            error_log('Track "'.$track->track->name.'" ('.join(', ', $artists).')');
 
             $recommendations = $api->getRecommendations([
               'seed_tracks' => [$track->track->id],
-              'limit' => 20
+              'limit' => 40
           ]);
             error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
             foreach ($recommendations->tracks as $recommendedTrack) {
-                $recommendedTrackIds[$recommendedTrack->id] = 1;
+                $recommendedTrackIds[$recommendedTrack->id] = $recommendedTrack;
+            }
+        }
+    }
+
+    if ($shouldFilterByArtists) {
+        $artistsInSourcePlaylists = array_keys($artistsInSourcePlaylists);
+        error_log('Filter by artists found in source playlists ('.count($artistsInSourcePlaylists).')');
+
+        $filteredTrackIds = [];
+        foreach ($recommendedTrackIds as $trackId => $track) {
+            $trackArtistInWantedArtists = false;
+            foreach ($track->artists as $trackArtist) {
+                if (\in_array($trackArtist->id, $artistsInSourcePlaylists)) {
+                    $filteredTrackIds[$track->id] = 1;
+                }
             }
         }
+        $recommendedTrackIds = $filteredTrackIds;
     }
 
     $recommendedTrackIds = array_keys($recommendedTrackIds);
@@ -101,6 +122,9 @@ if ($generatePlaylistFromPlaylist) {
     error_log('Will create new playlist with filterted recommendations from 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([
@@ -109,13 +133,17 @@ if ($generatePlaylistFromPlaylist) {
         ]);
         error_log(' -> Got '.count($recommendations->tracks).' recommendatations.');
 
-        // Filter by artist, remove duplicates
+        // Filter by artist if requested, remove duplicates
         foreach ($recommendations->tracks as $recommendedTrack) {
-            $trackArtistInWantedArtists = false;
-            foreach ($recommendedTrack->artists as $trackArtist) {
-                if (\in_array($trackArtist->id, $selectedArtists)) {
-                    $recommendedTrackIds[$recommendedTrack->id] = 1;
+            if ($shouldFilterByArtists) {
+                $trackArtistInWantedArtists = false;
+                foreach ($recommendedTrack->artists as $trackArtist) {
+                    if (\in_array($trackArtist->id, $selectedArtists)) {
+                        $recommendedTrackIds[$recommendedTrack->id] = 1;
+                    }
                 }
+            } else {
+                $recommendedTrackIds[$recommendedTrack->id] = 1;
             }
         }
     }
diff --git a/template.php b/template.php
index 3bbce5ebee2dfacd2fff9964f5fa5af6b4cb874a..308e98d919d8a85fe9a24973f47ec54f79d7d897 100644
--- a/template.php
+++ b/template.php
@@ -67,7 +67,24 @@
               </li>
             <?php } ?>
           </ul>
-          <button name="generate-playlist-top-artists" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
+          <div class="row">
+            <div class="col-8">
+              <input
+                type="checkbox"
+                class="custom-control-input"
+                id="check-top-artist-filter-artists"
+                name="check-top-artist-filter-artists"
+                value="filter-artists"
+                checked
+              >
+              <label class="custom-control-label" for="check-top-artist-filter-artists">
+                Allow only selected artists in recommendations
+              </label>
+            </div>
+            <div class="col-4">
+              <button name="generate-playlist-top-artists" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
+            </div>
+          </div>
         </form>
       <?php } ?>
 
@@ -92,7 +109,24 @@
               </li>
             <?php } ?>
           </ul>
-          <button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
+          <div class="row">
+            <div class="col-8">
+              <input
+                type="checkbox"
+                class="custom-control-input"
+                id="check-playlist-filter-artists"
+                name="check-playlist-filter-artists"
+                value="filter-artists"
+                checked
+              >
+              <label class="custom-control-label" for="check-playlist-filter-artists">
+                Allow only artists in selected playlists in recommendations
+              </label>
+            </div>
+            <div class="col-4">
+              <button name="generate-playlist-from-playlist" type="submit" class="btn btn-secondary float-end">🎶 Generate!</button>
+            </div>
+          </div>
         </form>
       <?php } ?>