diff --git a/README.md b/README.md
index 2293a905ba..c6c2b70bc9 100644
--- a/README.md
+++ b/README.md
@@ -7,244 +7,24 @@
[![Chat in Telegram](badges/chat.svg)](https://t.me/InMoTelegramBotAPI)
-
## What is it?
-Library for Object-Oriented and type-safe work with Telegram Bot API. Most part of some specific solves or unuseful
+It is a complex of libraries for working with `TelegramBotAPI` in type-safe and strict way as much as it possible. In
+the list of this complex currently next projects:
+
+* [TelegramBotAPI](TelegramBotAPI/README.md) - core of library. In fact it is independent library and can be used alone
+without any additional library
+* [TelegramBotAPI Extensions](TelegramBotAPI-extensions-api/README.md) - contains extensions (mostly for
+`RequestsExecutor`), which allows to use the core library in more pleasant way
+
+Most part of some specific solves or unuseful
moments are describing by official [Telegram Bot API](https://core.telegram.org/bots/api).
-## Compatibility
+## Ok, where should I start?
-This version compatible with [23th of January 2020 update of TelegramBotAPI (version 4.6)](https://core.telegram.org/bots/api#january-23-2020).
-There is Telegram Passport API exception of implemented functionality, which was presented in
-[August 2018 update of TelegramBotAPI](https://core.telegram.org/bots/api-changelog#august-27-2018) update. It will be implemented
-as soon as possible. All APIs that are not included are presented
-[wiki](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Not-included-API).
+Firstly, look at the [TelegramBotAPI](TelegramBotAPI/README.md). Here you can find all information about currently
+covered Telegram Bot API and other things. After this you can look at the
+[TelegramBotAPI Extensions](TelegramBotAPI-extensions-api/README.md).
-## How to implement library?
-
-Common ways to implement this library are presented here. In some cases it will require additional steps
-like inserting of additional libraries (like `kotlin stdlib`). In the examples will be used variable
-`telegrambotapi.version`, which must be set up by developer. Available versions are presented on
-[bintray](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI), next version is last published:
-
-[![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI/_latestVersion)
-
-Currently, last versions of library can be available from the Maven repository with errors (for the reason difficult in publishing
-of signed artifacts in Bintray). You can:
-
-* Use earlier version (available version you can find
-[here](https://mvnrepository.com/artifact/com.github.insanusmokrassar/TelegramBotAPI))
-* Add `jCenter` repository in build config
-
-### TelegramBotAPI
-
-Contains core and most required things, like types, requests and `KtorRequestsExecutor`.
-
-#### Maven
-
-Dependency config presented here:
-
-```xml
-
- com.github.insanusmokrassar
- TelegramBotAPI
- ${telegrambotapi.version}
-
-```
-
-#### Gradle
-
-To use last versions you will need to add one line in repositories block of your `build.gradle`:
-
-`jcenter()` or `mavenCentral()`
-
-And add next line to your dependencies block:
-
-```groovy
-implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegrambotapi_version"
-```
-
-or for old gradle:
-
-```groovy
-compile "com.github.insanusmokrassar:TelegramBotAPI:$telegrambotapi_version"
-```
-
-### API extensions
-
-Contains extensions for `RequestsExecutor` which usually more obvious than original ones in `TelegramBotAPI` and more
-useful.
-
-#### Maven
-
-Dependency config presented here:
-
-```xml
-
- com.github.insanusmokrassar
- TelegramBotAPI-extensions-api
- ${telegrambotapi.version}
-
-```
-
-#### Gradle
-
-To use last versions you will need to add one line in repositories block of your `build.gradle`:
-
-`jcenter()` or `mavenCentral()`
-
-And add next line to your dependencies block:
-
-```groovy
-implementation "com.github.insanusmokrassar:TelegramBotAPI-extensions-api:$telegrambotapi_version"
-```
-
-or for old gradle:
-
-```groovy
-compile "com.github.insanusmokrassar:TelegramBotAPI-extensions-api:$telegrambotapi_version"
-```
-
-## How to work with library?
-
-For now, this library have no some API god-object. Instead of this, this library has several
-important objects:
-
-* [RequestsExecutor](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt)
-* [Requests](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests)
-* [Types](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types)
-
-### Types
-
-Types declare different objects representation. For example, `Chat` for now represented as
-interface and has several realisations:
-
-* `PrivateChat`
-* `GroupChat`
-* `SupergroupChat`
-* `ChannelChat`
-
-Instead of common garbage with all information as in original [Chat](https://core.telegram.org/bots/api#chat),
-here it was separated for more obvious difference between chats types and their possible content.
-
-The same principle work with a lot of others things in this Telegram bot API.
-
-### Requests
-
-Requests usually are very simple objects, but some of them are using their own
-build factories. For example, the next code show, how to get information about bot:
-
-```kotlin
-val requestsExecutor: RequestsExecutor = ...
-requestsExecutor.execute(GetMe())
-```
-
-Or you can use new syntax (available by implementing of project [API extensions](#API-extensions):
-
-```kotlin
-val bot: RequestsExecutor = ...
-bot.getMe()
-```
-
-The result type of [GetMe (and getMe extension)](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/GetMe.kt)
-request is
-[ExtendedBot](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/User.kt).
-
-### RequestsExecutor
-
-It is base object which can be used to execute requests in API. For now by default included Ktor
-realisation of `RequestsExecutor`, but it is possible, that in future it will be extracted in separated
-project. How to create `RequestsExecutor`:
-
-```kotlin
-val requestsExecutor = KtorRequestsExecutor(
- TelegramAPIUrlsKeeper(TOKEN)
-)
-```
-
-Here:
-
-* `KtorRequestsExecutor` - default realisation with [ktor](https://ktor.io)
-* `TelegramAPIUrlsKeeper` - special keeper, which you can save and use for getting files full urls (`resolveFileURL`
-extension inside of `PathedFile.kt`)
-* `TOKEN` is just a token of bot which was retrieved according to
-[instruction](https://core.telegram.org/bots#3-how-do-i-create-a-bot).
-
-By default, for JVM there is implemented `CIO` client engine, but there is not server engine. Both can be changed like
-here:
-
-```groovy
-dependencies {
- // ...
- implementation "io.ktor:ktor-server-cio:$ktor_version" // for implementing of server engine
- implementation "io.ktor:ktor-client-okhttp:$ktor_version" // for implementing of additional client engine
- // ...
-}
-```
-
-You can avoid using of `server` dependency in case if you will not use `Webhook`s. In this case,
-dependencies list will be simplify:
-
-```groovy
-dependencies {
- // ...
- implementation "io.ktor:ktor-client-okhttp:$ktor_version" // for implementing of additional client engine
- // ...
-}
-```
-
-Here was used `okhttp` realisation of client, but there are several others engines for Ktor. More information
-available on ktor.io site for [client](https://ktor.io/clients/http-client/engines.html) and [server](https://ktor.io/quickstart/artifacts.html)
-engines.
-
-## Getting updates
-
-In this library currently realised two ways to get updates from telegram:
-
-* Polling - in this case bot will request updates from time to time (you can set up delay between requests)
-* Webhook via reverse proxy or something like this
-
-### Updates filters
-
-Currently webhook method contains `UpdatesFilter` as necessary argument for getting updates.
-`UpdatesFilter` will sort updates and throw their into different callbacks. Currently supporting
-separate getting updates for media groups - they are accumulating with debounce in one second
-(for being sure that all objects of media group was received).
-
-Updates polling also support `UpdatesFilter` but it is not required to use it and you can get updates directly
-in `UpdateReceiver`, which you will provide to `startGettingOfUpdates` method
-
-### Webhook set up
-
-If you wish to use webhook method, you will need:
-
-* White IP - your IP address or host, which available for calling. [TelegramBotAPI](https://core.telegram.org/bots/api#setwebhook)
-recommend to use some unique address for each bot which you are using
-* SSL certificate. Usually you can obtain the certificate using your domain provider, [Let'sEncrypt](https://letsencrypt.org/) or [create it](https://core.telegram.org/bots/self-signed)
-* Nginx or something like this
-
-Template for Nginx server config you can find in [this gist](https://gist.github.com/InsanusMokrassar/fcc6e09cebd07e46e8f0fdec234750c4#file-nginxssl-conf).
-
-For webhook you can provide `File` with public part of certificate, `URL` where bot will be available and inner `PORT` which
-will be used to start receiving of updates. Actually, you can skip passing of `File` when you have something like
-nginx for proxy forwarding.
-
-In case of using `nginx` with reverse-proxy config, setting up of Webhook will look like:
-
-```kotlin
-requestsExecutor.setWebhook(
- WEBHOOK_URL,
- INTERNAL_PORT,
- filter,
- ENGINE_FACTORY
-)
-```
-
-Here:
-
-* `WEBHOOK_URL` - the url which will be used by Telegram system to send updates
-* `INTERNAL_PORT` - the port which will be used in bot for listening of updates
-* `filter` - instance of [UpdatesFilter](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt),
-which will be used to filter incoming updates
-* `ENGINE_FACTORY` - used factory name, for example, `CIO` in case of usage `io.ktor:ktor-server-cio` as server engine
+Anyway, all library are very typical inside of them. For example, any request in TelegramBotAPI look like
+`requestsExecutor.execute(SomeRequest())`.
diff --git a/TelegramBotAPI-extensions-api/README.md b/TelegramBotAPI-extensions-api/README.md
new file mode 100644
index 0000000000..cb192ec5f2
--- /dev/null
+++ b/TelegramBotAPI-extensions-api/README.md
@@ -0,0 +1,75 @@
+# TelegramBotAPI
+
+[![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin)
+[![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-api/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-api/_latestVersion)
+[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI-extensions-api/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI-extensions-api)
+[![Build Status](https://jenkins.insanusmokrassar.com/buildStatus/icon?job=TelegramBotAPI-extensions-api_master__publishing)](https://jenkins.insanusmokrassar.com/job/TelegramBotAPI-extensions-api_master__publishing/)
+
+## What is it?
+
+It is wrapper library for [TelegramBotAPI](../TelegramBotAPI/README.md). Here you can find extensions for
+`RequestsExecutor`, which are more look like Telegram Bot API requests and in the same time have more obvious signatures
+to help understand some restrictions in Telegram system.
+
+## Compatibility
+
+This library always compatible with original `TelegramBotAPI` library version
+
+## How to implement library?
+
+Common ways to implement this library are presented here. In some cases it will require additional steps
+like inserting of additional libraries (like `kotlin stdlib`). In the examples will be used variable
+`telegrambotapi.version`, which must be set up by developer. Available versions are presented on
+[bintray](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-api), next version is last published:
+
+[![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-api/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI-extensions-api/_latestVersion)
+
+### Maven
+
+Dependency config presented here:
+
+```xml
+
+ com.github.insanusmokrassar
+ TelegramBotAPI-extensions-api
+ ${telegrambotapi-extensions-api.version}
+
+```
+
+### Gradle
+
+To use last versions you will need to add one line in repositories block of your `build.gradle`:
+
+`jcenter()` or `mavenCentral()`
+
+And add next line to your dependencies block:
+
+```groovy
+implementation "com.github.insanusmokrassar:TelegramBotAPI-extensions-api:$telegrambotapi_extensions_api_version"
+```
+
+or for old gradle:
+
+```groovy
+compile "com.github.insanusmokrassar:TelegramBotAPI-extensions-api:$telegrambotapi_extensions_api_version"
+```
+
+## Example of usage and comparison with `TelegramBotAPI`
+
+As said in [TelegramBotAPI](../TelegramBotAPI/README.md#Requests), it is possible to use next syntax for requests:
+
+```kotlin
+val requestsExecutor: RequestsExecutor = ...
+requestsExecutor.execute(GetMe())
+```
+
+This library offer a little bit another way for this:
+
+```kotlin
+val bot: RequestsExecutor = ...
+bot.getMe()
+```
+
+The result type of [GetMe (and getMe extension)](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/GetMe.kt)
+request is
+[ExtendedBot](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/User.kt).
diff --git a/TelegramBotAPI/README.md b/TelegramBotAPI/README.md
new file mode 100644
index 0000000000..b93ed650f8
--- /dev/null
+++ b/TelegramBotAPI/README.md
@@ -0,0 +1,204 @@
+# TelegramBotAPI
+
+[![Awesome Kotlin Badge](https://kotlin.link/awesome-kotlin.svg)](https://github.com/KotlinBy/awesome-kotlin)
+[![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI/_latestVersion)
+[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.insanusmokrassar/TelegramBotAPI)
+[![Build Status](https://jenkins.insanusmokrassar.com/buildStatus/icon?job=TelegramBotAPI_master__publishing)](https://jenkins.insanusmokrassar.com/job/TelegramBotAPI_master__publishing/)
+
+## What is it?
+
+Library for Object-Oriented and type-safe work with Telegram Bot API. Most part of some specific solves or unuseful
+moments are describing by official [Telegram Bot API](https://core.telegram.org/bots/api).
+
+## Compatibility
+
+This version compatible with [23th of January 2020 update of TelegramBotAPI (version 4.6)](https://core.telegram.org/bots/api#january-23-2020).
+There is Telegram Passport API exception of implemented functionality, which was presented in
+[August 2018 update of TelegramBotAPI](https://core.telegram.org/bots/api-changelog#august-27-2018) update. It will be implemented
+as soon as possible. All APIs that are not included are presented
+[wiki](https://github.com/InsanusMokrassar/TelegramBotAPI/wiki/Not-included-API).
+
+## How to implement library?
+
+Common ways to implement this library are presented here. In some cases it will require additional steps
+like inserting of additional libraries (like `kotlin stdlib`). In the examples will be used variable
+`telegrambotapi.version`, which must be set up by developer. Available versions are presented on
+[bintray](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI), next version is last published:
+
+[![Download](https://api.bintray.com/packages/insanusmokrassar/StandardRepository/TelegramBotAPI/images/download.svg) ](https://bintray.com/insanusmokrassar/StandardRepository/TelegramBotAPI/_latestVersion)
+
+Currently, last versions of library can be available from the Maven repository with errors (for the reason difficult in publishing
+of signed artifacts in Bintray). You can:
+
+* Use earlier version (available version you can find
+[here](https://mvnrepository.com/artifact/com.github.insanusmokrassar/TelegramBotAPI))
+* Add `jCenter` repository in build config
+
+### Maven
+
+Dependency config presented here:
+
+```xml
+
+ com.github.insanusmokrassar
+ TelegramBotAPI
+ ${telegrambotapi.version}
+
+```
+
+### Gradle
+
+To use last versions you will need to add one line in repositories block of your `build.gradle`:
+
+`jcenter()` or `mavenCentral()`
+
+And add next line to your dependencies block:
+
+```groovy
+implementation "com.github.insanusmokrassar:TelegramBotAPI:$telegrambotapi_version"
+```
+
+or for old gradle:
+
+```groovy
+compile "com.github.insanusmokrassar:TelegramBotAPI:$telegrambotapi_version"
+```
+
+## How to work with library?
+
+For now, this library have no some API god-object. Instead of this, this library has several
+important objects:
+
+* [RequestsExecutor](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/bot/RequestsExecutor.kt)
+* [Requests](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests)
+* [Types](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types)
+
+### Types
+
+Types declare different objects representation. For example, `Chat` for now represented as
+interface and has several realisations:
+
+* `PrivateChat`
+* `GroupChat`
+* `SupergroupChat`
+* `ChannelChat`
+
+Instead of common garbage with all information as in original [Chat](https://core.telegram.org/bots/api#chat),
+here it was separated for more obvious difference between chats types and their possible content.
+
+The same principle work with a lot of others things in this Telegram bot API.
+
+### Requests
+
+Requests usually are very simple objects, but some of them are using their own
+build factories. For example, the next code show, how to get information about bot:
+
+```kotlin
+val requestsExecutor: RequestsExecutor = ...
+requestsExecutor.execute(GetMe())
+```
+
+Also there is an alternative syntax for requests (like `requestsExecutor.getMe()` in project
+[TelegramBotAPI-extensions-api](../TelegramBotAPI-extensions-api/README.md))
+
+The result type of [GetMe (and getMe extension)](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/requests/GetMe.kt)
+request is
+[ExtendedBot](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/User.kt).
+
+### RequestsExecutor
+
+It is base object which can be used to execute requests in API. For now by default included Ktor
+realisation of `RequestsExecutor`, but it is possible, that in future it will be extracted in separated
+project. How to create `RequestsExecutor`:
+
+```kotlin
+val requestsExecutor = KtorRequestsExecutor(
+ TelegramAPIUrlsKeeper(TOKEN)
+)
+```
+
+Here:
+
+* `KtorRequestsExecutor` - default realisation with [ktor](https://ktor.io)
+* `TelegramAPIUrlsKeeper` - special keeper, which you can save and use for getting files full urls (`resolveFileURL`
+extension inside of `PathedFile.kt`)
+* `TOKEN` is just a token of bot which was retrieved according to
+[instruction](https://core.telegram.org/bots#3-how-do-i-create-a-bot).
+
+By default, for JVM there is implemented `CIO` client engine, but there is not server engine. Both can be changed like
+here:
+
+```groovy
+dependencies {
+ // ...
+ implementation "io.ktor:ktor-server-cio:$ktor_version" // for implementing of server engine
+ implementation "io.ktor:ktor-client-okhttp:$ktor_version" // for implementing of additional client engine
+ // ...
+}
+```
+
+You can avoid using of `server` dependency in case if you will not use `Webhook`s. In this case,
+dependencies list will be simplify:
+
+```groovy
+dependencies {
+ // ...
+ implementation "io.ktor:ktor-client-okhttp:$ktor_version" // for implementing of additional client engine
+ // ...
+}
+```
+
+Here was used `okhttp` realisation of client, but there are several others engines for Ktor. More information
+available on ktor.io site for [client](https://ktor.io/clients/http-client/engines.html) and [server](https://ktor.io/quickstart/artifacts.html)
+engines.
+
+## Getting updates
+
+In this library currently realised two ways to get updates from telegram:
+
+* Polling - in this case bot will request updates from time to time (you can set up delay between requests)
+* Webhook via reverse proxy or something like this
+
+### Updates filters
+
+Currently webhook method contains `UpdatesFilter` as necessary argument for getting updates.
+`UpdatesFilter` will sort updates and throw their into different callbacks. Currently supporting
+separate getting updates for media groups - they are accumulating with debounce in one second
+(for being sure that all objects of media group was received).
+
+Updates polling also support `UpdatesFilter` but it is not required to use it and you can get updates directly
+in `UpdateReceiver`, which you will provide to `startGettingOfUpdates` method
+
+### Webhook set up
+
+If you wish to use webhook method, you will need:
+
+* White IP - your IP address or host, which available for calling. [TelegramBotAPI](https://core.telegram.org/bots/api#setwebhook)
+recommend to use some unique address for each bot which you are using
+* SSL certificate. Usually you can obtain the certificate using your domain provider, [Let'sEncrypt](https://letsencrypt.org/) or [create it](https://core.telegram.org/bots/self-signed)
+* Nginx or something like this
+
+Template for Nginx server config you can find in [this gist](https://gist.github.com/InsanusMokrassar/fcc6e09cebd07e46e8f0fdec234750c4#file-nginxssl-conf).
+
+For webhook you can provide `File` with public part of certificate, `URL` where bot will be available and inner `PORT` which
+will be used to start receiving of updates. Actually, you can skip passing of `File` when you have something like
+nginx for proxy forwarding.
+
+In case of using `nginx` with reverse-proxy config, setting up of Webhook will look like:
+
+```kotlin
+requestsExecutor.setWebhook(
+ WEBHOOK_URL,
+ INTERNAL_PORT,
+ filter,
+ ENGINE_FACTORY
+)
+```
+
+Here:
+
+* `WEBHOOK_URL` - the url which will be used by Telegram system to send updates
+* `INTERNAL_PORT` - the port which will be used in bot for listening of updates
+* `filter` - instance of [UpdatesFilter](https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/TelegramBotAPI/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/updateshandlers/UpdatesFilter.kt),
+which will be used to filter incoming updates
+* `ENGINE_FACTORY` - used factory name, for example, `CIO` in case of usage `io.ktor:ktor-server-cio` as server engine