anchor.diff:  
   == Advanced
   
  -In terms of classloading, when you write an IO all the Beam SDK Java core stack is assumed in Talend Component Kit runtime
  -as provided so never include it in compile scope - it would be ignored anyway.
  +In terms of classloading, when you write an I/O, the Beam SDK Java core stack is assumed as provided in Talend Component Kit runtime. This way, you don't need to include it in the compile scope, it would be ignored anyway.
   
   === Coder
   
  -If you need a JSonCoder you can use `org.talend.sdk.component.runtime.beam.factory.service.PluginCoderFactory` service
  -which gives you access the JSON-P and JSON-B coders.
  +If you need a JSonCoder, you can use the `org.talend.sdk.component.runtime.beam.factory.service.PluginCoderFactory` service,
  +which gives you access to the JSON-P and JSON-B coders.
   
  -There is also an Avro coder using the `FileContainer` format to ensure it
  -is self-contained for `IndexedRecord` and doesn't need - as default Apache Beam `AvroCoder` - to set the
  -schema when creating a pipeline. It takes a bit more space and therefore is a bit slower
  -but for `DoFn` it is fine since they shouldn't rely on serialization in a lot of cases.
  +There is also an Avro coder, which uses the `FileContainer`. It ensures it
  +is self-contained for `IndexedRecord` and it does not require—as the default Apache Beam `AvroCoder`—to set the schema when creating a pipeline. +
  +It consumes more space and therefore is slightly slower, but it is fine for `DoFn`, since it does not rely on serialization in most cases.
   See `org.talend.sdk.component.runtime.beam.transform.avro.IndexedRecordCoder`.
   
   === JsonObject to IndexedRecord
   
   The mainstream model is `JsonObject` but it is common to have a legacy system using
  -`IndexedRecord`. To mitigate the transition you can use the following `PTransforms`:
  +`IndexedRecord`. To mitigate the transition, you can use the following `PTransforms`:
   
  -- `IndexedRecordToJson`: to convert from an `IndexedRecord` to a `JsonObject`
  -- `JsonToIndexedRecord`: to convert from an `JsonObject` to a `IndexedRecord`
  +- `IndexedRecordToJson`: to convert an `IndexedRecord` to a `JsonObject`.
  +- `JsonToIndexedRecord`: to convert a `JsonObject` to an `IndexedRecord`.
   
   
   === Sample
   
  -Here is a sample input based on beam Kafka:
  +.Sample input based on Beam Kafka
   
   [source,java]
   ----
  
positive.code: }
  ----
  
  <1> the `PTransform` generics define it is an input (`PBegin` marker)
  <2> the `expand` method chains the native IO with a custom mapper (`RecordToJson`)
  <3> the mapper uses the JSON-P coder automatically created from the contextual component
  
  Since the Beam wrapper doesn't respect the standard Kit programming Model (no `@Emitter` for instance)
  you need to set `<talend.validation.component>false</talend.validation.component>` property in your `pom.xml`
  (or equivalent for Gradle) to skip the Kit component programming model validations.
  
negative.code: [[wrapping-a-beam-io__start]]
  == Limitations
  
  This part is limited to specific kinds of link:https://beam.apache.org/[Beam] `PTransform`:
  
  - `PTransform<PBegin, PCollection<?>>` for inputs.
  - `PTransform<PCollection<?>, PDone>` for outputs. Outputs must use a single (composite or not) `DoFn` in their `apply` method.
  
  == Wrapping an input
  
  To illustrate the input wrapping, this procedure uses the following input as a starting point (based on existing Beam inputs):
  
  [source,java]
  ----
  