diff --git a/docs/01_try-installation.md b/docs/01_try-installation.md
index ebd0e29..3af3edd 100644
--- a/docs/01_try-installation.md
+++ b/docs/01_try-installation.md
@@ -14,12 +14,11 @@
 The Docker-based installation requires **Docker** and **Docker Compose** to be installed on the target machine.
 Installation instructions can be found below.
 
-<div class="admonition info">
-    <div class="admonition-title">Install Docker</div>
-    <p>Go to https://docs.docker.com/installation/ and follow the instructions to install Docker for your OS. Make sure
-        docker can be started as a non-root user (described in the installation manual, don’t forget to log out and in
-        again) and check that Docker is installed correctly by executing docker-run hello-world</p>
-</div>
+:::info Install Docker
+Go to https://docs.docker.com/installation/ and follow the instructions to install Docker for your OS. Make sure
+docker can be started as a non-root user (described in the installation manual, don’t forget to log out and in
+again) and check that Docker is installed correctly by executing docker-run hello-world
+:::
 
 ### Supported operating systems
 
@@ -51,13 +50,12 @@
     <img src="/img/01_try-installation/04_home.png" alt="Home page"/>
 </div>
 
-<div class="admonition error">
-    <div class="admonition-title">Errors during the installation process</div>
-    <p>In most cases, errors during the installation are due to an under-powered system.<br/>
-        If there is a problem with any of the components, please restart the whole system (<code>docker-compose
-            down</code> and eventually also delete the volumes).
-        Please also make sure that you've assigned enough memory available to Docker.</p>
-</div>
+:::danger Errors during the installation process
+In most cases, errors during the installation are due to an under-powered system.
+If there is a problem with any of the components, please restart the whole system (`docker-compose
+down` and eventually also delete the volumes).
+Please also make sure that you've assigned enough memory available to Docker.
+:::
 
 ## Next Steps
 
diff --git a/docs/06_extend-first-processor.md b/docs/06_extend-first-processor.md
index b567182..9608050 100644
--- a/docs/06_extend-first-processor.md
+++ b/docs/06_extend-first-processor.md
@@ -26,22 +26,19 @@
 If you see such an IP or the extensions service complains that it cannot resolve the IP, you can manually set the IP address of the extensions service. You can do so by providing an <code>SP_HOST</code> environment variable.
 
 
-To check if the service is up and running, open the browser on *'localhost:8090'* (or the port defined in the service definition). The machine-readable description of the processor should be visible as shown below.
-
 <img src="/img/archetype/endpoint.png" width="90%" alt="Project Structure"/>
 
+To check if the service is up and running, open the browser on *'localhost:8090'* (or the port defined in the service definition). The machine-readable description of the processor should be visible as shown below.
 
-<div class="admonition error">
-<div class="admonition-title">Common Problems</div>
-<p>
+
+:::caution Common Problems
 If the service description is not shown on 'localhost:8090', you might have to change the port address.
 This needs to be done in the configuration of your service, further explained in the configurations part of the developer guide.
 
 If the service does not show up in the StreamPipes installation menu, click on 'MANAGE ENDPOINTS' and add 'http://<span></span>YOUR_IP_OR_DNS_NAME:8090'.
 Use the IP or DNS name you provided as the SP_HOST variable or the IP (if resolvable) found by the auto-discovery service printed in the console.
 After adding the endpoint, a new processor with the name *Example* should show up.
-</p>
-</div>
+:::
 
 Now you can go to StreamPipes.
 Your new processor *'Example'* should now show up in the installation menu ("Install Pipeline Elements" in the left navigation bar).
diff --git a/docs/06_extend-sdk-functions.md b/docs/06_extend-sdk-functions.md
index 837b9bb..659690b 100644
--- a/docs/06_extend-sdk-functions.md
+++ b/docs/06_extend-sdk-functions.md
@@ -24,11 +24,13 @@
 
 ## Writing a function
 
-<div class="admonition warning">
-    <div class="admonition-title">Work in Progress</div>
-    <p>Functions are currently in preview mode and are not yet recommended for production usage. 
-APIs are subject to change in a future version.</p>
-</div>
+:::caution Work in Progress
+
+Functions are currently in preview mode and are not yet recommended for production usage. 
+APIs are subject to change in a future version.
+
+:::
+
 
 To define a function, create a new extensions service using the [Maven Archetypes](06_extend-archetypes.md) or use an already existing service.
 
diff --git a/docs/06_extend-sdk-output-strategies.md b/docs/06_extend-sdk-output-strategies.md
index 1c00f07..feb2248 100644
--- a/docs/06_extend-sdk-output-strategies.md
+++ b/docs/06_extend-sdk-output-strategies.md
@@ -10,12 +10,12 @@
 
 The following reference describes how output strategies can be defined using the SDK.
 
-<div class="admonition tip">
-<div class="admonition-title">Code on Github</div>
-<p>For all examples, the code can be found on <a href="https://www.github.com/apache/streampipes-examples
-/tree/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm
-/outputstrategy/">Github</a>.</p>
-</div>
+:::tip Code on Github
+
+For all examples, the code can be found on [Github](https://www.github.com/apache/streampipes-examples/tree/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm/outputstrategy/)
+
+:::
+
 
 ## Reference
 
diff --git a/docs/06_extend-sdk-static-properties.md b/docs/06_extend-sdk-static-properties.md
index 9422df6..39c2d5d 100644
--- a/docs/06_extend-sdk-static-properties.md
+++ b/docs/06_extend-sdk-static-properties.md
@@ -10,12 +10,11 @@
 
 The following reference describes how static properties can be defined using the SDK.
 
-<div class="admonition tip">
-<div class="admonition-title">Code on Github</div>
-<p>For all examples, the code can be found on <a href="https://github.com/apache/streampipes-examples/tree
-/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm
-/staticproperty">Github</a>.</p>
-</div>
+:::tip Code on Github
+
+For all examples, the code can be found on [Github](https://github.com/apache/streampipes-examples/tree/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm/staticproperty).
+
+:::
 
 ## Reference
 
@@ -169,12 +168,12 @@
 String selectedSingleValue = extractor.selectedSingleValue("id", String.class);
 ```
 
-<div class="admonition tip">
-<div class="admonition-title">Declaring options</div>
-<p>Sometimes, you may want to use an internal name that differs from the display name of an option.
-For that, you can use the method Options.from(Tuple2{'<'}String, String{'>'}) and the extractor method selectedSingleValueInternalName.</p>
-</div>
+:::tip Declaring options
 
+Sometimes, you may want to use an internal name that differs from the display name of an option.
+For that, you can use the method Options.from(Tuple2{'<'}String, String{'>'}) and the extractor method selectedSingleValueInternalName.
+
+:::tip
 
 
 ### Multi-Value Selections
@@ -258,9 +257,11 @@
 
 The parameter extraction does not differ from the extraction of static single-value parameters.
 
-<div class="admonition info">
-<div class="admonition-title">Multi-value selections</div>
-<p>Although this example shows the usage of runtime-resolvable selections using single value selections, the same also works for multi-value selections!</p>
-</div>
+
+:::info Multi-value selections
+
+Although this example shows the usage of runtime-resolvable selections using single value selections, the same also works for multi-value selections!
+
+:::
 
 
diff --git a/docs/06_extend-sdk-stream-requirements.md b/docs/06_extend-sdk-stream-requirements.md
index 9d06735..63ac0c7 100644
--- a/docs/06_extend-sdk-stream-requirements.md
+++ b/docs/06_extend-sdk-stream-requirements.md
@@ -12,10 +12,13 @@
 
 This guide covers the creation of stream requirements. Before reading this section, we recommend that you make yourself familiar with the SDK guide on [data processors](dev-guide-processor-sdk.md) and [data sinks](dev-guide-sink-sdk.md).
 
-<div class="admonition tip">
-<div class="admonition-title">Code on Github</div>
-<p>For all examples, the code can be found on <a href="https://www.github.com/apache/streampipes-examples/tree/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm/requirements/">Github</a>.</p>
-</div>
+
+:::tip Code on Github
+
+For all examples, the code can be found on [Github](https://www.github.com/apache/streampipes-examples/tree/dev/streampipes-pipeline-elements-examples-processors-jvm/src/main/java/org/apache/streampipes/pe/examples/jvm/requirements/).
+
+:::
+
 
 ## The StreamRequirementsBuilder
 
diff --git a/docs/06_extend-tutorial-data-processors.md b/docs/06_extend-tutorial-data-processors.md
index 9e5e580..a4170cc 100644
--- a/docs/06_extend-tutorial-data-processors.md
+++ b/docs/06_extend-tutorial-data-processors.md
@@ -6,27 +6,33 @@
 
 In this tutorial, we will add a new data processor.
 
-From an architectural point of view, we will create a self-contained service that includes the description of the data processor and an implementation.
+From an architectural point of view, we will create a self-contained service that includes the description of the data
+processor and an implementation.
 
 ## Objective
 
-We are going to create a new data processor that realizes a simple geofencing algorithm - we detect vehicles that enter a specified radius around a user-defined location.
-This pipeline element will be a generic element that works with any event stream that provides geospatial coordinates in form of a latitude/longitude pair.
+We are going to create a new data processor that realizes a simple geofencing algorithm - we detect vehicles that enter
+a specified radius around a user-defined location.
+This pipeline element will be a generic element that works with any event stream that provides geospatial coordinates in
+form of a latitude/longitude pair.
 
 The algorithm outputs every location event once the position has entered the geofence.
 
+:::note
 
-<div class="admonition note">
-<div class="admonition-title">Note</div>
-<p>The implementation in this tutorial is pretty simple - our processor will fire an event every time the GPS location is inside the geofence.
-       In a real-world application, you would probably want to define a pattern that recognizes the _first_ event a vehicle enters the geofence.<br/>
-       This can be easily done using a CEP library.</p>
-</div>
+The implementation in this tutorial is pretty simple - our processor will fire an event every time the GPS location is
+inside the geofence.
+In a real-world application, you would probably want to define a pattern that recognizes the _first_ event a vehicle
+enters the geofence.
 
+This can be easily done using a CEP library.
+
+:::
 
 ## Project setup
 
-Instead of creating a new project from scratch, we recommend to use the Maven archetype to create a new project skeleton (streampipes-archetype-extensions-jvm).
+Instead of creating a new project from scratch, we recommend to use the Maven archetype to create a new project
+skeleton (streampipes-archetype-extensions-jvm).
 Enter the following command in a command line of your choice (Apache Maven needs to be installed):
 
 ```
@@ -38,10 +44,12 @@
 
 You will see a project structure similar to the structure shown in the [archetypes](06_extend-archetypes.md) section.
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.</p>
-</div>
+:::tip
+
+Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your
+application into a Docker container.
+
+:::
 
 Now you're ready to create your first data processor for StreamPipes!
 
@@ -71,138 +79,162 @@
 
 public class GeofencingProcessor extends StreamPipesDataProcessor {
 
- private static final String LATITUDE_CENTER = "latitude-center";
- private static final String LONGITUDE_CENTER = "longitude-center";
+  private static final String LATITUDE_CENTER = "latitude-center";
+  private static final String LONGITUDE_CENTER = "longitude-center";
 
- @Override
- public DataProcessorDescription declareModel() {
-  return ProcessingElementBuilder.create("org.apache.streampipes.tutorial-geofencing")
-          .category(DataProcessorType.ENRICH)
-          .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-          .build();
- }
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder.create("org.apache.streampipes.tutorial-geofencing")
+        .category(DataProcessorType.ENRICH)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .build();
+  }
 
- @Override
- public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector, EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
 
- }
+  }
 
- @Override
- public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
 
- }
+  }
 
- @Override
- public void onDetach() throws SpRuntimeException {
+  @Override
+  public void onDetach() throws SpRuntimeException {
 
- }
+  }
 }
 
 
 ```
 
-In this class, we need to implement three methods: The `declareModel` method is used to define abstract stream requirements such as event properties that must be present in any input stream that is later connected to the element using the StreamPipes UI.
+In this class, we need to implement three methods: The `declareModel` method is used to define abstract stream
+requirements such as event properties that must be present in any input stream that is later connected to the element
+using the StreamPipes UI.
 The second method, `onInvocation` is triggered once a pipeline is started. Finally, the `onEvent` method
 
 Similar to data sources, the SDK provides a builder class to generate the description for data processors.
 Delete the content within the ``declareModel`` method and add the following lines to the `declareModel` method:
 
 ```java
-return ProcessingElementBuilder.create("org.apache.streampipes.tutorial.geofencing", "Geofencing", "A simple geofencing data processor")
+return ProcessingElementBuilder.create("org.apache.streampipes.tutorial.geofencing","Geofencing","A simple geofencing data processor")
 ```
 
 This creates a new data processor with the ID, title and description assigned to the element builder.
-Next, we add some _stream requirements_ to the description. As we'd like to develop a generic pipeline element that works with any event that provides a lat/lng pair, we define two stream requirements as stated below:
+Next, we add some _stream requirements_ to the description. As we'd like to develop a generic pipeline element that
+works with any event that provides a lat/lng pair, we define two stream requirements as stated below:
 
 ```java
 .requiredStream(StreamRequirementsBuilder
     .create()
     .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
-            Labels.from("latitude-field", "Latitude", "The event " +
-            "property containing the latitude value"), PropertyScope.MEASUREMENT_PROPERTY)
+    Labels.from("latitude-field","Latitude","The event "+
+    "property containing the latitude value"),PropertyScope.MEASUREMENT_PROPERTY)
     .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
-            Labels.from("longitude-field", "Longitude", "The event " +
-                    "property containing the longitude value"), PropertyScope.MEASUREMENT_PROPERTY)
+    Labels.from("longitude-field","Longitude","The event "+
+    "property containing the longitude value"),PropertyScope.MEASUREMENT_PROPERTY)
     .build())
 ```
 
-The first line, `.requiredStream()` defines that we want a data processor with exactly one input stream. Adding more stream requirements would create elements with multiple input connectors in StreamPipes.
+The first line, `.requiredStream()` defines that we want a data processor with exactly one input stream. Adding more
+stream requirements would create elements with multiple input connectors in StreamPipes.
 Stream requirements can be assigned by using the `StreamRequirementsBuilder` class.
-In our example, we define two requirements, so-called _domain property requirements_. In contrast to _data type requirements_ where we'd expect an event property with a field of a specific data type (e.g., float), domain property requirements expect a specific domain property, e.g., from a vocabulary such as the WGS84 Geo vocab.
+In our example, we define two requirements, so-called _domain property requirements_. In contrast to _data type
+requirements_ where we'd expect an event property with a field of a specific data type (e.g., float), domain property
+requirements expect a specific domain property, e.g., from a vocabulary such as the WGS84 Geo vocab.
 
-Once a pipeline is deployed, we are interested in the actual field (and its field name) that contains the latitude and longitude values.
-In some cases, there might me more than one field that satisfies a property requirement and we would like users to select the property the geofencing component should operate on.
-Therefore, our example uses the method `requiredPropertyWithUnaryMapping`, which will map a requirement to a real event property of an input stream and  let the user choose the appropriate field in the StreamPipes UI when pipelines are defined.
+Once a pipeline is deployed, we are interested in the actual field (and its field name) that contains the latitude and
+longitude values.
+In some cases, there might me more than one field that satisfies a property requirement and we would like users to
+select the property the geofencing component should operate on.
+Therefore, our example uses the method `requiredPropertyWithUnaryMapping`, which will map a requirement to a real event
+property of an input stream and let the user choose the appropriate field in the StreamPipes UI when pipelines are
+defined.
 
-Finally, the `PropertyScope` indicates that the required property is a measurement value (in contrast to a dimension value). This allows us later to provide improved user guidance in the pipeline editor.
+Finally, the `PropertyScope` indicates that the required property is a measurement value (in contrast to a dimension
+value). This allows us later to provide improved user guidance in the pipeline editor.
 
-Besides requirements, users should be able to define the center coordinate of the Geofence and the size of the fence defined as a radius around the center in meters.
+Besides requirements, users should be able to define the center coordinate of the Geofence and the size of the fence
+defined as a radius around the center in meters.
 The radius can be defined by adding a simple required text field to the description:
 
 ```java
-.requiredIntegerParameter("radius", "Geofence Size", "The size of the circular geofence in meters.", 0, 1000, 1)
+.requiredIntegerParameter("radius","Geofence Size","The size of the circular geofence in meters.",0,1000,1)
 ```
 
 Similar to mapping properties, text parameters have an internalId (radius), a label and a description.
 In addition, we can assign a _value specification_ to the parameter indicating the value range we support.
 Our example supports a radius value between 0 and 1000 with a granularity of 1.
-In the StreamPipes UI, a required text parameter is rendered as a text input field, in case we provide an optional value specification, a slider input is automatically generated.
+In the StreamPipes UI, a required text parameter is rendered as a text input field, in case we provide an optional value
+specification, a slider input is automatically generated.
 
 Such user-defined parameters are called _static properties_. There are many different types of static properties (see
- the [Processor SDK](06_extend-sdk-static-properties.md) for an overview).
+the [Processor SDK](06_extend-sdk-static-properties.md) for an overview).
 
-In this example, we'll further add two very simple input fields to let users provide latitude and longitude of the geofence center.
+In this example, we'll further add two very simple input fields to let users provide latitude and longitude of the
+geofence center.
 
 Add the following line to the `declareModel` method:
 
 ```java
-   .requiredFloatParameter(Labels.from(LATITUDE_KEY, "Latitude", "The latitude value"))
-   .requiredFloatParameter(Labels.from(LONGITUDE_KEY, "Longitude", "The longitude value"))
+   .requiredFloatParameter(Labels.from(LATITUDE_KEY,"Latitude","The latitude value"))
+    .requiredFloatParameter(Labels.from(LONGITUDE_KEY,"Longitude","The longitude value"))
 
 ```
 
 Now we need to define the output of our Geofencing pipeline element.
-As explained in the first section, the element should fire every time some geo-located entity arrives within the defined geofence.
+As explained in the first section, the element should fire every time some geo-located entity arrives within the defined
+geofence.
 Therefore, the processor outputs the same schema as it receives as an input.
-Although we don't know the exact input right now as it depends on the stream users connect in StreamPipes when creating pipelines, we can define an _output strategy_ as follows:
+Although we don't know the exact input right now as it depends on the stream users connect in StreamPipes when creating
+pipelines, we can define an _output strategy_ as follows:
 
 ```java
 .outputStrategy(OutputStrategies.keep())
 ```
 
 This defines a _KeepOutputStrategy_, i.e., the input event schema is not modified by the processor.
-There are many more output strategies you can define depending on the functionality you desire, e.g., _AppendOutput_ for defining a processor that enriches events or _CustomOutput_ in case you would like users to select the output by themselves.
+There are many more output strategies you can define depending on the functionality you desire, e.g., _AppendOutput_ for
+defining a processor that enriches events or _CustomOutput_ in case you would like users to select the output by
+themselves.
 
 That's it! We've now defined input requirements, required user input and an output strategy.
-In the next section, you will learn how to extract these parameters once the pipeline element is invoked after a pipeline was created.
+In the next section, you will learn how to extract these parameters once the pipeline element is invoked after a
+pipeline was created.
 
 ## Pipeline element invocation
 
-Once users start a pipeline that uses our geofencing component, the _onInvocation_ method in our class is called. The class `ProcessorParams` includes convenient access to user-configured parameters a users has selected in the pipeline editor and information on the acutal streams that are connected to the pipeline element.
+Once users start a pipeline that uses our geofencing component, the _onInvocation_ method in our class is called. The
+class `ProcessorParams` includes convenient access to user-configured parameters a users has selected in the pipeline
+editor and information on the acutal streams that are connected to the pipeline element.
 
-Next, we are interested in the fields of the input event stream that contains the latitude and longitude value we would like to compute against the geofence center location as follows:
+Next, we are interested in the fields of the input event stream that contains the latitude and longitude value we would
+like to compute against the geofence center location as follows:
 
 ```java
-String latitudeFieldName = parameters.extractor().mappingPropertyValue("latitude-field");
-String longitudeFieldName = parameters.extractor().mappingPropertyValue("longitude-field");
+String latitudeFieldName=parameters.extractor().mappingPropertyValue("latitude-field");
+    String longitudeFieldName=parameters.extractor().mappingPropertyValue("longitude-field");
 ```
 
 We use the same `internalId` we've used to define the mapping property requirements in the `declareModel` method.
 
-Next, for extracting the geofence center coordinates, add to class variables centerLatitude and centerLongitude and assign the selected values using the following statements:
+Next, for extracting the geofence center coordinates, add to class variables centerLatitude and centerLongitude and
+assign the selected values using the following statements:
 
 ```java
-this.centerLatitude = parameters.extractor().singleValueParameter(LATITUDE_CENTER, Float.class);
-this.centerLongitude = parameters.extractor().singleValueParameter(LONGITUDE_CENTER, Float.class);
+this.centerLatitude=parameters.extractor().singleValueParameter(LATITUDE_CENTER,Float.class);
+    this.centerLongitude=parameters.extractor().singleValueParameter(LONGITUDE_CENTER,Float.class);
 ```
 
 The radius value can be extracted as follows:
 
 ```java
-int radius = parameters.extractor().singleValueParameter("radius", Float.class);
+int radius=parameters.extractor().singleValueParameter("radius",Float.class);
 ```
 
-Great! That's all we need to describe a data processor for usage in StreamPipes. Your processor class should look as follows:
+Great! That's all we need to describe a data processor for usage in StreamPipes. Your processor class should look as
+follows:
 
 ```java
 package org.apache.streampipes.pe.example;
@@ -227,58 +259,58 @@
 
 public class GeofencingProcessor extends StreamPipesDataProcessor {
 
- private static final String LATITUDE_CENTER = "latitude-center";
- private static final String LONGITUDE_CENTER = "longitude-center";
+  private static final String LATITUDE_CENTER = "latitude-center";
+  private static final String LONGITUDE_CENTER = "longitude-center";
 
- private float centerLatitude;
- private float centerLongitude;
- private String latitudeFieldName;
- private String longitudeFieldName;
- 
- private int radius;
+  private float centerLatitude;
+  private float centerLongitude;
+  private String latitudeFieldName;
+  private String longitudeFieldName;
 
- @Override
- public DataProcessorDescription declareModel() {
-  return ProcessingElementBuilder.create("org.streampipes.tutorial-geofencing")
-          .category(DataProcessorType.ENRICH)
-          .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-          .withLocales(Locales.EN)
-          .requiredStream(StreamRequirementsBuilder
-                  .create()
-                  .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
-                          Labels.from("latitude-field", "Latitude", "The event " +
-                                  "property containing the latitude value"), PropertyScope.MEASUREMENT_PROPERTY)
-                  .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
-                          Labels.from("longitude-field", "Longitude", "The event " +
-                                  "property containing the longitude value"), PropertyScope.MEASUREMENT_PROPERTY)
-                  .build())
-          .outputStrategy(OutputStrategies.keep())
-          .requiredIntegerParameter("radius", "Geofence Size", "The size of the circular geofence in meters.", 0, 1000, 1)
-          .requiredFloatParameter(Labels.from(LATITUDE_CENTER, "Latitude", "The latitude value"))
-          .requiredFloatParameter(Labels.from(LONGITUDE_CENTER, "Longitude", "The longitude value"))
-          .build();
- }
+  private int radius;
 
- @Override
- public void onInvocation(ProcessorParams parameters, 
-                          SpOutputCollector spOutputCollector, 
-                          EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-  this.centerLatitude = parameters.extractor().singleValueParameter(LATITUDE_CENTER, Float.class);
-  this.centerLongitude = parameters.extractor().singleValueParameter(LONGITUDE_CENTER, Float.class);
-  this.latitudeFieldName = parameters.extractor().mappingPropertyValue("latitude-field");
-  this.longitudeFieldName = parameters.extractor().mappingPropertyValue("longitude-field");
-  this.radius = parameters.extractor().singleValueParameter("radius", Integer.class);
- }
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder.create("org.streampipes.tutorial-geofencing")
+        .category(DataProcessorType.ENRICH)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lat),
+                Labels.from("latitude-field", "Latitude", "The event " +
+                    "property containing the latitude value"), PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.lng),
+                Labels.from("longitude-field", "Longitude", "The event " +
+                    "property containing the longitude value"), PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .outputStrategy(OutputStrategies.keep())
+        .requiredIntegerParameter("radius", "Geofence Size", "The size of the circular geofence in meters.", 0, 1000, 1)
+        .requiredFloatParameter(Labels.from(LATITUDE_CENTER, "Latitude", "The latitude value"))
+        .requiredFloatParameter(Labels.from(LONGITUDE_CENTER, "Longitude", "The longitude value"))
+        .build();
+  }
 
- @Override
- public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+  @Override
+  public void onInvocation(ProcessorParams parameters,
+                           SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.centerLatitude = parameters.extractor().singleValueParameter(LATITUDE_CENTER, Float.class);
+    this.centerLongitude = parameters.extractor().singleValueParameter(LONGITUDE_CENTER, Float.class);
+    this.latitudeFieldName = parameters.extractor().mappingPropertyValue("latitude-field");
+    this.longitudeFieldName = parameters.extractor().mappingPropertyValue("longitude-field");
+    this.radius = parameters.extractor().singleValueParameter("radius", Integer.class);
+  }
 
- }
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
 
- @Override
- public void onDetach() throws SpRuntimeException {
+  }
 
- }
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
 }
 
 
@@ -292,59 +324,67 @@
 
 ```java
 
-  @Override
-  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
-      float latitude = event.getFieldBySelector(latitudeFieldName).getAsPrimitive().getAsFloat();
-      float longitude = event.getFieldBySelector(longitudeFieldName).getAsPrimitive().getAsFloat();
+@Override
+public void onEvent(Event event,SpOutputCollector collector)throws SpRuntimeException{
+    float latitude=event.getFieldBySelector(latitudeFieldName).getAsPrimitive().getAsFloat();
+    float longitude=event.getFieldBySelector(longitudeFieldName).getAsPrimitive().getAsFloat();
 
-      float distance = distFrom(latitude, longitude, centerLatitude, centerLongitude);
+    float distance=distFrom(latitude,longitude,centerLatitude,centerLongitude);
 
-      if (distance <= radius) {
-      collector.collect(event);
-      }
-  }
+    if(distance<=radius){
+    collector.collect(event);
+    }
+    }
 
-  public static float distFrom(float lat1, float lng1, float lat2, float lng2) {
-    double earthRadius = 6371000;
-    double dLat = Math.toRadians(lat2-lat1);
-    double dLng = Math.toRadians(lng2-lng1);
-    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
-            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
-                    Math.sin(dLng/2) * Math.sin(dLng/2);
-    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
-    return (float) (earthRadius * c);
-  }
+public static float distFrom(float lat1,float lng1,float lat2,float lng2){
+    double earthRadius=6371000;
+    double dLat=Math.toRadians(lat2-lat1);
+    double dLng=Math.toRadians(lng2-lng1);
+    double a=Math.sin(dLat/2)*Math.sin(dLat/2)+
+    Math.cos(Math.toRadians(lat1))*Math.cos(Math.toRadians(lat2))*
+    Math.sin(dLng/2)*Math.sin(dLng/2);
+    double c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
+    return(float)(earthRadius*c);
+    }
 
-}
+    }
 ```
 
-We won't go into details here as this isn't StreamPipes-related code, but in general the class extracts latitude and longitude fields from the input event (which is provided as a map data type) and calculates the distance between the geofence center and these coordinates.
+We won't go into details here as this isn't StreamPipes-related code, but in general the class extracts latitude and
+longitude fields from the input event (which is provided as a map data type) and calculates the distance between the
+geofence center and these coordinates.
 If the distance is below the given radius, the event is forwarded to the next operator.
 
 See the [event model](06_extend-sdk-event-model.md) guide to learn how to extract parameters from events.
 
 ## Registering the pipeline element
-The final step is to register the data processor in the `Init` method. Add the following line to the `SpServiceDefinitionBuilder`:
+
+The final step is to register the data processor in the `Init` method. Add the following line to
+the `SpServiceDefinitionBuilder`:
 
 ```java
  .registerPipelineElement(new GeofencingProcessor())
 ```
 
 ## Starting the service
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and should work out-of-the-box.
-In some cases, the detected hostname is not resolvable from within a container (where the core is running). In this case, provide a SP_HOST environment variable to override the auto-discovery.
-</p>
-</div>
 
+:::tip
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p> The default port of all pipeline element services as defined in the `create` method is port 8090.
-       If you'd like to run multiple services at the same time on your development machine, change the port here. As an alternative, you can also provide an env variable `SP_PORT` which overrides the port settings. This is useful to use different configs for dev and prod environments.
-</p>
-</div>
+Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and
+should work out-of-the-box.
+In some cases, the detected hostname is not resolvable from within a container (where the core is running). In this
+case, provide a SP_HOST environment variable to override the auto-discovery.
+
+:::
+
+:::tip
+
+The default port of all pipeline element services as defined in the `create` method is port 8090.
+If you'd like to run multiple services at the same time on your development machine, change the port here. As an
+alternative, you can also provide an env variable `SP_PORT` which overrides the port settings. This is useful to use
+different configs for dev and prod environments.
+
+:::
 
 Now we are ready to start our service!
 
@@ -353,7 +393,8 @@
 Execute the main method in the class `Init` we've just created.
 
 The service automatically registers itself in StreamPipes.
-To install the just created element, open the StreamPipes UI and follow the manual provided in the [user guide](03_use-install-pipeline-elements.md).
+To install the just created element, open the StreamPipes UI and follow the manual provided in
+the [user guide](03_use-install-pipeline-elements.md).
 
 ## Read more
 
diff --git a/docs/06_extend-tutorial-data-sinks.md b/docs/06_extend-tutorial-data-sinks.md
index 13064bd..69ada85 100644
--- a/docs/06_extend-tutorial-data-sinks.md
+++ b/docs/06_extend-tutorial-data-sinks.md
@@ -6,19 +6,22 @@
 
 In this tutorial, we will add a new data sink using the standalone wrapper.
 
-From an architectural point of view, we will create a self-contained service that includes the description of the data sink and a corresponding implementation.
+From an architectural point of view, we will create a self-contained service that includes the description of the data
+sink and a corresponding implementation.
 
 ## Objective
 
 We are going to create a new data sink that calls an external HTTP endpoint to forward data to an external service.
 
-For each incoming event, an external service is invoked using an HTTP POST request. In this example, we'll call an endpoint provided by [RequestBin](https://requestbin.com/).
-To setup your own endpoint, go to [https://requestbin.com/](https://requestbin.com/) and click "Create a request bin". Copy the URL of the newly created endpoint.
-
+For each incoming event, an external service is invoked using an HTTP POST request. In this example, we'll call an
+endpoint provided by [RequestBin](https://requestbin.com/).
+To setup your own endpoint, go to [https://requestbin.com/](https://requestbin.com/) and click "Create a request bin".
+Copy the URL of the newly created endpoint.
 
 ## Project setup
 
-Instead of creating a new project from scratch, we recommend to use the Maven archetype to create a new project skeleton (streampipes-archetype-extensions-jvm).
+Instead of creating a new project from scratch, we recommend to use the Maven archetype to create a new project
+skeleton (streampipes-archetype-extensions-jvm).
 Enter the following command in a command line of your choice (Apache Maven needs to be installed):
 
 ```
@@ -29,10 +32,12 @@
 
 You will see a project structure similar to the structure shown in the [archetypes](06_extend-archetypes.md) section.
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.</p>
-</div>
+:::tip
+
+Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your
+application into a Docker container.
+
+:::
 
 Now you're ready to create your first data sink for StreamPipes!
 
@@ -68,10 +73,10 @@
         .withAssets(Assets.DOCUMENTATION, Assets.ICON)
         .withLocales(Locales.EN)
         .requiredStream(StreamRequirementsBuilder
-                .create()
-                .requiredPropertyWithNaryMapping(EpRequirements.anyProperty(), Labels.withId(
-                        "fields-to-send"), PropertyScope.NONE)
-                .build())
+            .create()
+            .requiredPropertyWithNaryMapping(EpRequirements.anyProperty(), Labels.withId(
+                "fields-to-send"), PropertyScope.NONE)
+            .build())
         .build();
   }
 
@@ -94,22 +99,33 @@
 
 ```
 
-In this class, we need to implement three methods: The `declareModel` method is used to define abstract stream requirements such as event properties that must be present in any input stream that is later connected to the element using the StreamPipes UI.
-The second method, `onInvocation` is called once a pipeline using this sink is started. The third method, `onEvent`, is called for every incoming event.
+In this class, we need to implement three methods: The `declareModel` method is used to define abstract stream
+requirements such as event properties that must be present in any input stream that is later connected to the element
+using the StreamPipes UI.
+The second method, `onInvocation` is called once a pipeline using this sink is started. The third method, `onEvent`, is
+called for every incoming event.
 
 The ``declareModel`` method describes the properties of our data sink:
-* ``category`` defines a category for this sink.
-* ``withAssets`` denotes that we will provide an external documentation file and an icon, which can be found in the ``resources`` folder
-* ``withLocales`` defines that we will provide an external language file, also available in the ``resources`` folder
-* ``requiredStream`` defines requirements any input stream connected to this sink must provide. In this case, we do not have any specific requirements, we just forward all incoming events to the REST sink. However, we want to let the user display a list of available fields from the connected input event, where users can select a subset. This is defined by defining a Mapping from the empty requirement. This will later on render a selection dialog in the pipeline editor.
 
-The ``onInvocation`` method is called when a pipeline containing the sink is started. Once a pipeline is started, we would like to extract user-defined parameters.
-In this example, we simply extract the fields selected by users that should be forwarded to the REST sink. Finally, we return a new configured event sink containing the parameters.
+* ``category`` defines a category for this sink.
+* ``withAssets`` denotes that we will provide an external documentation file and an icon, which can be found in
+  the ``resources`` folder
+* ``withLocales`` defines that we will provide an external language file, also available in the ``resources`` folder
+* ``requiredStream`` defines requirements any input stream connected to this sink must provide. In this case, we do not
+  have any specific requirements, we just forward all incoming events to the REST sink. However, we want to let the user
+  display a list of available fields from the connected input event, where users can select a subset. This is defined by
+  defining a Mapping from the empty requirement. This will later on render a selection dialog in the pipeline editor.
+
+The ``onInvocation`` method is called when a pipeline containing the sink is started. Once a pipeline is started, we
+would like to extract user-defined parameters.
+In this example, we simply extract the fields selected by users that should be forwarded to the REST sink. Finally, we
+return a new configured event sink containing the parameters.
 
 ## Pipeline element invocation
 
-Once users start a pipeline that uses our geofencing component, the _onInvocation_ method in our class is called. The class `SinkParams` includes a graph that contains information on the configuration parameters a users has selected in the pipeline editor and information on the acutal streams that are connected to the pipeline element.
-
+Once users start a pipeline that uses our geofencing component, the _onInvocation_ method in our class is called. The
+class `SinkParams` includes a graph that contains information on the configuration parameters a users has selected in
+the pipeline editor and information on the acutal streams that are connected to the pipeline element.
 
 ## Adding an implementation
 
@@ -123,6 +139,7 @@
 import com.google.common.base.Charsets;
 import org.apache.http.client.fluent.Request;
 import org.apache.http.entity.StringEntity;
+
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.dataformat.SpDataFormatDefinition;
 import org.apache.streampipes.dataformat.json.JsonDataFormatDefinition;
@@ -139,6 +156,7 @@
 import org.apache.streampipes.wrapper.context.EventSinkRuntimeContext;
 import org.apache.streampipes.wrapper.standalone.SinkParams;
 import org.apache.streampipes.wrapper.standalone.StreamPipesDataSink;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -186,42 +204,51 @@
 }
 
 ```
-The only class variable you need to change right now is the REST_ENDPOINT_URL. Change this url to the URL provided by your request bin.
+
+The only class variable you need to change right now is the REST_ENDPOINT_URL. Change this url to the URL provided by
+your request bin.
 In the ``ònEvent`` method, we use a helper method to get a subset of the incoming event.
 Finally, we convert the resulting ``Map`` to a JSON string and call the endpoint.
 
-
 ## Preparing the service
+
 The final step is to register the sink as a pipeline element.
 
 Go to the class `Init` and register the sink:
+
 ```java
 .registerPipelineElement(new RestSink())
 ```
 
 ## Starting the service
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and should work out-of-the-box.
-In some cases, the detected hostname is not resolvable from within a container (where the core is running). In this case, provide a SP_HOST environment variable to override the auto-discovery.
-</p>
-</div>
 
+:::tip
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p> The default port of all pipeline element services as defined in the `create` method is port 8090.
-       If you'd like to run multiple services at the same time on your development machine, change the port here. As an alternative, you can also provide an env variable `SP_PORT` which overrides the port settings. This is useful to use different configs for dev and prod environments.
-</p>
-</div>
+Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and
+should work out-of-the-box.
+In some cases, the detected hostname is not resolvable from within a container (where the core is running). In this
+case, provide a SP_HOST environment variable to override the auto-discovery.
+
+:::
+
+:::tip
+
+The default port of all pipeline element services as defined in the `create` method is port 8090.
+If you'd like to run multiple services at the same time on your development machine, change the port here. As an
+alternative, you can also provide an env variable `SP_PORT` which overrides the port settings. This is useful to use
+different configs for dev and prod environments.
+
+:::
 
 Now we are ready to start our service!
 
 Configure your IDE to provide an environment variable called ``SP_DEBUG`` with value ``true`` when starting the project.
 
-Execute the main method in the class `Init` we've just created. The service automatically registers itself in StreamPipes.
+Execute the main method in the class `Init` we've just created. The service automatically registers itself in
+StreamPipes.
 
-To install the created element, open the StreamPipes UI and follow the manual provided in the [user guide](03_use-install-pipeline-elements.md).
+To install the created element, open the StreamPipes UI and follow the manual provided in
+the [user guide](03_use-install-pipeline-elements.md).
 
 ## Read more
 
diff --git a/docs/06_extend-tutorial-data-sources.md b/docs/06_extend-tutorial-data-sources.md
index 15dc21e..3aa9954 100644
--- a/docs/06_extend-tutorial-data-sources.md
+++ b/docs/06_extend-tutorial-data-sources.md
@@ -38,11 +38,11 @@
 
 You will see a project structure similar to the structure shown in the [archetypes](06_extend-archetypes.md) section.
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.
-</p>
-</div>
+:::tip
+
+Besides the basic project skeleton, the sample project also includes an example Dockerfile you can use to package your application into a Docker container.
+
+:::
 
 ## Adding a data stream description
 
@@ -181,12 +181,12 @@
 
 ## Starting the service
 
-<div class="admonition tip">
-<div class="admonition-title">Tip</div>
-<p>Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and should work out-of-the-box.
+:::tip
+
+Once you start the service, it will register in StreamPipes with the hostname. The hostname will be auto-discovered and should work out-of-the-box.
 In some cases, the detected hostname is not resolvable from within a container (where the core is running). In this case, provide a SP_HOST environment variable to override the auto-discovery.
-</p>
-</div>
+
+:::
 
 Now we are ready to start our first container!
 
diff --git a/docs/07_technicals-configuration.md b/docs/07_technicals-configuration.md
index 4c6d101..cc34383 100644
--- a/docs/07_technicals-configuration.md
+++ b/docs/07_technicals-configuration.md
@@ -5,17 +5,21 @@
 ---
 
 On this page we explain how the StreamPipes configuration works.
-StreamPipes allows the individual services (pipeline element containers and third-party services) to store configuration parameters in a distributed key-value store.
-This has the advantage that individual services do not need to store any configurations on the local file system, enabling us to run containers anywhere.
+StreamPipes allows the individual services (pipeline element containers and third-party services) to store configuration
+parameters in a distributed key-value store.
+This has the advantage that individual services do not need to store any configurations on the local file system,
+enabling us to run containers anywhere.
 As a key-value store we use [Consul](https://www.consul.io/), which is an essential service for all our services.
 
 <img src="/img/configuration/consul.png" width="50%" alt="Semantic description of data processor"/>
 
-
 ## Edit Configurations
+
 All services in StreamPipes can have configuration parameters.
-You can either change them in the consul user interface (which is by default running on port 8500) or directly in the StreamPipes Configurations Page.
-Once a new  pipeline element container is started, it is registered in Consul and the parameters can be edited in the configuration page, as shown below.
+You can either change them in the consul user interface (which is by default running on port 8500) or directly in the
+StreamPipes Configurations Page.
+Once a new pipeline element container is started, it is registered in Consul and the parameters can be edited in the
+configuration page, as shown below.
 To store changes in Consul, the update button must be clicked.
 
 <div class="my-carousel">
@@ -23,22 +27,30 @@
 </div>
 
 ## Configuration for Developers
+
 We provide a Configurations API for the use of configuration parameters in your services.
-Each processing element project has a “config” package [[Example]](https://github.com/apache/streampipes-extensions/tree/dev/streampipes-sinks-internal-jvm/src/main/java/org/streampipes/sinks/internal/jvm/config).
+Each processing element project has a “config”
+package [[Example]](https://github.com/apache/streampipes-extensions/tree/dev/streampipes-sinks-internal-jvm/src/main/java/org/streampipes/sinks/internal/jvm/config).
 This package usually contains two classes.
-One containing unique keys for the configuration values and one containing the getter and setter methods to access these values.
+One containing unique keys for the configuration values and one containing the getter and setter methods to access these
+values.
 For the naming of configuration keys, we recommend to use “SP” as a prefix.
-As we explain later, it is possible to set default configurations as environment variables, this prefix makes them unique on your server.
-A configuration entry needs a unique config key. For this key, a value can be specified containing the configuration, like for example the port number of the service.
-For each configuration, a description explaining the parameter can be provided, further the data type must be specified and whether it is a password or not.
+As we explain later, it is possible to set default configurations as environment variables, this prefix makes them
+unique on your server.
+A configuration entry needs a unique config key. For this key, a value can be specified containing the configuration,
+like for example the port number of the service.
+For each configuration, a description explaining the parameter can be provided, further the data type must be specified
+and whether it is a password or not.
 Below, the schema of a configuration item is shown on the left and an example of a port configuration on the right.
 
 <img src="/img/configuration/config_key.png" width="80%" alt="Semantic description of data processor"/>
 
-As a developer, you can add as many new configurations to services as you wish, but there are some that are required for all processing element containers.
+As a developer, you can add as many new configurations to services as you wish, but there are some that are required for
+all processing element containers.
 Those are **the host**, **the port**, and **the name** of the service.
 
 ## Default Values
+
 You can provide default values for the configurations, which are used when a configuration is read for the first time.
 The first option is to register a configuration parameter in the Config class.
 This is a fallback value, which is used if nothing else is defined.
@@ -46,13 +58,17 @@
 It is possible to provide a default value by setting an environment variable.
 In this case, the convention is that the key of a configuration parameter must be used as the environment variable.
 Now, this value is used instead of the value defined in the Config class.
-During development, the configuration values often need to be changed for debugging purposes, therefore we provide an .env file in all processing element projects and archetypes.
-This file can be used by your IDE to set the environment variables. (e.g., [Intellij Plugin](https://plugins.jetbrains.com/plugin/7861-envfile))
+During development, the configuration values often need to be changed for debugging purposes, therefore we provide an
+.env file in all processing element projects and archetypes.
+This file can be used by your IDE to set the environment variables. (
+e.g., [Intellij Plugin](https://plugins.jetbrains.com/plugin/7861-envfile))
 When you need to change the variable at runtime, you can do this in the StreamPipes configurations as explained before.
 Those changes take effect immediately without the need of a container restart.
 
-<div class="admonition warning">
-<div class="admonition-title">Installed pipeline elements</div>
-<p>Be cautious, when the configuration is used in the semantic description of a processing element which is already installed in StreamPipes, you have to reload this element in StreamPipes (my elements -> reload).
-   In addition, changes might affect already running pipelines.</p>
-</div>
+:::caution Installed pipeline elements
+
+Be cautious, when the configuration is used in the semantic description of a processing element which is already
+installed in StreamPipes, you have to reload this element in StreamPipes (my elements -> reload).
+In addition, changes might affect already running pipelines.
+
+:::
diff --git a/docs/user-guide-installation.md b/docs/user-guide-installation.md
deleted file mode 100644
index 74cf1fa..0000000
--- a/docs/user-guide-installation.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-id: user-guide-installation
-title: Installation
-sidebar_label: Installation
----
-## Prerequisites
-
-### Hardware
-
-* Docker (latest version, see instructions below)
-* Docker Compose (latest version., see instructions below)
-
-### Supported operating systems
-We rely on Docker and support three operating systems for the StreamPipes system
-
-* Linux
-* OSX
-* Windows 10
-    * Please note that older Windows versions are not compatible with Docker. Also Linux VMs under Windows might not work, due to network problems with docker.
-
-### Web Browser
-StreamPipes is a modern web application, therefore you need a recent version of Chrome (recommended), Firefox or Edge.
-
-### Docker
-You need to have Docker installed on your system before you continue with the installation guide.
-
-
-<div class="admonition info">
-<div class="admonition-title">Install Docker</div>
-<p>Go to https://docs.docker.com/installation/ and follow the instructions to install Docker for your OS. Make sure docker can be started as a non-root user (described in the installation manual, don’t forget to log out and in again) and check that Docker is installed correctly by executing docker-run hello-world</p>
-</div>
-
-<div class="admonition info">
-<div class="admonition-title">Configure Docker</div>
-<p>By default, Docker uses only a limited number of CPU cores and memory.
-       If you run StreamPipes on Windows or on a Mac you need to adjust the default settings.
-       To do that, click on the Docker icon in your tab bar and open the preferences.
-       Go to the advanced preferences and set the **number of CPUs to 6** (recommended) and the **Memory to 4GB**.
-       After changing the settings, Docker needs to be restarted.</p></div>
-
-
-## Install StreamPipes
-
-<div class="tab-content" id="myTabContent">
-    <div class="tab-pane fade show active" id="linux" role="tabpanel" aria-labelledby="linux-tab">
-        <ul style="padding-left:0">
-            <li class="installation-step">
-                <div class="wrapper-container" style="align-items: center;justify-content: center;">
-                    <div class="wrapper-step">
-                        <span class="fa-stack fa-2x">
-                             <i class="fas fa-circle fa-stack-2x sp-color-green"></i>
-                             <strong class="fa-stack-1x" style="color:white;">1</strong>
-                        </span>
-                    </div>
-                    <div class="wrapper-instruction">
-                        <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=streampipes/installer/0.70.0/apache-streampipes-installer-0.70.0-incubating-source-release.zip">Download</a>
-                        the latest Apache StreamPipes release and extract the zip file to a directory of your choice.
-                    </div>
-                </div>
-            </li>
-            <li class="installation-step">
-                <div class="wrapper-container" style="align-items: center;justify-content: center;">
-                    <div class="wrapper-step">
-                        <span class="fa-stack fa-2x">
-                             <i class="fas fa-circle fa-stack-2x sp-color-green"></i>
-                             <strong class="fa-stack-1x" style="color:white;">2</strong>
-                        </span>
-                    </div>
-                    <div class="wrapper-instruction">
-                       In a command prompt, open the folder <code>/compose</code> and run <code>docker-compose up -d</code>.
-                    </div>
-                </div>
-            </li>
-            <li class="installation-step">
-                <div class="wrapper-container" style="align-items: center;justify-content: center;">
-                    <div class="wrapper-step">
-                        <span class="fa-stack fa-2x">
-                             <i class="fas fa-circle fa-stack-2x sp-color-green"></i>
-                             <strong class="fa-stack-1x" style="color:white;">3</strong>
-                        </span>
-                    </div>
-                    <div class="wrapper-instruction">
-                        Open your browser, navigate to http://localhost:80 (or the domain name of your server) and finish the setup according to the instructions below.
-                    </div>
-                </div>
-            </li>
-        </ul>
-        </div>
-    </div>
-
-## Setup StreamPipes
-
-Once you've opened the browser at the URL given above, you should see StreamPipes application as shown below.
-To set up the system, enter an email address and a password and click on install.
-At this point, it is not necessary to change anything in the advanced settings menu.
-The installation might take some time, continue by clicking on "Go to login page", once all components are successfully configured.
-
-
-On the login page, enter your credentials, then you should be forwarded to the home page.
-
-Congratulations! You've successfully managed to install StreamPipes. Now we're ready to build our first pipeline!
-
-<div class="my-carousel">
-    <img src="/img/quickstart/setup/01_register_user.png" alt="Set Up User"/>
-    <img src="/img/quickstart/setup/02_user_set_up.png" alt="SetUp StreamPipes Components"/>
-    <img src="/img/quickstart/setup/03_login.png" alt="Go to login page"/>
-    <img src="/img/quickstart/setup/04_home.png" alt="Home page"/>
-</div>
-
-<div class="admonition error">
-<div class="admonition-title">Errors during the installation process</div>
-<p>In most cases, errors during the installation are due to an under-powered system.<br/>
-If there is a problem with any of the components, please restart the whole system and delete the "config" directory on the server.
-   This directory is in the same folder as the docker-compose.yml file.<br/>
-   Please also make sure that your system meets the hardware requirements as mentioned in the first section of the installation guide.</p>
-</div>
-
-## Next Steps
-
-Now you can continue with the tutorial on page [First steps](user-guide-first-steps.md).
diff --git a/website-v2/static/css/custom-website.css b/website-v2/static/css/custom-website.css
index 89446e3..f90b0fe 100644
--- a/website-v2/static/css/custom-website.css
+++ b/website-v2/static/css/custom-website.css
@@ -61,7 +61,6 @@
 	font-family: 'Roboto', sans-serif;
 	color: #44444e;
 	font-size: 15px;
-	font-weight: 500;
 	margin-top: 0;
 	line-height: 1.9;
 }
