diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
index 043e1fcc..dbfa9658 100644
--- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
+++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/PermanentFileStorage.kt
@@ -6,6 +6,8 @@ import com.twitter.serial.stream.Serial
 import com.twitter.serial.stream.bytebuffer.ByteBufferSerial
 import java.io.File
 
+typealias DomainEntitySerializer<T> = Serializer<T>
+
 internal const val STORAGE_DIR_NAME = "persistent_storage"
 
 /**
@@ -14,7 +16,7 @@ internal const val STORAGE_DIR_NAME = "persistent_storage"
  * [serverId] is currently active server. Should be unique per server so stored data will not
  * interfere with other server data.
  *
- * Look at [org.moire.ultrasonic.cache.serializers] package for available [Serializer]s.
+ * Look at [org.moire.ultrasonic.cache.serializers] package for available [DomainEntitySerializer]s.
  */
 class PermanentFileStorage(
         private val directories: Directories,
@@ -34,7 +36,7 @@ class PermanentFileStorage(
     fun <T> store(
             name: String,
             objectToStore: T,
-            objectSerializer: Serializer<T>
+            objectSerializer: DomainEntitySerializer<T>
     ) {
         val storeFile = getFile(name)
         if (!storeFile.exists()) storeFile.createNewFile()
@@ -46,7 +48,7 @@ class PermanentFileStorage(
      */
     fun <T> load(
             name: String,
-            objectDeserializer: Serializer<T>
+            objectDeserializer: DomainEntitySerializer<T>
     ): T? {
         val storeFile = getFile(name)
         if (!storeFile.exists()) return null
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
index 96e1a9f0..751a97d5 100644
--- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
+++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializer.kt
@@ -8,14 +8,12 @@ import com.twitter.serial.serializer.SerializationContext
 import com.twitter.serial.stream.SerializerDefs
 import com.twitter.serial.stream.SerializerInput
 import com.twitter.serial.stream.SerializerOutput
+import org.moire.ultrasonic.cache.DomainEntitySerializer
 import org.moire.ultrasonic.domain.Artist
 
 private const val SERIALIZER_VERSION = 1
 
-/**
- * Serializer/deserializer for [Artist] domain entity.
- */
-val artistSerializer get() = object : ObjectSerializer<Artist>(SERIALIZER_VERSION) {
+private val artistSerializer get() = object : ObjectSerializer<Artist>(SERIALIZER_VERSION) {
     override fun serializeObject(
             context: SerializationContext,
             output: SerializerOutput<out SerializerOutput<*>>,
@@ -54,7 +52,14 @@ val artistSerializer get() = object : ObjectSerializer<Artist>(SERIALIZER_VERSIO
     }
 }
 
+/**
+ * Serializer/deserializer for [Artist] domain entity.
+ */
+fun getArtistsSerializer(): DomainEntitySerializer<Artist> = artistSerializer
+
+private val artistListSerializer = CollectionSerializers.getListSerializer(artistSerializer)
+
 /**
  * Serializer/deserializer for list of [Artist] domain entities.
  */
-val artistListSerializer = CollectionSerializers.getListSerializer(artistSerializer)
+fun getArtistListSerializer(): DomainEntitySerializer<List<Artist>> = artistListSerializer
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
index e59e837c..c237be76 100644
--- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
+++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializer.kt
@@ -2,28 +2,27 @@
 @file:JvmName("DomainSerializers")
 package org.moire.ultrasonic.cache.serializers
 
-import com.twitter.serial.serializer.CollectionSerializers
 import com.twitter.serial.serializer.ObjectSerializer
 import com.twitter.serial.serializer.SerializationContext
 import com.twitter.serial.stream.SerializerInput
 import com.twitter.serial.stream.SerializerOutput
+import org.moire.ultrasonic.cache.DomainEntitySerializer
 import org.moire.ultrasonic.domain.Artist
 import org.moire.ultrasonic.domain.Indexes
 
 private const val SERIALIZATION_VERSION = 1
 
-val indexesSerializer get() = object : ObjectSerializer<Indexes>(SERIALIZATION_VERSION) {
+private val indexesSerializer get() = object : ObjectSerializer<Indexes>(SERIALIZATION_VERSION) {
     override fun serializeObject(
             context: SerializationContext,
             output: SerializerOutput<out SerializerOutput<*>>,
             item: Indexes
     ) {
+        val artistListSerializer = getArtistListSerializer()
         output.writeLong(item.lastModified)
                 .writeString(item.ignoredArticles)
-                .writeObject<MutableList<Artist>>(context, item.shortcuts,
-                        CollectionSerializers.getListSerializer(artistSerializer))
-                .writeObject<MutableList<Artist>>(context, item.artists,
-                        CollectionSerializers.getListSerializer(artistSerializer))
+                .writeObject<MutableList<Artist>>(context, item.shortcuts, artistListSerializer)
+                .writeObject<MutableList<Artist>>(context, item.artists, artistListSerializer)
     }
 
     override fun deserializeObject(
@@ -33,12 +32,17 @@ val indexesSerializer get() = object : ObjectSerializer<Indexes>(SERIALIZATION_V
     ): Indexes? {
         if (versionNumber != SERIALIZATION_VERSION) return null
 
+        val artistListDeserializer = getArtistListSerializer()
         val lastModified = input.readLong()
         val ignoredArticles = input.readString() ?: return null
-        val shortcutsList = input.readObject(context,
-                CollectionSerializers.getListSerializer(artistSerializer)) ?: return null
-        val artistsList = input.readObject(context,
-                CollectionSerializers.getListSerializer(artistSerializer)) ?: return null
-        return Indexes(lastModified, ignoredArticles, shortcutsList, artistsList)
+        val shortcutsList = input.readObject(context, artistListDeserializer) ?: return null
+        val artistsList = input.readObject(context, artistListDeserializer) ?: return null
+        return Indexes(lastModified, ignoredArticles, shortcutsList.toMutableList(),
+                artistsList.toMutableList())
     }
 }
+
+/**
+ * Get serializer/deserializer for [Indexes] entity.
+ */
+fun getIndexesSerializer(): DomainEntitySerializer<Indexes> = indexesSerializer
diff --git a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
index 655c3fd4..c65fabad 100644
--- a/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
+++ b/cache/src/main/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializer.kt
@@ -7,14 +7,12 @@ import com.twitter.serial.serializer.ObjectSerializer
 import com.twitter.serial.serializer.SerializationContext
 import com.twitter.serial.stream.SerializerInput
 import com.twitter.serial.stream.SerializerOutput
+import org.moire.ultrasonic.cache.DomainEntitySerializer
 import org.moire.ultrasonic.domain.MusicFolder
 
 private const val SERIALIZATION_VERSION = 1
 
-/**
- * Serializer/deserializer for [MusicFolder] domain entity.
- */
-val musicFolderSerializer = object : ObjectSerializer<MusicFolder>(SERIALIZATION_VERSION) {
+private val musicFolderSerializer = object : ObjectSerializer<MusicFolder>(SERIALIZATION_VERSION) {
 
     override fun serializeObject(
             context: SerializationContext,
@@ -37,7 +35,16 @@ val musicFolderSerializer = object : ObjectSerializer<MusicFolder>(SERIALIZATION
     }
 }
 
+/**
+ * Serializer/deserializer for [MusicFolder] domain entity.
+ */
+fun getMusicFolderSerializer(): DomainEntitySerializer<MusicFolder> = musicFolderSerializer
+
+private val musicFolderListSerializer =
+        CollectionSerializers.getListSerializer(musicFolderSerializer)
+
 /**
  * Serializer/deserializer for [List] of [MusicFolder] items.
  */
-val musicFolderListSerializer = CollectionSerializers.getListSerializer(musicFolderSerializer)
+fun getMusicFolderListSerializer(): DomainEntitySerializer<List<MusicFolder>> =
+        musicFolderListSerializer
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
index 0c22e946..bd84b528 100644
--- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
+++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/PermanentFileStorageTest.kt
@@ -4,7 +4,7 @@ import org.amshove.kluent.`should contain`
 import org.amshove.kluent.`should equal to`
 import org.amshove.kluent.`should equal`
 import org.junit.Test
-import org.moire.ultrasonic.cache.serializers.musicFolderSerializer
+import org.moire.ultrasonic.cache.serializers.getMusicFolderSerializer
 import org.moire.ultrasonic.domain.MusicFolder
 import java.io.File
 
@@ -18,7 +18,7 @@ class PermanentFileStorageTest : BaseStorageTest() {
     @Test
     fun `Should create storage dir if it is not exist`() {
         val item = MusicFolder("1", "2")
-        storage.store("test", item, musicFolderSerializer)
+        storage.store("test", item, getMusicFolderSerializer())
 
         storageDir.exists() `should equal to` true
         getServerStorageDir().exists() `should equal to` true
@@ -29,7 +29,7 @@ class PermanentFileStorageTest : BaseStorageTest() {
         val item = MusicFolder("1", "23")
         val name = "some-name"
 
-        storage.store(name, item, musicFolderSerializer)
+        storage.store(name, item, getMusicFolderSerializer())
 
         val storageFiles = getServerStorageDir().listFiles()
         storageFiles.size `should equal to` 1
@@ -40,9 +40,9 @@ class PermanentFileStorageTest : BaseStorageTest() {
     fun `Should deserialize stored object`() {
         val item = MusicFolder("some", "nice")
         val name = "some-name"
-        storage.store(name, item, musicFolderSerializer)
+        storage.store(name, item, getMusicFolderSerializer())
 
-        val loadedItem = storage.load(name, musicFolderSerializer)
+        val loadedItem = storage.load(name, getMusicFolderSerializer())
 
         loadedItem `should equal` item
     }
@@ -52,18 +52,18 @@ class PermanentFileStorageTest : BaseStorageTest() {
         val name = "some-nice-name"
         val item1 = MusicFolder("1", "1")
         val item2 = MusicFolder("2", "2")
-        storage.store(name, item1, musicFolderSerializer)
-        storage.store(name, item2, musicFolderSerializer)
+        storage.store(name, item1, getMusicFolderSerializer())
+        storage.store(name, item2, getMusicFolderSerializer())
 
-        val loadedItem = storage.load(name, musicFolderSerializer)
+        val loadedItem = storage.load(name, getMusicFolderSerializer())
 
         loadedItem `should equal` item2
     }
 
     @Test
     fun `Should clear all files when clearAll is called`() {
-        storage.store("name1", MusicFolder("1", "1"), musicFolderSerializer)
-        storage.store("name2", MusicFolder("2", "2"), musicFolderSerializer)
+        storage.store("name1", MusicFolder("1", "1"), getMusicFolderSerializer())
+        storage.store("name2", MusicFolder("2", "2"), getMusicFolderSerializer())
 
         storage.clearAll()
 
@@ -72,7 +72,7 @@ class PermanentFileStorageTest : BaseStorageTest() {
 
     @Test
     fun `Should return null if serialized file not available`() {
-        val loadedItem = storage.load("some-name", musicFolderSerializer)
+        val loadedItem = storage.load("some-name", getMusicFolderSerializer())
 
         loadedItem `should equal` null
     }
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
index 74bc4221..7829467b 100644
--- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
+++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/ArtistSerializerTest.kt
@@ -13,7 +13,7 @@ class ArtistSerializerTest : BaseStorageTest() {
     fun `Should correctly serialize Artist object`() {
         val item = Artist("id", "name", "index", "coverArt", 1, 0)
 
-        storage.store("some-name", item, artistSerializer)
+        storage.store("some-name", item, getArtistsSerializer())
 
         validateSerializedData()
     }
@@ -22,9 +22,9 @@ class ArtistSerializerTest : BaseStorageTest() {
     fun `Should correctly deserialize Artist object`() {
         val itemName = "some-name"
         val item = Artist("id", "name", "index", "coverArt", null, 0)
-        storage.store(itemName, item, artistSerializer)
+        storage.store(itemName, item, getArtistsSerializer())
 
-        val loadedItem = storage.load(itemName, artistSerializer)
+        val loadedItem = storage.load(itemName, getArtistsSerializer())
 
         loadedItem `should equal` item
     }
@@ -36,7 +36,7 @@ class ArtistSerializerTest : BaseStorageTest() {
                 Artist(id = "2", name = "some")
         )
 
-        storage.store("some-name", itemsList, artistListSerializer)
+        storage.store("some-name", itemsList, getArtistListSerializer())
 
         validateSerializedData()
     }
@@ -48,9 +48,9 @@ class ArtistSerializerTest : BaseStorageTest() {
                 Artist(id = "1"),
                 Artist(id = "2", name = "some")
         )
-        storage.store(name, itemsList, artistListSerializer)
+        storage.store(name, itemsList, getArtistListSerializer())
 
-        val loadedItems = storage.load(name, artistListSerializer)
+        val loadedItems = storage.load(name, getArtistListSerializer())
 
         loadedItems `should equal` itemsList
     }
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
index 704d59ac..9cffbd8b 100644
--- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
+++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/IndexesSerializerTest.kt
@@ -18,7 +18,7 @@ class IndexesSerializerTest : BaseStorageTest() {
                 Artist("233", "some")
         ))
 
-        storage.store("some-name", item, indexesSerializer)
+        storage.store("some-name", item, getIndexesSerializer())
 
         validateSerializedData()
     }
@@ -31,9 +31,9 @@ class IndexesSerializerTest : BaseStorageTest() {
         ), mutableListOf(
                 Artist("233", "some")
         ))
-        storage.store(name, item, indexesSerializer)
+        storage.store(name, item, getIndexesSerializer())
 
-        val loadedItem = storage.load(name, indexesSerializer)
+        val loadedItem = storage.load(name, getIndexesSerializer())
 
         loadedItem `should equal` item
     }
diff --git a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
index 602ffa47..0efe2811 100644
--- a/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
+++ b/cache/src/test/kotlin/org/moire/ultrasonic/cache/serializers/MusicFolderSerializerTest.kt
@@ -13,7 +13,7 @@ class MusicFolderSerializerTest : BaseStorageTest() {
     fun `Should correctly serialize MusicFolder object`() {
         val item = MusicFolder("Music", "Folder")
 
-        storage.store("some-name", item, musicFolderSerializer)
+        storage.store("some-name", item, getMusicFolderSerializer())
 
         validateSerializedData()
     }
@@ -22,9 +22,9 @@ class MusicFolderSerializerTest : BaseStorageTest() {
     fun `Should correctly deserialize MusicFolder object`() {
         val name = "name"
         val item = MusicFolder("some", "none")
-        storage.store(name, item, musicFolderSerializer)
+        storage.store(name, item, getMusicFolderSerializer())
 
-        val loadedItem = storage.load(name, musicFolderSerializer)
+        val loadedItem = storage.load(name, getMusicFolderSerializer())
 
         loadedItem `should equal` item
     }
@@ -36,7 +36,7 @@ class MusicFolderSerializerTest : BaseStorageTest() {
                 MusicFolder("2", "2")
         )
 
-        storage.store("some-name", itemsList, musicFolderListSerializer)
+        storage.store("some-name", itemsList, getMusicFolderListSerializer())
 
         validateSerializedData()
     }
@@ -48,9 +48,9 @@ class MusicFolderSerializerTest : BaseStorageTest() {
                 MusicFolder("1", "1"),
                 MusicFolder("2", "2")
         )
-        storage.store(name, itemsList, musicFolderListSerializer)
+        storage.store(name, itemsList, getMusicFolderListSerializer())
 
-        val loadedItem = storage.load(name, musicFolderListSerializer)
+        val loadedItem = storage.load(name, getMusicFolderListSerializer())
 
         loadedItem `should equal` itemsList
     }