diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 437b0a49..bc23d336 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -28,4 +28,13 @@
 -keep class com.maxrave.simpmusic.data.model.** { *; }
 -keep class com.maxrave.simpmusic.extension.AllExtKt { *; }
 -keep class com.maxrave.simpmusic.extension.AllExtKt$* { *; }
--keep class com.maxrave.kotlinytmusicscraper.extension.MapExtKt$* { *; }
\ No newline at end of file
+-keep class com.maxrave.kotlinytmusicscraper.extension.MapExtKt$* { *; }
+
+# Removes all Logs as they cause perfomance issues in prod
+-assumenosideeffects class android.util.Log {
+    public static int w(...);
+    public static int e(...);
+    public static int i(...);
+    public static int d(...);
+    public static int v(...);
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/AlbumBrowse.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/AlbumBrowse.kt
index 02a29466..aed8c481 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/AlbumBrowse.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/AlbumBrowse.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.browse.album
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class AlbumBrowse(
     @SerializedName("artists")
     val artists: List<Artist>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/Track.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/Track.kt
index c84cd642..a226f32a 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/Track.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/album/Track.kt
@@ -1,12 +1,14 @@
 package com.maxrave.simpmusic.data.model.browse.album
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Album
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 import com.maxrave.simpmusic.data.model.searchResult.songs.FeedbackTokens
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class Track(
     @SerializedName("album")
     val album: Album?,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/AlbumPlaylist.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/AlbumPlaylist.kt
index 32ffbc8b..ffba1ab7 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/AlbumPlaylist.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/AlbumPlaylist.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.browse.playlist
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class AlbumPlaylist(
     @SerializedName("id")
     val id: Any,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/Author.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/Author.kt
index f225f159..e145aa5f 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/Author.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/Author.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.browse.playlist
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Author(
     @SerializedName("id")
     val id: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/PlaylistBrowse.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/PlaylistBrowse.kt
index c15db246..384fac9f 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/PlaylistBrowse.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/PlaylistBrowse.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.browse.playlist
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.browse.album.Track
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class PlaylistBrowse(
     @SerializedName("author")
     val author: Author,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/TrackPlaylist.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/TrackPlaylist.kt
index 280f5891..f5f596e6 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/TrackPlaylist.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/browse/playlist/TrackPlaylist.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.browse.playlist
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class TrackPlaylist(
     @SerializedName("album")
     val albumPlaylist: AlbumPlaylist,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Genre.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Genre.kt
index f666dcfb..f325bc2d 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Genre.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Genre.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Genre(
     @SerializedName("params")
     val params: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Mood.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Mood.kt
index f48e4e1c..163516bd 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Mood.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/Mood.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Mood(
     @SerializedName(value = "Genres", alternate = ["Thể loại", "Gatunki", "Per te"])
     val genres: ArrayList<Genre>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/MoodsMoment.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/MoodsMoment.kt
index e0734b51..3378632e 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/MoodsMoment.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/MoodsMoment.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class MoodsMoment(
     @SerializedName("params")
     val params: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Content.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Content.kt
index b3e2a0e3..08f34477 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Content.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Content.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.explore.mood.genre
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 import com.maxrave.simpmusic.data.type.HomeContentType
 
+@Immutable
 data class Content(
     @SerializedName("playlistBrowseId")
     val playlistBrowseId: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/GenreObject.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/GenreObject.kt
index 6df7687f..d04eed5b 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/GenreObject.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/GenreObject.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood.genre
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class GenreObject(
     @SerializedName("header")
     val header: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsPlaylist.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsPlaylist.kt
index 9e297efc..ac46374b 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsPlaylist.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsPlaylist.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood.genre
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class ItemsPlaylist(
     @SerializedName("contents")
     val contents: List<Content>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsSong.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsSong.kt
index 72bc58af..f2005254 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsSong.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/ItemsSong.kt
@@ -1,7 +1,9 @@
 package com.maxrave.simpmusic.data.model.explore.mood.genre
 
+import androidx.compose.runtime.Immutable
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 
+@Immutable
 data class ItemsSong(
     val title: String,
     val artist: List<Artist>?,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Title.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Title.kt
index 76171d88..dfee4874 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Title.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/genre/Title.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood.genre
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Title(
     @SerializedName("subtitle")
     val subtitle: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Content.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Content.kt
index a9268e26..bfcb7023 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Content.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Content.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.explore.mood.moodmoments
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 import com.maxrave.simpmusic.data.type.HomeContentType
 
+@Immutable
 data class Content(
     @SerializedName("playlistBrowseId")
     val playlistBrowseId: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Item.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Item.kt
index ec1f6caf..ee97ec8c 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Item.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/Item.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood.moodmoments
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Item(
     @SerializedName("contents")
     val contents: List<Content>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/MoodsMomentObject.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/MoodsMomentObject.kt
index b3cd8907..8f4819ba 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/MoodsMomentObject.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/explore/mood/moodmoments/MoodsMomentObject.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.explore.mood.moodmoments
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class MoodsMomentObject(
     @SerializedName("endpoint")
     val endpoint: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/Content.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/Content.kt
index 1f63e367..9a40dba9 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/Content.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/Content.kt
@@ -1,12 +1,14 @@
 package com.maxrave.simpmusic.data.model.home
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Album
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 import com.maxrave.simpmusic.data.type.HomeContentType
 
+@Immutable
 data class Content(
     @SerializedName("album")
     val album: Album?,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeDataCombine.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeDataCombine.kt
index fc706bae..dbfe10b2 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeDataCombine.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeDataCombine.kt
@@ -1,13 +1,14 @@
 package com.maxrave.simpmusic.data.model.home
 
+import androidx.compose.runtime.Immutable
 import com.maxrave.simpmusic.data.model.explore.mood.Mood
 import com.maxrave.simpmusic.data.model.home.chart.Chart
 import com.maxrave.simpmusic.utils.Resource
 
+@Immutable
 data class HomeDataCombine(
     val home: Resource<ArrayList<HomeItem>>,
     val mood: Resource<Mood>,
     val chart: Resource<Chart>,
     val newRelease: Resource<ArrayList<HomeItem>>,
-) {
-}
\ No newline at end of file
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeItem.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeItem.kt
index 404a09a0..7b28d48f 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeItem.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeItem.kt
@@ -1,9 +1,11 @@
 package com.maxrave.simpmusic.data.model.home
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class HomeItem(
     @SerializedName("contents")
     val contents: List<Content?>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeResponse.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeResponse.kt
index 7af78da7..76bc00e8 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeResponse.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/HomeResponse.kt
@@ -1,10 +1,12 @@
 package com.maxrave.simpmusic.data.model.home
 
+import androidx.compose.runtime.Immutable
 import com.maxrave.simpmusic.data.model.explore.mood.Mood
 import com.maxrave.simpmusic.data.model.home.chart.Chart
 import com.maxrave.simpmusic.utils.Resource
 
 
+@Immutable
 data class HomeResponse(
     val homeItem: Resource<ArrayList<HomeItem>>,
     val exploreMood: Resource<Mood>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Artists.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Artists.kt
index 68a26958..c174edb8 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Artists.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Artists.kt
@@ -1,8 +1,11 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+
+@Immutable
 data class Artists(
     @SerializedName("items")
     val itemArtists: ArrayList<ItemArtist>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Chart.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Chart.kt
index 2b1bf2f0..6cdf78d8 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Chart.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Chart.kt
@@ -1,9 +1,11 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.browse.album.Track
 
+@Immutable
 data class Chart(
     @SerializedName("artists")
     val artists: Artists,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Countries.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Countries.kt
index 91d21090..77f367c7 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Countries.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Countries.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Countries(
     @SerializedName("options")
     val options: List<String>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemArtist.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemArtist.kt
index 8b5fe176..04072a2f 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemArtist.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemArtist.kt
@@ -1,9 +1,11 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class ItemArtist(
     @SerializedName("browseId")
     val browseId: String,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemVideo.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemVideo.kt
index a84886aa..c9870d3b 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemVideo.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/ItemVideo.kt
@@ -1,11 +1,13 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 import com.maxrave.simpmusic.data.model.browse.album.Track
 import com.maxrave.simpmusic.data.model.searchResult.songs.Artist
 import com.maxrave.simpmusic.data.model.searchResult.songs.Thumbnail
 
+@Immutable
 data class ItemVideo(
     @SerializedName("artists")
     val artists: List<Artist>?,
@@ -20,6 +22,7 @@ data class ItemVideo(
     @SerializedName("views")
     val views: String
 )
+
 fun ItemVideo.toTrack(): Track {
     return Track(
         album = null,
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Selected.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Selected.kt
index 729ccc08..1c0b6f2a 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Selected.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Selected.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Selected(
     @SerializedName("text")
     val text: String
diff --git a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Videos.kt b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Videos.kt
index 48d5e0b1..c1b9a97c 100644
--- a/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Videos.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/data/model/home/chart/Videos.kt
@@ -1,8 +1,10 @@
 package com.maxrave.simpmusic.data.model.home.chart
 
 
+import androidx.compose.runtime.Immutable
 import com.google.gson.annotations.SerializedName
 
+@Immutable
 data class Videos(
     @SerializedName("items")
     val items: ArrayList<ItemVideo>,
diff --git a/app/src/main/java/com/maxrave/simpmusic/ui/screen/home/HomeScreen.kt b/app/src/main/java/com/maxrave/simpmusic/ui/screen/home/HomeScreen.kt
index 203deb02..a2863d66 100644
--- a/app/src/main/java/com/maxrave/simpmusic/ui/screen/home/HomeScreen.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/ui/screen/home/HomeScreen.kt
@@ -75,6 +75,7 @@ import com.maxrave.kotlinytmusicscraper.config.Constants
 import com.maxrave.simpmusic.R
 import com.maxrave.simpmusic.common.CHART_SUPPORTED_COUNTRY
 import com.maxrave.simpmusic.common.Config
+import com.maxrave.simpmusic.common.LIMIT_CACHE_SIZE.data
 import com.maxrave.simpmusic.data.model.browse.album.Track
 import com.maxrave.simpmusic.data.model.explore.mood.Mood
 import com.maxrave.simpmusic.data.model.home.HomeItem
@@ -207,21 +208,24 @@ fun HomeScreen(
             enter = fadeIn() + expandVertically(),
             exit = fadeOut() + shrinkVertically()
         ) {
-            Spacer(modifier = Modifier
-                .fillMaxWidth()
-                .windowInsetsPadding(
-                    WindowInsets.statusBars
-                ))
+            Spacer(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .windowInsetsPadding(
+                        WindowInsets.statusBars
+                    )
+            )
         }
-        Row (
+        Row(
             modifier = Modifier
                 .horizontalScroll(chipRowState)
                 .padding(vertical = 8.dp, horizontal = 15.dp),
         ) {
             Config.listOfHomeChip.forEach { id ->
                 Spacer(modifier = Modifier.width(4.dp))
-                Chip(isSelected =
-                    when(params) {
+                Chip(
+                    isSelected =
+                    when (params) {
                         Constants.HOME_PARAMS_RELAX -> id == R.string.relax
                         Constants.HOME_PARAMS_SLEEP -> id == R.string.sleep
                         Constants.HOME_PARAMS_ENERGIZE -> id == R.string.energize
@@ -233,8 +237,9 @@ fun HomeScreen(
                         Constants.HOME_PARAMS_COMMUTE -> id == R.string.commute
                         Constants.HOME_PARAMS_FOCUS -> id == R.string.focus
                         else -> id == R.string.all
-                }, text = stringResource(id = id)) {
-                    when(id) {
+                    }, text = stringResource(id = id)
+                ) {
+                    when (id) {
                         R.string.all -> viewModel.setParams(null)
                         R.string.relax -> viewModel.setParams(Constants.HOME_PARAMS_RELAX)
                         R.string.sleep -> viewModel.setParams(Constants.HOME_PARAMS_SLEEP)
@@ -289,26 +294,26 @@ fun HomeScreen(
                         item {
                             androidx.compose.animation.AnimatedVisibility(
                                 visible =
+                                homeData.find {
+                                    it.title ==
+                                        context.getString(
+                                            R.string.quick_picks,
+                                        )
+                                } != null,
+                            ) {
+                                QuickPicks(
+                                    homeItem =
                                     homeData.find {
                                         it.title ==
                                             context.getString(
                                                 R.string.quick_picks,
                                             )
-                                    } != null,
-                            ) {
-                                QuickPicks(
-                                    homeItem =
-                                        homeData.find {
-                                            it.title ==
-                                                context.getString(
-                                                    R.string.quick_picks,
-                                                )
-                                        } ?: return@AnimatedVisibility,
+                                    } ?: return@AnimatedVisibility,
                                     viewModel = viewModel,
                                 )
                             }
                         }
-                        items(homeData) {
+                        items(homeData, key = { it.title + it.channelId }) {
                             if (it.title != context.getString(R.string.quick_picks)) {
                                 HomeItem(
                                     homeViewModel = viewModel,
@@ -317,7 +322,7 @@ fun HomeScreen(
                                 )
                             }
                         }
-                        items(newRelease) {
+                        items(newRelease, key = { it.title + it.channelId }) {
                             androidx.compose.animation.AnimatedVisibility(
                                 visible = newRelease.isNotEmpty(),
                             ) {
@@ -426,23 +431,23 @@ fun HomeTopAppBar(navController: NavController) {
                 )
                 Text(
                     text =
-                        when (hour) {
-                            in 6..12 -> {
-                                stringResource(R.string.good_morning)
-                            }
+                    when (hour) {
+                        in 6..12 -> {
+                            stringResource(R.string.good_morning)
+                        }
 
-                            in 13..17 -> {
-                                stringResource(R.string.good_afternoon)
-                            }
+                        in 13..17 -> {
+                            stringResource(R.string.good_afternoon)
+                        }
 
-                            in 18..23 -> {
-                                stringResource(R.string.good_evening)
-                            }
+                        in 18..23 -> {
+                            stringResource(R.string.good_evening)
+                        }
 
-                            else -> {
-                                stringResource(R.string.good_night)
-                            }
-                        },
+                        else -> {
+                            stringResource(R.string.good_night)
+                        }
+                    },
                     style = typo.bodySmall,
                 )
             }
@@ -504,8 +509,8 @@ fun AccountLayout(
                 style = typo.headlineMedium,
                 color = Color.White,
                 modifier =
-                    Modifier
-                        .padding(start = 8.dp),
+                Modifier
+                    .padding(start = 8.dp),
             )
         }
     }
@@ -552,25 +557,26 @@ fun QuickPicks(
             state = lazyListState,
             flingBehavior = snapperFlingBehavior,
         ) {
-            items(homeItem.contents) {
+            items(homeItem.contents, key = { it?.videoId ?: "item_${it.hashCode()}" }) {
                 if (it != null) {
-                    QuickPicksItem(onClick = {
-                        val firstQueue: Track = it.toTrack()
-                        viewModel.setQueueData(
-                            QueueData(
-                                listTracks = arrayListOf(firstQueue),
-                                firstPlayedTrack = firstQueue,
-                                playlistId = "RDAMVM${it.videoId}",
-                                playlistName = "\"${it.title}\" Radio",
-                                playlistType = PlaylistType.RADIO,
-                                continuation = null
+                    QuickPicksItem(
+                        onClick = {
+                            val firstQueue: Track = it.toTrack()
+                            viewModel.setQueueData(
+                                QueueData(
+                                    listTracks = arrayListOf(firstQueue),
+                                    firstPlayedTrack = firstQueue,
+                                    playlistId = "RDAMVM${it.videoId}",
+                                    playlistName = "\"${it.title}\" Radio",
+                                    playlistType = PlaylistType.RADIO,
+                                    continuation = null
+                                )
                             )
-                        )
-                        viewModel.loadMediaItem(
-                            firstQueue,
-                            type = Config.SONG_CLICK,
-                        )
-                    },
+                            viewModel.loadMediaItem(
+                                firstQueue,
+                                type = Config.SONG_CLICK,
+                            )
+                        },
                         data = it,
                         widthDp = widthDp,
                     )
@@ -615,7 +621,7 @@ fun MoodMomentAndGenre(
             state = lazyListState1,
             flingBehavior = snapperFlingBehavior1,
         ) {
-            items(mood.moodsMoments) {
+            items(mood.moodsMoments, key = { it.title }) {
                 MoodMomentAndGenreHomeItem(title = it.title) {
                     navController.navigateSafe(
                         R.id.action_global_moodFragment,
@@ -640,7 +646,7 @@ fun MoodMomentAndGenre(
             state = lazyListState2,
             flingBehavior = snapperFlingBehavior2,
         ) {
-            items(mood.genres) {
+            items(mood.genres, key = { it.title }) {
                 MoodMomentAndGenreHomeItem(title = it.title) {
                     navController.navigateSafe(
                         R.id.action_global_moodFragment,
@@ -727,16 +733,15 @@ fun ChartData(
                         state = lazyListState1,
                         flingBehavior = snapperFlingBehavior1,
                     ) {
-                        items(chart.songs.size) {
-                            val data = chart.songs[it]
+                        items(chart.songs, key = { it.videoId }) {
                             ItemTrackChart(onClick = {
                                 viewModel.setQueueData(
                                     QueueData(
-                                        listTracks = arrayListOf(data),
-                                        firstPlayedTrack = data,
-                                        playlistName = "\"${data.title}\" ${context.getString(R.string.in_charts)}",
+                                        listTracks = arrayListOf(it),
+                                        firstPlayedTrack = it,
+                                        playlistName = "\"${it.title}\" ${context.getString(R.string.in_charts)}",
                                         playlistType = PlaylistType.RADIO,
-                                        playlistId = "RDAMVM${data.videoId}",
+                                        playlistId = "RDAMVM${it.videoId}",
                                         continuation = null
                                     )
                                 )
@@ -744,7 +749,7 @@ fun ChartData(
                                     data,
                                     type = Config.VIDEO_CLICK,
                                 )
-                            }, data = data, position = it + 1, widthDp = gridWidthDp)
+                            }, data = it, position = chart.songs.indexOf(it) + 1, widthDp = gridWidthDp)
                         }
                     }
                 }
@@ -763,7 +768,7 @@ fun ChartData(
             state = lazyListState,
             flingBehavior = snapperFlingBehavior
         ) {
-            items(chart.videos.items.size) {
+            items(chart.videos.items.size, key = { index -> chart.videos.items[index].videoId }) {
                 val data = chart.videos.items[it]
                 ItemVideoChart(
                     onClick = {
@@ -802,7 +807,10 @@ fun ChartData(
             state = lazyListState2,
             flingBehavior = snapperFlingBehavior2,
         ) {
-            items(chart.artists.itemArtists.size) {
+            items(chart.artists.itemArtists.size, key = { index ->
+                val item = chart.artists.itemArtists[index]
+                item.title + item.browseId
+            }) {
                 val data = chart.artists.itemArtists[it]
                 ItemArtistChart(onClick = {
                     val args = Bundle()
@@ -829,7 +837,10 @@ fun ChartData(
                         state = lazyListState3,
                         flingBehavior = snapperFlingBehavior3,
                     ) {
-                        items(chart.trending.size) {
+                        items(chart.trending.size, key = { index ->
+                            val item = chart.trending[index]
+                            item.videoId
+                        }) {
                             val data = chart.trending[it]
                             ItemTrackChart(onClick = {
                                 viewModel.setQueueData(
diff --git a/app/src/main/java/com/maxrave/simpmusic/ui/screen/library/PlaylistScreen.kt b/app/src/main/java/com/maxrave/simpmusic/ui/screen/library/PlaylistScreen.kt
index ac7583b4..6d261904 100644
--- a/app/src/main/java/com/maxrave/simpmusic/ui/screen/library/PlaylistScreen.kt
+++ b/app/src/main/java/com/maxrave/simpmusic/ui/screen/library/PlaylistScreen.kt
@@ -155,10 +155,10 @@ fun PlaylistScreen(
         initialValue = -limit,
         targetValue = limit,
         animationSpec =
-            infiniteRepeatable(
-                animation = tween(5000, easing = LinearEasing),
-                repeatMode = RepeatMode.Reverse,
-            ),
+        infiniteRepeatable(
+            animation = tween(5000, easing = LinearEasing),
+            repeatMode = RepeatMode.Reverse,
+        ),
         label = "shimmer",
     )
     val infiniteTransition = rememberInfiniteTransition(label = "rotation")
@@ -166,10 +166,10 @@ fun PlaylistScreen(
         initialValue = 0f,
         targetValue = 360f,
         animationSpec =
-            infiniteRepeatable(
-                animation = tween(5000, easing = LinearEasing),
-                repeatMode = RepeatMode.Restart,
-            ),
+        infiniteRepeatable(
+            animation = tween(5000, easing = LinearEasing),
+            repeatMode = RepeatMode.Restart,
+        ),
         label = "rotation",
     )
 
@@ -297,23 +297,23 @@ fun PlaylistScreen(
 //    Box {
     LazyColumn(
         modifier =
-            Modifier
-                .fillMaxWidth()
-                .background(Color.Black),
+        Modifier
+            .fillMaxWidth()
+            .background(Color.Black),
         state = lazyState,
     ) {
         item(contentType = "header") {
             Box(
                 modifier =
-                    Modifier
-                        .fillMaxWidth()
-                        .wrapContentHeight()
-                        .background(Color.Transparent),
+                Modifier
+                    .fillMaxWidth()
+                    .wrapContentHeight()
+                    .background(Color.Transparent),
             ) {
                 Box(
                     modifier =
-                        Modifier
-                            .fillMaxWidth(),
+                    Modifier
+                        .fillMaxWidth(),
 //                                .haze(
 //                                    hazeState,
 //                                    style = HazeMaterials.regular(),
@@ -330,20 +330,20 @@ fun PlaylistScreen(
                     )
                     Box(
                         modifier =
-                            Modifier
-                                .fillMaxWidth()
-                                .height(180.dp)
-                                .align(Alignment.BottomCenter)
-                                .background(
-                                    brush =
-                                        Brush.verticalGradient(
-                                            listOf(
-                                                Color.Transparent,
-                                                Color(0x75000000),
-                                                Color.Black,
-                                            ),
-                                        ),
+                        Modifier
+                            .fillMaxWidth()
+                            .height(180.dp)
+                            .align(Alignment.BottomCenter)
+                            .background(
+                                brush =
+                                Brush.verticalGradient(
+                                    listOf(
+                                        Color.Transparent,
+                                        Color(0x75000000),
+                                        Color.Black,
+                                    ),
                                 ),
+                            ),
                     )
                 }
                 Column(
@@ -353,10 +353,10 @@ fun PlaylistScreen(
                 ) {
                     Row(
                         modifier =
-                            Modifier
-                                .wrapContentWidth()
-                                .padding(16.dp)
-                                .windowInsetsPadding(WindowInsets.statusBars),
+                        Modifier
+                            .wrapContentWidth()
+                            .padding(16.dp)
+                            .windowInsetsPadding(WindowInsets.statusBars),
                     ) {
                         RippleIconButton(
                             resId = R.drawable.baseline_arrow_back_ios_new_24,
@@ -382,19 +382,19 @@ fun PlaylistScreen(
                                 bitmap = it.result.image.toBitmap().asImageBitmap()
                             },
                             modifier =
-                                Modifier
-                                    .height(250.dp)
-                                    .wrapContentWidth()
-                                    .align(Alignment.CenterHorizontally)
-                                    .clip(
-                                        RoundedCornerShape(8.dp),
-                                    ),
+                            Modifier
+                                .height(250.dp)
+                                .wrapContentWidth()
+                                .align(Alignment.CenterHorizontally)
+                                .clip(
+                                    RoundedCornerShape(8.dp),
+                                ),
                         )
                         Box(
                             modifier =
-                                Modifier
-                                    .fillMaxWidth()
-                                    .wrapContentHeight(),
+                            Modifier
+                                .fillMaxWidth()
+                                .wrapContentHeight(),
                         ) {
                             Column(Modifier.padding(horizontal = 32.dp)) {
                                 Spacer(modifier = Modifier.size(25.dp))
@@ -428,7 +428,7 @@ fun PlaylistScreen(
                                 }
                                 Row(
                                     modifier =
-                                        Modifier.fillMaxWidth(),
+                                    Modifier.fillMaxWidth(),
                                     verticalAlignment = Alignment.CenterVertically,
                                 ) {
                                     RippleIconButton(
@@ -444,27 +444,29 @@ fun PlaylistScreen(
                                             DownloadState.STATE_DOWNLOADED -> {
                                                 Box(
                                                     modifier =
-                                                        Modifier
-                                                            .size(36.dp)
-                                                            .clip(
-                                                                CircleShape,
-                                                            ).clickable {
-                                                                Toast
-                                                                    .makeText(
-                                                                        context,
-                                                                        context.getString(R.string.downloaded),
-                                                                        Toast.LENGTH_SHORT,
-                                                                    ).show()
-                                                            },
+                                                    Modifier
+                                                        .size(36.dp)
+                                                        .clip(
+                                                            CircleShape,
+                                                        )
+                                                        .clickable {
+                                                            Toast
+                                                                .makeText(
+                                                                    context,
+                                                                    context.getString(R.string.downloaded),
+                                                                    Toast.LENGTH_SHORT,
+                                                                )
+                                                                .show()
+                                                        },
                                                 ) {
                                                     Icon(
                                                         painter = painterResource(id = R.drawable.baseline_downloaded),
                                                         tint = Color(0xFF00A0CB),
                                                         contentDescription = "",
                                                         modifier =
-                                                            Modifier
-                                                                .size(36.dp)
-                                                                .padding(2.dp),
+                                                        Modifier
+                                                            .size(36.dp)
+                                                            .padding(2.dp),
                                                     )
                                                 }
                                             }
@@ -472,18 +474,20 @@ fun PlaylistScreen(
                                             DownloadState.STATE_DOWNLOADING -> {
                                                 Box(
                                                     modifier =
-                                                        Modifier
-                                                            .size(36.dp)
-                                                            .clip(
-                                                                CircleShape,
-                                                            ).clickable {
-                                                                Toast
-                                                                    .makeText(
-                                                                        context,
-                                                                        context.getString(R.string.downloading),
-                                                                        Toast.LENGTH_SHORT,
-                                                                    ).show()
-                                                            },
+                                                    Modifier
+                                                        .size(36.dp)
+                                                        .clip(
+                                                            CircleShape,
+                                                        )
+                                                        .clickable {
+                                                            Toast
+                                                                .makeText(
+                                                                    context,
+                                                                    context.getString(R.string.downloading),
+                                                                    Toast.LENGTH_SHORT,
+                                                                )
+                                                                .show()
+                                                        },
                                                 ) {
                                                     LottieAnimation(
                                                         composition,
@@ -510,55 +514,57 @@ fun PlaylistScreen(
                                     AnimatedVisibility(visible = shouldShowSuggestButton) {
                                         Box(
                                             modifier =
-                                                Modifier
-                                                    .size(36.dp)
-                                                    .clip(CircleShape)
-                                                    .graphicsLayer {
-                                                        compositingStrategy =
-                                                            CompositingStrategy.Offscreen
-                                                    }.clickable {
-                                                        shouldShowSuggestions = !shouldShowSuggestions
-                                                    }.drawWithCache {
-                                                        val width = size.width - 10
-                                                        val height = size.height - 10
-
-                                                        val offsetDraw = width * progressAnimated
-                                                        val gradientColors =
-                                                            listOf(
-                                                                Color(0xFF4C82EF),
-                                                                Color(0xFFD96570),
-                                                            )
-                                                        val brush =
-                                                            Brush.linearGradient(
-                                                                colors = gradientColors,
-                                                                start = Offset(offsetDraw, 0f),
-                                                                end =
-                                                                    Offset(
-                                                                        offsetDraw + width,
-                                                                        height,
-                                                                    ),
-                                                            )
+                                            Modifier
+                                                .size(36.dp)
+                                                .clip(CircleShape)
+                                                .graphicsLayer {
+                                                    compositingStrategy =
+                                                        CompositingStrategy.Offscreen
+                                                }
+                                                .clickable {
+                                                    shouldShowSuggestions = !shouldShowSuggestions
+                                                }
+                                                .drawWithCache {
+                                                    val width = size.width - 10
+                                                    val height = size.height - 10
 
-                                                        onDrawBehind {
-                                                            // Destination
-                                                            with(aiPainter) {
-                                                                draw(
-                                                                    size = Size(width, width),
-                                                                )
-                                                            }
+                                                    val offsetDraw = width * progressAnimated
+                                                    val gradientColors =
+                                                        listOf(
+                                                            Color(0xFF4C82EF),
+                                                            Color(0xFFD96570),
+                                                        )
+                                                    val brush =
+                                                        Brush.linearGradient(
+                                                            colors = gradientColors,
+                                                            start = Offset(offsetDraw, 0f),
+                                                            end =
+                                                            Offset(
+                                                                offsetDraw + width,
+                                                                height,
+                                                            ),
+                                                        )
 
-                                                            // Source
-                                                            drawRect(
-                                                                brush = brush,
-                                                                blendMode = BlendMode.SrcIn,
+                                                    onDrawBehind {
+                                                        // Destination
+                                                        with(aiPainter) {
+                                                            draw(
+                                                                size = Size(width, width),
                                                             )
                                                         }
-                                                    },
+
+                                                        // Source
+                                                        drawRect(
+                                                            brush = brush,
+                                                            blendMode = BlendMode.SrcIn,
+                                                        )
+                                                    }
+                                                },
                                         )
                                     }
                                     RippleIconButton(
                                         modifier =
-                                            Modifier.size(36.dp),
+                                        Modifier.size(36.dp),
                                         resId = R.drawable.baseline_shuffle_24,
                                         fillMaxSize = true,
                                     ) {
@@ -567,7 +573,7 @@ fun PlaylistScreen(
                                     Spacer(Modifier.size(5.dp))
                                     RippleIconButton(
                                         modifier =
-                                            Modifier.size(36.dp),
+                                        Modifier.size(36.dp),
                                         resId = R.drawable.baseline_more_vert_24,
                                         fillMaxSize = true,
                                     ) {
@@ -603,9 +609,9 @@ fun PlaylistScreen(
                                         Spacer(modifier = Modifier.size(8.dp))
                                         Text(
                                             text =
-                                                stringResource(
-                                                    id = R.string.suggest,
-                                                ),
+                                            stringResource(
+                                                id = R.string.suggest,
+                                            ),
                                             color = Color.White,
                                             modifier = Modifier.padding(vertical = 8.dp),
                                         )
@@ -614,10 +620,10 @@ fun PlaylistScreen(
                                             if (it) {
                                                 CenterLoadingBox(
                                                     modifier =
-                                                        Modifier
-                                                            .fillMaxWidth()
-                                                            .height(200.dp)
-                                                            .align(Alignment.CenterHorizontally),
+                                                    Modifier
+                                                        .fillMaxWidth()
+                                                        .height(200.dp)
+                                                        .align(Alignment.CenterHorizontally),
                                                 )
                                             } else {
                                                 Column {
@@ -642,62 +648,62 @@ fun PlaylistScreen(
                                         TextButton(
                                             onClick = { viewModel.reloadSuggestion() },
                                             modifier =
-                                                Modifier
-                                                    .padding(horizontal = 8.dp)
-                                                    .drawWithContent {
-                                                        val strokeWidthPx = 2.dp.toPx()
-                                                        val width = size.width
-                                                        val height = size.height
+                                            Modifier
+                                                .padding(horizontal = 8.dp)
+                                                .drawWithContent {
+                                                    val strokeWidthPx = 2.dp.toPx()
+                                                    val width = size.width
+                                                    val height = size.height
 
-                                                        drawContent()
+                                                    drawContent()
 
-                                                        with(drawContext.canvas.nativeCanvas) {
-                                                            val checkPoint = saveLayer(null, null)
+                                                    with(drawContext.canvas.nativeCanvas) {
+                                                        val checkPoint = saveLayer(null, null)
 
-                                                            // Destination
-                                                            drawRoundRect(
-                                                                cornerRadius = CornerRadius(x = 60f, y = 60f),
-                                                                color = Color.Gray,
-                                                                topLeft = Offset(strokeWidthPx / 2, strokeWidthPx / 2),
-                                                                size = Size(width - strokeWidthPx, height - strokeWidthPx),
-                                                                style = Stroke(strokeWidthPx),
+                                                        // Destination
+                                                        drawRoundRect(
+                                                            cornerRadius = CornerRadius(x = 60f, y = 60f),
+                                                            color = Color.Gray,
+                                                            topLeft = Offset(strokeWidthPx / 2, strokeWidthPx / 2),
+                                                            size = Size(width - strokeWidthPx, height - strokeWidthPx),
+                                                            style = Stroke(strokeWidthPx),
+                                                        )
+                                                        val gradientColors =
+                                                            listOf(
+                                                                Color(0xFF4C82EF),
+                                                                Color(0xFFD96570),
+                                                            )
+                                                        val brush =
+                                                            Brush.linearGradient(
+                                                                colors = gradientColors,
+                                                                start = Offset(2f, 0f),
+                                                                end =
+                                                                Offset(
+                                                                    2 + width,
+                                                                    height,
+                                                                ),
                                                             )
-                                                            val gradientColors =
-                                                                listOf(
-                                                                    Color(0xFF4C82EF),
-                                                                    Color(0xFFD96570),
-                                                                )
-                                                            val brush =
-                                                                Brush.linearGradient(
-                                                                    colors = gradientColors,
-                                                                    start = Offset(2f, 0f),
-                                                                    end =
-                                                                        Offset(
-                                                                            2 + width,
-                                                                            height,
-                                                                        ),
-                                                                )
-
-                                                            // Source
-                                                            rotate(degrees = angle) {
-                                                                drawCircle(
-                                                                    brush = brush,
-                                                                    radius = size.width,
-                                                                    blendMode = BlendMode.SrcIn,
-                                                                )
-                                                            }
 
-                                                            restoreToCount(checkPoint)
+                                                        // Source
+                                                        rotate(degrees = angle) {
+                                                            drawCircle(
+                                                                brush = brush,
+                                                                radius = size.width,
+                                                                blendMode = BlendMode.SrcIn,
+                                                            )
                                                         }
-                                                    },
+
+                                                        restoreToCount(checkPoint)
+                                                    }
+                                                },
                                         ) {
                                             Text(
                                                 text = stringResource(id = R.string.reload),
                                                 color = Color.White,
                                                 modifier =
-                                                    Modifier.align(
-                                                        Alignment.CenterVertically,
-                                                    ),
+                                                Modifier.align(
+                                                    Alignment.CenterVertically,
+                                                ),
                                             )
                                         }
                                         Spacer(modifier = Modifier.size(12.dp))
@@ -711,8 +717,8 @@ fun PlaylistScreen(
                                 ElevatedButton(
                                     contentPadding = PaddingValues(0.dp),
                                     modifier =
-                                        Modifier
-                                            .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp),
+                                    Modifier
+                                        .defaultMinSize(minWidth = 1.dp, minHeight = 1.dp),
                                     onClick = {
                                         viewModel.onUIEvent(LocalPlaylistUIEvent.ChangeFilter)
                                     },
@@ -742,7 +748,10 @@ fun PlaylistScreen(
                 }
             }
         }
-        items(count = trackPagingItems.itemCount) { index ->
+        items(count = trackPagingItems.itemCount, key = { index ->
+            val item = trackPagingItems[index]
+            item?.videoId ?: "item_$index"
+        }) { index ->
             val item = trackPagingItems[index]
             if (item != null) {
                 if (playingTrack?.mediaId == item.videoId && isPlaying) {