diff --git a/public/index.php b/public/index.php
index b39ae21e988e3419831547411ad8818bc1e034a6..271215c40552563050b5df6815100fe82a3dbe42 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,5 +1,6 @@
 <?php
 require '../spotify/spotify.php';
+require '../spotify/lib.php';
 
 if (isset($_GET['logout'])) {
     $_SESSION['accessToken'] = '';
@@ -104,22 +105,8 @@ if ($generatePlaylistFromPlaylist) {
         $recommendedTrackIds = $filteredTrackIds;
     }
 
-    $recommendedTrackIds = array_keys($recommendedTrackIds);
-    error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations for this playlist.');
-    shuffle($recommendedTrackIds);
-    $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
-    error_log('Keep '.count($pickedTrackIds).' tracks.');
-
-    $now = new DateTime();
-    $newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
-    error_log('Create new playlist "'.$newPlaylistName.'".');
-    $newPlaylist = $api->createPlaylist([
-        'name' => $newPlaylistName,
-    ]);
-
-    $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
-    $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
-    $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
+    $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
+    $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist->id);
 } elseif ($generatePlaylistFromArtists) {
     $selectedArtists = $_GET['selected-artist'];
     error_log('Will create new playlist with filterted recommendations from artists: '.join(', ', $selectedArtists).'".');
@@ -151,22 +138,8 @@ if ($generatePlaylistFromPlaylist) {
         }
     }
 
-    $recommendedTrackIds = array_keys($recommendedTrackIds);
-    error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
-    shuffle($recommendedTrackIds);
-    $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
-    error_log('Keep '.count($pickedTrackIds).' random tracks.');
-
-    $now = new DateTime();
-    $newPlaylistName = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
-    error_log('Create new playlist "'.$newPlaylistName.'".');
-    $newPlaylist = $api->createPlaylist([
-        'name' => $newPlaylistName,
-    ]);
-
-    $api->replacePlaylistTracks($newPlaylist->id, $pickedTrackIds);
-    $playlistLink = '<a href="'.$newPlaylist->external_urls->spotify.'">'.$newPlaylistName.'</a>';
-    $templateData['infos'][] = 'Ok created new playlist with '.count($pickedTrackIds).' tracks: '.$playlistLink;
+    $newPlaylist = createPlaylistWithRandomTracks($api, $recommendedTrackIds);
+    $templateData['infos'][] = getCreatedPlaylistInformationMessage($api, $newPlaylist->id);
 } else {
     $templateData['topArtists'] = $api->getMyTop('artists', ['limit' => $topArtistsCount, 'time_range' => 'short_term'])->items;
     $templateData['playlists'] = $api->getUserPlaylists($user->id, ['limit' => $playlistsCount])->items;
diff --git a/spotify/lib.php b/spotify/lib.php
new file mode 100644
index 0000000000000000000000000000000000000000..60bd26b61cfa77a4815d5742d39781057111a33e
--- /dev/null
+++ b/spotify/lib.php
@@ -0,0 +1,44 @@
+<?php
+
+function generatePlaylistName() {
+  $now = new DateTime();
+  $name = 'Fresh playlist ['.$now->format('Y-m-d H:i:s').']';
+
+  return $name;
+}
+
+function createEmptyPlaylist($api) {
+  $name = generatePlaylistName();
+  error_log('Create new playlist "'.$name.'".');
+  $playlist = $api->createPlaylist([
+      'name' => $name,
+  ]);
+
+  return $playlist;
+}
+
+function pickRandomTrackFromArray($recommendedTrackIds, $count = 50) {
+  $recommendedTrackIds = array_keys($recommendedTrackIds);
+  error_log('=> Got '.count($recommendedTrackIds).' unique recommendatations.');
+  shuffle($recommendedTrackIds);
+  $pickedTrackIds = array_slice($recommendedTrackIds, 0, 50);
+  error_log('Keep '.count($pickedTrackIds).' random tracks.');
+
+  return $pickedTrackIds;
+}
+
+function createPlaylistWithRandomTracks($api, $trackIds, $count = 50) {
+  $playlist = createEmptyPlaylist($api);
+  $pickedTrackIds = pickRandomTrackFromArray($trackIds);
+  $api->replacePlaylistTracks($playlist->id, $pickedTrackIds);
+
+  return $playlist;
+}
+
+function getCreatedPlaylistInformationMessage($api, $playlistId) {
+  $playlist = $api->getPlaylist($playlistId);
+  $link = '<a href="'.$playlist->external_urls->spotify.'">'.$playlist->name.'</a>';
+  $message = 'Ok created new playlist with '.count($playlist->tracks->items).' tracks: '.$link;
+
+  return $message;
+}