diff --git a/docs/source/migration-guides/0.11-serialization.md b/docs/source/migration-guides/0.11-serialization.md
index 601be0da2..d2450b031 100644
--- a/docs/source/migration-guides/0.11-serialization.md
+++ b/docs/source/migration-guides/0.11-serialization.md
@@ -6,7 +6,7 @@ When executing a statement through the CQL protocol, values for the bind markers
Before 0.11, the driver couldn't do this kind of type checking. For example, in the case of non-batch queries, the only information about the user data it has is that it implements `ValueList` - defined as follows:
-```rust
+```rust,ignore
# extern crate scylla;
# extern crate bytes;
# use scylla::frame::value::{SerializedResult, SerializeValuesError};
@@ -76,29 +76,8 @@ If you send simple statements along with non-empty lists of values, the slowdown
In both cases, if the additional roundtrips are unacceptable, you should prepare the statements beforehand and reuse them - which aligns with our general recommendation against use of simple statements in performance sensitive scenarios.
-### Migrating from old to new traits *gradually*
-
-In some cases, migration will be as easy as changing occurrences of `IntoUserType` to `SerializeValue` and `ValueList` to `SerializeRow` and adding some atributes for procedural macros. However, if you have a large enough codebase or some custom, complicated implementations of the old traits then you might not want to migrate everything at once. To support gradual migration, the old traits were not removed but rather deprecated, and we introduced some additional utilities.
-
-#### Converting an object implementing an old trait to a new trait
-
-We provide a number of newtype wrappers:
-
-- `ValueAdapter` - implements `SerializeValue` if the type wrapped over implements `Value`,
-- `ValueListAdapter` - implements `SerializeRow` if the type wrapped over implements `ValueList`,
-- `LegacyBatchValuesAdapter` - implements `BatchValues` if the type wrapped over implements `LegacyBatchValues`.
-
-Note that these wrappers are not zero cost and incur some overhead: in case of `ValueAdapter` and `ValueListAdapter`, the data is first written into a newly allocated buffer and then rewritten to the final buffer. In case of `LegacyBatchValuesAdapter` there shouldn't be any additional allocations unless the implementation has an efficient, non-default `Self::LegacyBatchValuesIterator::write_next_to_request` implementation (which is not the case for the built-in `impl`s).
-
-Naturally, the implementations provided by the wrappers are not type safe as they directly use methods from the old traits.
-
-Conversion in the other direction is not possible.
-
-#### Custom implementations of old traits
-
-It is possible to directly generate an `impl` of `SerializeRow` and `SerializeValue` on a type which implements, respectively, `ValueList` or `Value`, without using the wrappers from the previous section. The following macros are provided:
-
-- `impl_serialize_value_via_value` - implements `SerializeValue` if the type wrapped over implements `Value`,
-- `impl_serialize_row_via_value_list` - implements `SerializeRow` if the type wrapped over implements `ValueList`,
+### Migrating from old to new traits
-The implementations are practically as those generated by the wrappers described in the previous section.
+Up to 1.0 the driver offered a set of migration types and macros to allow adapting new API gradually.
+Since 1.0 this is no longer the case and the old API is fully removed. In order to use 1.0 you have to
+change your code to use new API.
diff --git a/docs/source/migration-guides/0.15-deserialization.md b/docs/source/migration-guides/0.15-deserialization.md
index bbc198f3b..5ca5493d1 100644
--- a/docs/source/migration-guides/0.15-deserialization.md
+++ b/docs/source/migration-guides/0.15-deserialization.md
@@ -1,20 +1,20 @@
# Adjusting code to changes in deserialization API introduced in 0.15
-In 0.15, a new deserialization API has been introduced. The new API improves type safety and performance of the old one, so it is highly recommended to switch to it. However, deserialization is an area of the API that users frequently interact with: deserialization traits appear in generic code and custom implementations have been written. In order to make migration easier, the driver still offers the old API, which - while opt-in - can be very easily switched to after version upgrade. Furthermore, a number of facilities have been introduced which help migrate the user code to the new API piece-by-piece.
-
-The old API and migration facilities will be removed in a future major release.
+In 0.15, a new deserialization API has been introduced. The new API improves type safety and performance of the old one, so it is highly recommended to switch to it. However, deserialization is an area of the API that users frequently interact with: deserialization traits appear in generic code and custom implementations have been written.
+In order to make migration easier, the driver 0.15 still offered the old API, which - while opt-in - can be very easily switched to after version upgrade.
+Since 1.0 the old API (and thus the migration utilities too) have been fully removed.
## Introduction
### Old traits
-The legacy API works by deserializing rows in the query response to a sequence of `Row`s. The `Row` is just a `Vec