diff --git a/gradle.properties b/gradle.properties
index a0a41861..0176daf6 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,9 +1,9 @@
 kotlin.code.style=official
-kotlin_version=1.3.61
-kotlin_coroutines_version=1.3.3
-kotlin_serialisation_runtime_version=0.14.0
+kotlin_version=1.3.71
+kotlin_coroutines_version=1.3.5
+kotlin_serialisation_runtime_version=0.20.0
 
-klockVersion=1.8.7
-uuidVersion=0.0.7
+klockVersion=1.10.3
+uuidVersion=0.1.0
 
 gradle_bintray_plugin_version=1.8.4
diff --git a/postssystem.core/gradle.properties b/postssystem.core/gradle.properties
deleted file mode 100644
index eea16254..00000000
--- a/postssystem.core/gradle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-project_public_name=PostsSystemCore
-
-kotlin.incremental.multiplatform=true
diff --git a/postssystem.exposed/gradle.properties b/postssystem.exposed/gradle.properties
index dbe4088e..896e963d 100644
--- a/postssystem.exposed/gradle.properties
+++ b/postssystem.exposed/gradle.properties
@@ -1,7 +1,5 @@
 exposed_version=0.20.3
-test_sqlite_version=3.28.0
+test_sqlite_version=3.30.1
 test_junit_version=5.5.2
 
 core_version=0.2.0
-
-kotlin.incremental.multiplatform=true
diff --git a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ChannelsSizes.kt b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ChannelsSizes.kt
new file mode 100644
index 00000000..a95847b6
--- /dev/null
+++ b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ChannelsSizes.kt
@@ -0,0 +1,3 @@
+package com.insanusmokrassar.postssystem.core.exposed
+
+internal const val ChannelDefaultSize = 64
diff --git a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedContentAPI.kt b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedContentAPI.kt
index 938db144..5407213c 100644
--- a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedContentAPI.kt
+++ b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedContentAPI.kt
@@ -5,7 +5,6 @@ import com.insanusmokrassar.postssystem.core.content.api.ContentAPI
 import com.insanusmokrassar.postssystem.core.utils.generateContentId
 import com.insanusmokrassar.postssystem.core.utils.pagination.*
 import kotlinx.coroutines.channels.BroadcastChannel
-import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.asFlow
 import kotlinx.serialization.json.Json
@@ -18,21 +17,19 @@ private class ContentAPIDatabaseTable(
     internal val idColumn = text("_id")
     internal val dataColumn = text("data")
 
-    private inline fun <T> transaction(noinline body: Transaction.() -> T): T = database.transaction(body)
-
     init {
-        transaction {
+        transaction(database) {
             SchemaUtils.createMissingTablesAndColumns(this@ContentAPIDatabaseTable)
         }
     }
 
-    private val contentCreatedBroadcastChannel = BroadcastChannel<RegisteredContent>(Channel.BUFFERED)
-    private val contentDeletedBroadcastChannel = BroadcastChannel<RegisteredContent>(Channel.BUFFERED)
+    private val contentCreatedBroadcastChannel = BroadcastChannel<RegisteredContent>(ChannelDefaultSize)
+    private val contentDeletedBroadcastChannel = BroadcastChannel<RegisteredContent>(ChannelDefaultSize)
     override val contentCreatedFlow: Flow<RegisteredContent> = contentCreatedBroadcastChannel.asFlow()
     override val contentDeletedFlow: Flow<RegisteredContent> = contentDeletedBroadcastChannel.asFlow()
 
     override suspend fun createContent(content: Content): RegisteredContent? {
-        return transaction {
+        return transaction(database) {
             insert {
                 it[idColumn] = generateContentId()
                 it[dataColumn] = Json.plain.stringify(Content.serializer(), content)
@@ -48,7 +45,7 @@ private class ContentAPIDatabaseTable(
     }
     override suspend fun deleteContent(id: ContentId): Boolean {
         val content = getContentById(id) ?: return false
-        return transaction {
+        return transaction(database) {
             deleteWhere {
                 idColumn.eq(id)
             } > 0
@@ -65,17 +62,17 @@ private class ContentAPIDatabaseTable(
     )
 
     override suspend fun getContentsIds(): Set<ContentId> {
-        return transaction {
+        return transaction(database) {
             selectAll().map { it[idColumn] }
         }.toSet()
     }
     override suspend fun getContentById(id: ContentId): RegisteredContent? {
-        return transaction {
+        return transaction(database) {
             select { idColumn.eq(id) }.firstOrNull() ?.asRegisteredContent()
         }
     }
     override suspend fun getContentByPagination(pagination: Pagination): PaginationResult<out RegisteredContent> {
-        return transaction {
+        return transaction(database) {
             selectAll().count() to selectAll().limit(n = pagination.size, offset = pagination.firstIndex).map { it.asRegisteredContent() }
         }.let { (count, results) ->
             pagination.createResult(count, results)
diff --git a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedPostsAPI.kt b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedPostsAPI.kt
index 56083446..1d769cd8 100644
--- a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedPostsAPI.kt
+++ b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedPostsAPI.kt
@@ -7,10 +7,10 @@ import com.insanusmokrassar.postssystem.core.utils.generatePostId
 import com.insanusmokrassar.postssystem.core.utils.pagination.*
 import com.soywiz.klock.*
 import kotlinx.coroutines.channels.BroadcastChannel
-import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.asFlow
 import org.jetbrains.exposed.sql.*
+import org.jetbrains.exposed.sql.transactions.transaction
 
 private class PostsAPIContentRelations(
     private val database: Database
@@ -18,28 +18,26 @@ private class PostsAPIContentRelations(
     private val postIdColumn = text("postId")
     private val contentIdColumn = text("contentId")
 
-    private inline fun <T> transaction(noinline body: Transaction.() -> T): T = database.transaction(body)
-
     init {
-        transaction {
+        transaction(database) {
             SchemaUtils.createMissingTablesAndColumns(this@PostsAPIContentRelations)
         }
     }
 
     fun getPostContents(postId: PostId): List<ContentId> {
-        return transaction {
+        return transaction(database) {
             select { postIdColumn.eq(postId) }.map { it[contentIdColumn] }
         }
     }
 
     fun getContentPosts(contentId: ContentId): List<PostId> {
-        return transaction {
+        return transaction(database) {
             select { contentIdColumn.eq(contentId) }.map { it[postIdColumn] }
         }
     }
 
     fun linkPostAndContents(postId: PostId, vararg contentIds: ContentId) {
-        transaction {
+        transaction(database) {
             val leftToPut = contentIds.toSet() - getPostContents(postId)
             leftToPut.forEach { contentId ->
                 insert {
@@ -50,7 +48,7 @@ private class PostsAPIContentRelations(
         }
     }
     fun unlinkPostAndContents(postId: PostId, vararg contentIds: ContentId): Boolean {
-        return transaction {
+        return transaction(database) {
             deleteWhere {
                 postIdColumn.eq(postId).and(contentIdColumn.inList(contentIds.toList()))
             } > 0
@@ -71,19 +69,17 @@ private class PostsAPIDatabaseTable(
     )
 
 
-    private val postCreatedBroadcastChannel = BroadcastChannel<RegisteredPost>(Channel.BUFFERED)
+    private val postCreatedBroadcastChannel = BroadcastChannel<RegisteredPost>(ChannelDefaultSize)
     override val postCreatedFlow: Flow<RegisteredPost> = postCreatedBroadcastChannel.asFlow()
 
-    private val postDeletedBroadcastChannel = BroadcastChannel<RegisteredPost>(Channel.BUFFERED)
+    private val postDeletedBroadcastChannel = BroadcastChannel<RegisteredPost>(ChannelDefaultSize)
     override val postDeletedFlow: Flow<RegisteredPost> = postDeletedBroadcastChannel.asFlow()
 
-    private val postUpdatedBroadcastChannel = BroadcastChannel<RegisteredPost>(Channel.BUFFERED)
+    private val postUpdatedBroadcastChannel = BroadcastChannel<RegisteredPost>(ChannelDefaultSize)
     override val postUpdatedFlow: Flow<RegisteredPost> = postUpdatedBroadcastChannel.asFlow()
 
-    private inline fun <T> transaction(noinline body: Transaction.() -> T): T = database.transaction(body)
-
     init {
-        transaction {
+        transaction(database) {
             SchemaUtils.createMissingTablesAndColumns(this@PostsAPIDatabaseTable)
         }
     }
@@ -98,7 +94,7 @@ private class PostsAPIDatabaseTable(
 
     override suspend fun createPost(post: Post): RegisteredPost? {
         val id = generatePostId()
-        return transaction {
+        return transaction(database) {
             insert {
                 it[idColumn] = id
             }
@@ -111,7 +107,7 @@ private class PostsAPIDatabaseTable(
 
     override suspend fun deletePost(id: PostId): Boolean {
         val post = getPostById(id) ?: return false
-        return (transaction {
+        return (transaction(database) {
             deleteWhere { idColumn.eq(id) }
         } > 0).also {
             if (it) {
@@ -122,7 +118,7 @@ private class PostsAPIDatabaseTable(
     }
 
     override suspend fun updatePostContent(postId: PostId, post: Post): Boolean {
-        return transaction {
+        return transaction(database) {
             val alreadyLinked = contentsTable.getPostContents(postId)
             val toRemove = alreadyLinked - post.content
             val toInsert = post.content - alreadyLinked
@@ -138,32 +134,32 @@ private class PostsAPIDatabaseTable(
         }
     }
     override suspend fun getPostsIds(): Set<PostId> {
-        return transaction {
+        return transaction(database) {
             selectAll().map { it[idColumn] }.toSet()
         }
     }
 
     override suspend fun getPostById(id: PostId): RegisteredPost? {
-        return transaction {
+        return transaction(database) {
             select { idColumn.eq(id) }.firstOrNull() ?.toRegisteredPost()
         }
     }
 
     override suspend fun getPostsByContent(id: ContentId): List<RegisteredPost> {
-        return transaction {
+        return transaction(database) {
             val postsIds = contentsTable.getContentPosts(id)
             select { idColumn.inList(postsIds) }.map { it.toRegisteredPost() }
         }
     }
 
     override suspend fun getPostsByCreatingDates(from: DateTime, to: DateTime): List<RegisteredPost> {
-        return transaction {
+        return transaction(database) {
             select { creationDateColumn.between(from, to) }.map { it.toRegisteredPost() }
         }
     }
 
     override suspend fun getPostsByPagination(pagination: Pagination): PaginationResult<RegisteredPost> {
-        return transaction {
+        return transaction(database) {
             val posts = selectAll().limit(pagination.size, pagination.firstIndex).orderBy(creationDateColumn).map {
                 it.toRegisteredPost()
             }
diff --git a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedUtils.kt b/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedUtils.kt
deleted file mode 100644
index 6e0de410..00000000
--- a/postssystem.exposed/src/main/kotlin/com/insanusmokrassar/postssystem/core/exposed/ExposedUtils.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.insanusmokrassar.postssystem.core.exposed
-
-import org.jetbrains.exposed.sql.Database
-import org.jetbrains.exposed.sql.Transaction
-
-inline fun <T> Database.transaction(noinline body: Transaction.() -> T): T = org.jetbrains.exposed.sql.transactions.transaction(this, body)