You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by mi...@apache.org on 2022/12/18 16:52:04 UTC

[streampipes] 01/01: [STREAMPIPES-642] 1-class processor; misc changes structure and ressource

This is an automated email from the ASF dual-hosted git repository.

micklich pushed a commit to branch STREAMPIPES-642
in repository https://gitbox.apache.org/repos/asf/streampipes.git

commit 2e38a93d91bb2e705d8ae60da5d401e44b344b4a
Author: micklich <mi...@apache.org>
AuthorDate: Sun Dec 18 17:50:34 2022 +0100

    [STREAMPIPES-642] 1-class processor; misc changes structure and ressource
    
    
    move resources
    
    
    misc changes on resources
    
    
    move resources
    
    
    misc changes on resources
    
    
    rewrite latlng to 1 class
    
    
    replace processor call in init
    
    
    adjust resources text
    
    
    fix text in epsg processor resource
    
    
    change icon logo
    
    
    rewrite trajectory to 1 class
    
    
    dd
    
    
    change descriptions on string.en
    
    
    styleguide and change input value for method addPoint
    
    
    replace proesor call in init
    
    
    trajectory delete old classes
    
    
    [STREAMPIPES-642] style check on helper classes
    
    [STREAMPIPES-642] change location from DistanceUtil and Rename
    
    
    [STREAMPIPES-642]  stylecheck
    
    
    [STREAMPIPES-642]  1 class for distance calculation. adjust ressources
    
    
    [STREAMPIPES-642]  distance caclulation delete old controller files
    
    
    [STREAMPIPES-642] adjust misc format
    
    
    [STREAMPIPES-642] Add missing icon command
    
    
    [STREAMPIPES-642] static distance  1 class , change resources
    
    
    [STREAMPIPES-642] remove old static distance controller
    
    
    [STREAMPIPES-642] 1 class geocoder, change resources
    
    
    [STREAMPIPES-642] remove old geocoder classes
    
    
    [STREAMPIPES-642] remove old import
    
    [STREAMPIPES-642] 1 class speed calculator
    
    
    [STREAMPIPES-642] 1 class static geocoder + misc icon changes
    
    
    [STREAMPIPES-642]  cleanup and remove old fragments
    
    
    [STREAMPIPES-642] misc changes on documents
    
    
    [STREAMPIPES-642] fix line indent
    
    
    [STREAMPIPES-642] restructure packade structure
    
    
    [STREAMPIPES-642]  change images
    
    
    [STREAMPIPES-642] fix license header by stylecheckl
    
    
    [STREAMPIPES-642] move geoname processor
    
    
    [STREAMPIPES-642] misc changes in ressources
    
    
    [STREAMPIPES-642]  impl changes from stylecheck
    
    
    [STREAMPIPES-642] changes due stylecode
    
    
    [STREAMPIPES-642] 1 class geoname
    
    
    [STREAMPIPES-642] 1-class processor; misc changes structure and ressource
---
 .../streampipes/processors/geo/jvm/GeoJvmInit.java |  62 +++++----
 .../geo/jvm/jts/helper/SpGeometryBuilder.java      |  15 +--
 .../geo/jvm/jts/helper/SpTrajectoryBuilder.java    |  35 +++--
 .../EpsgProcessor.java}                            |  53 ++++----
 .../jvm/jts/processor/latlngtogeo/LatLngToGeo.java |  73 -----------
 .../latlngtogeo/LatLngToGeoParameter.java          |  49 -------
 .../LatLngToJtsPointProcessor.java}                |  73 +++++++----
 .../geo/jvm/jts/processor/setepsg/SetEPSG.java     |  54 --------
 .../jts/processor/setepsg/SetEpsgParameter.java    |  37 ------
 .../trajectory/CreateTrajectoryFromPoints.java     |  82 ------------
 .../CreateTrajectoryFromPointsController.java      | 121 ------------------
 .../CreateTrajectoryFromPointsParameter.java       |  61 ---------
 .../trajectory/TrajectoryFromPointsProcessor.java  | 142 +++++++++++++++++++++
 .../helper/HaversineDistanceUtil.java}             |   8 +-
 .../HaversineDistanceCalculatorProcessor.java      | 111 ++++++++++++++++
 ...HaversineStaticDistanceCalculatorProcessor.java | 114 +++++++++++++++++
 .../googlemaps/GoogleMapsGeocoderProcessor.java    | 122 ++++++++++++++++++
 .../GoogleMapsStaticGeocoderProcessor.java         | 115 +++++++++++++++++
 .../geocityname/GeoCityNameRevdecodeProcessor.java | 120 +++++++++++++++++
 .../revgeocoder/geocityname}/geocode/GeoName.java  |   6 +-
 .../geocityname}/geocode/ReverseGeoCode.java       |   4 +-
 .../geocityname}/geocode/kdtree/KDNode.java        |   3 +-
 .../geocode/kdtree/KDNodeComparator.java           |   2 +-
 .../geocityname}/geocode/kdtree/KDTree.java        |   2 +-
 .../speedcalculator/SpeedCalculatorProcessor.java  | 139 ++++++++++++++++++++
 .../distancecalculator/DistanceCalculator.java     |  58 ---------
 .../DistanceCalculatorController.java              |  89 -------------
 .../DistanceCalculatorParameters.java              |  60 ---------
 .../processor/geocoder/GoogleMapsGeocoding.java    |  83 ------------
 .../geocoder/GoogleMapsGeocodingController.java    |  70 ----------
 .../geocoder/GoogleMapsGeocodingParameters.java    |  36 ------
 .../processor/revgeocoder/ReverseGeocoding.java    |  84 ------------
 .../revgeocoder/ReverseGeocodingController.java    |  75 -----------
 .../revgeocoder/ReverseGeocodingParameters.java    |  42 ------
 .../geo/jvm/processor/speed/SpeedCalculator.java   |  90 -------------
 .../processor/speed/SpeedCalculatorController.java |  92 -------------
 .../processor/speed/SpeedCalculatorParameters.java |  58 ---------
 .../StaticDistanceCalculator.java                  |  63 ---------
 .../StaticDistanceCalculatorController.java        |  91 -------------
 .../StaticDistanceCalculatorParameters.java        |  67 ----------
 .../staticgeocoder/StaticGoogleMapsGeocoder.java   |  79 ------------
 .../StaticGoogleMapsGeocodingController.java       |  69 ----------
 .../StaticGoogleMapsGeocodingParameters.java       |  36 ------
 .../documentation.md                               |  17 ++-
 .../icon.png                                       | Bin
 .../strings.en                                     |   5 +-
 .../icon.png                                       | Bin 20621 -> 0 bytes
 .../documentation.md                               |   6 +-
 .../icon.png                                       | Bin 0 -> 32154 bytes
 .../strings.en                                     |  13 +-
 .../documentation.md                               |   2 +-
 .../icon.png                                       | Bin 9399 -> 20258 bytes
 .../strings.en                                     |   8 +-
 .../documentation.md                               |   7 +-
 .../icon.png                                       | Bin 0 -> 20287 bytes
 .../strings.en                                     |  16 +--
 .../documentation.md                               |  10 +-
 .../icon.png                                       | Bin 0 -> 20008 bytes
 .../strings.en                                     |   7 +-
 .../documentation.md                               |   5 +-
 .../icon.png                                       | Bin 0 -> 26240 bytes
 .../strings.en                                     |   9 +-
 .../documentation.md                               |   7 +-
 .../icon.png                                       | Bin 0 -> 28255 bytes
 .../strings.en                                     |   8 +-
 .../documentation.md                               |  15 ++-
 .../icon.png                                       | Bin 0 -> 27138 bytes
 .../strings.en                                     |  13 +-
 .../documentation.md                               |  10 +-
 .../icon.png                                       | Bin 0 -> 30074 bytes
 .../strings.en                                     |   6 +-
 .../icon.png                                       | Bin 14632 -> 0 bytes
 .../apache/streampipes/model/runtime/Event.java    |   2 +-
 tools/maven/suppressions.xml                       |   2 +-
 74 files changed, 1098 insertions(+), 1915 deletions(-)

diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java
index e1ac152ad..a1924e371 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/GeoJvmInit.java
@@ -29,15 +29,15 @@ import org.apache.streampipes.messaging.jms.SpJmsProtocolFactory;
 import org.apache.streampipes.messaging.kafka.SpKafkaProtocolFactory;
 import org.apache.streampipes.messaging.mqtt.SpMqttProtocolFactory;
 import org.apache.streampipes.processors.geo.jvm.config.ConfigKeys;
-import org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo.LatLngToGeoController;
-import org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg.SetEpsgController;
-import org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.CreateTrajectoryFromPointsController;
-import org.apache.streampipes.processors.geo.jvm.processor.distancecalculator.DistanceCalculatorController;
-import org.apache.streampipes.processors.geo.jvm.processor.geocoder.GoogleMapsGeocodingController;
-import org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.ReverseGeocodingController;
-import org.apache.streampipes.processors.geo.jvm.processor.speed.SpeedCalculatorController;
-import org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator.StaticDistanceCalculatorController;
-import org.apache.streampipes.processors.geo.jvm.processor.staticgeocoder.StaticGoogleMapsGeocodingController;
+import org.apache.streampipes.processors.geo.jvm.jts.processor.epsg.EpsgProcessor;
+import org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint.LatLngToJtsPointProcessor;
+import org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.TrajectoryFromPointsProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine.HaversineDistanceCalculatorProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic.HaversineStaticDistanceCalculatorProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps.GoogleMapsGeocoderProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic.GoogleMapsStaticGeocoderProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.GeoCityNameRevdecodeProcessor;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator.SpeedCalculatorProcessor;
 
 public class GeoJvmInit extends StandaloneModelSubmitter {
 
@@ -47,28 +47,26 @@ public class GeoJvmInit extends StandaloneModelSubmitter {
             "Processors Geo JVM",
             "",
             8090)
-            .registerPipelineElements(
-                    new DistanceCalculatorController(),
-                    new GoogleMapsGeocodingController(),
-                    new StaticGoogleMapsGeocodingController(),
-                    new ReverseGeocodingController(),
-                    new SetEpsgController(),
-                    new LatLngToGeoController(),
-                    new CreateTrajectoryFromPointsController(),
-
-                    new SpeedCalculatorController(),
-
-                    new StaticDistanceCalculatorController())
-            .registerMessagingFormats(
-                    new JsonDataFormatFactory(),
-                    new CborDataFormatFactory(),
-                    new SmileDataFormatFactory(),
-                    new FstDataFormatFactory())
-            .registerMessagingProtocols(
-                    new SpKafkaProtocolFactory(),
-                    new SpJmsProtocolFactory(),
-                    new SpMqttProtocolFactory())
-            .addConfig(ConfigKeys.GOOGLE_API_KEY, "", "Google Maps API key")
-            .build();
+        .registerPipelineElements(
+            new HaversineDistanceCalculatorProcessor(),
+            new HaversineStaticDistanceCalculatorProcessor(),
+            new GoogleMapsGeocoderProcessor(),
+            new GoogleMapsStaticGeocoderProcessor(),
+            new GeoCityNameRevdecodeProcessor(),
+            new EpsgProcessor(),
+            new LatLngToJtsPointProcessor(),
+            new TrajectoryFromPointsProcessor(),
+            new SpeedCalculatorProcessor())
+        .registerMessagingFormats(
+            new JsonDataFormatFactory(),
+            new CborDataFormatFactory(),
+            new SmileDataFormatFactory(),
+            new FstDataFormatFactory())
+        .registerMessagingProtocols(
+            new SpKafkaProtocolFactory(),
+            new SpJmsProtocolFactory(),
+            new SpMqttProtocolFactory())
+        .addConfig(ConfigKeys.GOOGLE_API_KEY, "", "Google Maps API key")
+        .build();
   }
 }
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpGeometryBuilder.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpGeometryBuilder.java
index 67af7cdf1..0fa5ccc17 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpGeometryBuilder.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpGeometryBuilder.java
@@ -27,7 +27,6 @@ import org.locationtech.jts.io.ParseException;
 import org.locationtech.jts.io.WKTReader;
 
 public class SpGeometryBuilder {
-
   static final double LONGITUDE_MIN = -180.00;
   static final double LONGITUDE_MAX = 180.00;
   static final double LATITUDE_MIN = -90;
@@ -40,8 +39,8 @@ public class SpGeometryBuilder {
    * @param lng  Longitude value in the range -180 &lt; Longitude &gt; 180
    * @param lat  Latitude value in the range -90 &lt; LATITUDE &gt; 90
    * @param epsg EPSG Code representing coordinate reference system
-   * @return a {@link org.locationtech.jts.geom.Point}. An empty point geometry is created if Latitude or
-   * Longitude values are out of range or has null values.
+   * @return a {@link org.locationtech.jts.geom.Point}. An empty point geometry is created if Latitude
+   * or Longitude values are out of range or has null values.
    */
   public static Point createSPGeom(Double lng, Double lat, Integer epsg) {
     Point point;
@@ -76,8 +75,8 @@ public class SpGeometryBuilder {
    *
    * @param wktString Well-known text representation of the input geometry
    * @param epsg      EPSG Code representing SRID
-   * @return {@link org.locationtech.jts.geom.Geometry}. An empty point geometry is created if
-   * {@link org.locationtech.jts.io.ParseException} due invalid WKT-String
+   * @return {@link org.locationtech.jts.geom.Geometry}. An empty point geometry
+   * is created if {@link org.locationtech.jts.io.ParseException} due invalid WKT-String
    */
   public static Geometry createSPGeom(String wktString, Integer epsg) {
 
@@ -114,15 +113,14 @@ public class SpGeometryBuilder {
   /**
    * Creates a {@link org.locationtech.jts.geom.PrecisionModel} with a specific precision.
    * WGS84/WGS84 will be created a {@link org.locationtech.jts.geom.PrecisionModel#FIXED} with
-   * 7 decimal positions (scale 1000000).
-   * Any other epsg code will create a precision with {@link org.locationtech.jts.geom.PrecisionModel#FLOATING}.
+   * 7 decimal positions (scale 1000000). Any other epsg code will create a precision
+   * with {@link org.locationtech.jts.geom.PrecisionModel#FLOATING}.
    *
    * @param epsg EPSG Code representing SRID
    * @return {@link org.locationtech.jts.geom.PrecisionModel}
    */
   private static PrecisionModel getPrecisionModel(Integer epsg) {
     PrecisionModel precisionModel;
-
     if (epsg == 4326) {
       // use scale precision with 7 decimal positions like default OSM
       precisionModel = new PrecisionModel(1000000);
@@ -130,7 +128,6 @@ public class SpGeometryBuilder {
       // use default constructor
       precisionModel = new PrecisionModel();
     }
-
     return precisionModel;
   }
 }
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpTrajectoryBuilder.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpTrajectoryBuilder.java
index a05b5da62..e9a375e0d 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpTrajectoryBuilder.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/helper/SpTrajectoryBuilder.java
@@ -18,6 +18,7 @@
 
 package org.apache.streampipes.processors.geo.jvm.jts.helper;
 
+import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.CoordinateList;
 import org.locationtech.jts.geom.CoordinateXYM;
 import org.locationtech.jts.geom.GeometryFactory;
@@ -25,7 +26,6 @@ import org.locationtech.jts.geom.LineString;
 import org.locationtech.jts.geom.Point;
 
 public class SpTrajectoryBuilder {
-
   private int numberSubPoints;
   private String description;
   private CoordinateList coordinateList;
@@ -52,15 +52,16 @@ public class SpTrajectoryBuilder {
     return description;
   }
 
+
   /**
-   * Adds a Point to the trajectory object and also handle removes old point if {link #numberSubPoints}
-   * threshold is exceeded.
+   * Adds a Point to the trajectory object and also handle removes old point
+   * if {link #numberSubPoints} threshold is exceeded.
    *
    * @param point {@link org.locationtech.jts.geom.Point}
-   * @param m     stores an extra integer to the sub-point of a trajectory
-   * {@link org.locationtech.jts.geom.CoordinateXYM#M}
+   * @param m     stores an extra double value to the subpoint of a
+   *              trajectory {@link org.locationtech.jts.geom.CoordinateXYM#M}
    */
-  public void addPointToTrajectory(Point point, Integer m) {
+  public void addPointToTrajectory(Point point, Double m) {
     coordinateList.add(createSingleTrajectoryCoordinate(point, m));
     if (coordinateList.size() > numberSubPoints) {
       removeOldestPoint();
@@ -69,11 +70,10 @@ public class SpTrajectoryBuilder {
 
 
   /**
-   * returns a JTS LineString geometry from the trajectory object. LineString only stores the point geometry
-   * without M value.
-   * The lineString is oriented to the trajectory direction.
-   * This means: the newest point is always the last point and has the
-   * highest subpoint index. The First point is the oldest point with the lowest index [0]
+   * returns a JTS LineString geometry from the trajectory object. LineString only stores the point
+   * geometry without M value. The lineString is oriented to the trajectory direction. This means: the
+   * newest point is always the last point and has the highest subpoint index. The First point is the
+   * oldest point with the lowest index [0]
    *
    * @param factory a Geometry factory for creating the lineString with the same precision and CRS and should be
    *                the factory of the input point geometry
@@ -88,10 +88,10 @@ public class SpTrajectoryBuilder {
     } else {
       geom = factory.createLineString();
     }
-
     return geom;
   }
 
+
   /**
    * removes the oldest point (Index 0) from the CoordinateList object.
    */
@@ -100,19 +100,18 @@ public class SpTrajectoryBuilder {
   }
 
   /**
-   * Creates an Coordinate object with X, Y and M Value to be stored later directly in the trajectory object.
-   * Should be used always used if adding a subpoint to the trajectory list
+   * Creates a Coordinate object with X, Y and M Value to be stored later directly in the trajectory
+   * object. Should be used always used if adding a subpoint to the trajectory list
    *
    * @param geom Point geometry, which coordinates will be added to the trajectory list
-   * @param m    Integer M value, which will be used to store as extra parameter  in the trajectory list
+   * @param m    Double M value, which will be used to store as extra parameter  in the trajectory list
+   *             for additional calculations
    * @return CoordinateXYM coordinate object
    */
-  private CoordinateXYM createSingleTrajectoryCoordinate(Point geom, Integer m) {
+  private Coordinate createSingleTrajectoryCoordinate(Point geom, Double m) {
     CoordinateXYM coordinate = new CoordinateXYM((geom.getX()), geom.getY(), m);
     return coordinate;
   }
-
-
 }
 
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/epsg/EpsgProcessor.java
old mode 100755
new mode 100644
similarity index 56%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgController.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/epsg/EpsgProcessor.java
index fdf1a50f2..5720e21cd
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgController.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/epsg/EpsgProcessor.java
@@ -16,58 +16,63 @@
  *
  */
 
-package org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg;
+package org.apache.streampipes.processors.geo.jvm.jts.processor.epsg;
 
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.DataProcessorType;
 import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
+import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
 import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.helpers.OutputStrategies;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
 
-public class SetEpsgController extends StandaloneEventProcessingDeclarer<SetEpsgParameter> {
+public class EpsgProcessor extends StreamPipesDataProcessor {
+  private static final String EPSG_KEY = "epsg-key";
+  private static final String EPSG_RUNTIME = "epsg";
 
-  public static final String EPA_NAME = "EPSG Enricher";
-
-  public static final String EPSG_KEY = "epsg-key";
-  public static final String EPSG_RUNTIME = "epsg";
+  private int epsgCode;
 
   @Override
   public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder
-        .create("org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg")
+    return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.jts.processor.epsg")
         .category(DataProcessorType.GEO)
         .withAssets(Assets.DOCUMENTATION, Assets.ICON)
         .withLocales(Locales.EN)
         .requiredStream(StreamRequirementsBuilder
             .create()
             .build())
-        .requiredIntegerParameter(Labels.withId(EPSG_KEY), 4326)
-
-        .outputStrategy(
-            OutputStrategies.append(PrimitivePropertyBuilder
-                .create(Datatypes.Integer, EPSG_RUNTIME)
-                .domainProperty("http://data.ign.fr/def/ignf#CartesianCS")
-                .build())
+        .outputStrategy(OutputStrategies.append(PrimitivePropertyBuilder
+            .create(Datatypes.Integer, EPSG_RUNTIME)
+            .domainProperty("http://data.ign.fr/def/ignf#CartesianCS")
+            .build())
         )
+        .requiredIntegerParameter(Labels.withId(EPSG_KEY), 4326)
         .build();
   }
 
   @Override
-  public ConfiguredEventProcessor<SetEpsgParameter> onInvocation(DataProcessorInvocation graph,
-                                                                 ProcessingElementParameterExtractor extractor) {
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.epsgCode = parameters.extractor().singleValueParameter(EPSG_KEY, Integer.class);
+  }
 
-    Integer epsgValue = extractor.singleValueParameter(EPSG_KEY, Integer.class);
-    SetEpsgParameter params = new SetEpsgParameter(graph, epsgValue);
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    event.addField(EpsgProcessor.EPSG_RUNTIME, this.epsgCode);
+    collector.collect(event);
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
 
-    return new ConfiguredEventProcessor<>(params, SetEPSG::new);
   }
 }
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeo.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeo.java
deleted file mode 100755
index a3cbb34a2..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeo.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo;
-
-import org.apache.streampipes.logging.api.Logger;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import org.locationtech.jts.geom.Point;
-
-
-public class LatLngToGeo implements EventProcessor<LatLngToGeoParameter> {
-
-  private static Logger log;
-  private String latitude;
-  private String longitude;
-  private String epsgCode;
-
-
-  @Override
-  public void onInvocation(LatLngToGeoParameter params, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) {
-
-    log = params.getGraph().getLogger(LatLngToGeoParameter.class);
-    this.latitude = params.getLat();
-    this.longitude = params.getLng();
-    this.epsgCode = params.getEpsg();
-
-  }
-
-  @Override
-  public void onEvent(Event in, SpOutputCollector out) {
-
-    Double lat = in.getFieldBySelector(latitude).getAsPrimitive().getAsDouble();
-    Double lng = in.getFieldBySelector(longitude).getAsPrimitive().getAsDouble();
-    Integer epsg = in.getFieldBySelector(epsgCode).getAsPrimitive().getAsInt();
-
-    Point geom = SpGeometryBuilder.createSPGeom(lng, lat, epsg);
-
-    if (!geom.isEmpty()) {
-      in.addField(LatLngToGeoController.WKT_RUNTIME, geom.toString());
-      out.collect(in);
-    } else {
-      log.warn("An empty point geometry in " + LatLngToGeoController.EPA_NAME + " is created due"
-          + "invalid input field. Latitude: " + lat + "Longitude: " + lng);
-      log.error("Event is filtered out due invalid geometry");
-
-    }
-  }
-
-  @Override
-  public void onDetach() {
-
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoParameter.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoParameter.java
deleted file mode 100755
index fb3917997..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoParameter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class LatLngToGeoParameter extends EventProcessorBindingParams {
-
-  private String epsg;
-  private String lat;
-  private String lng;
-
-  public LatLngToGeoParameter(DataProcessorInvocation graph, String epsg, String lat, String lng) {
-    super(graph);
-    this.epsg = epsg;
-    this.lat = lat;
-    this.lng = lng;
-  }
-
-
-  public String getEpsg() {
-    return epsg;
-  }
-
-  public String getLat() {
-    return lat;
-  }
-
-  public String getLng() {
-    return lng;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtojtspoint/LatLngToJtsPointProcessor.java
old mode 100755
new mode 100644
similarity index 53%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoController.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtojtspoint/LatLngToJtsPointProcessor.java
index 66709f812..aae802664
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtogeo/LatLngToGeoController.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/latlngtojtspoint/LatLngToJtsPointProcessor.java
@@ -16,16 +16,17 @@
  *
  */
 
-package org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo;
+package org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint;
 
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.DataProcessorType;
 import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
+import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
 import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
 import org.apache.streampipes.sdk.helpers.EpRequirements;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
@@ -33,23 +34,29 @@ import org.apache.streampipes.sdk.helpers.OutputStrategies;
 import org.apache.streampipes.sdk.utils.Assets;
 import org.apache.streampipes.sdk.utils.Datatypes;
 import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
 
-public class LatLngToGeoController extends StandaloneEventProcessingDeclarer<LatLngToGeoParameter> {
-
-
-  public static final String LAT_KEY = "latitude-key";
-  public static final String LNG_KEY = "longitude-key";
-  public static final String EPSG_KEY = "epsg-key";
-
-  public static final String WKT_RUNTIME = "geomWKT";
-  public static final String EPA_NAME = "Create Point from Latitude and Longitude";
+import org.locationtech.jts.geom.Point;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+public class LatLngToJtsPointProcessor extends StreamPipesDataProcessor {
+  private static final String LAT_KEY = "latitude-key";
+  private static final String LNG_KEY = "longitude-key";
+  private static final String EPSG_KEY = "epsg-key";
+  private static final String WKT_RUNTIME = "geomWKT";
+  private String latitudeMapper;
+  private String longitudeMapper;
+  private String epsgMapper;
+  private static final Logger LOG = LoggerFactory.getLogger(LatLngToJtsPointProcessor.class);
+  public static final String EPA_NAME = "Latitude Longitude To JTS Point";
   @Override
   public DataProcessorDescription declareModel() {
     return ProcessingElementBuilder
-        .create("org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo")
+        .create("org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint")
         .category(DataProcessorType.GEO)
         .withAssets(Assets.DOCUMENTATION, Assets.ICON)
         .withLocales(Locales.EN)
@@ -71,21 +78,41 @@ public class LatLngToGeoController extends StandaloneEventProcessingDeclarer<Lat
                 PrimitivePropertyBuilder
                     .create(Datatypes.String, WKT_RUNTIME)
                     .domainProperty("http://www.opengis.net/ont/geosparql#Geometry")
-                    .build())
+                    .build()
+            )
         )
         .build();
   }
 
   @Override
-  public ConfiguredEventProcessor<LatLngToGeoParameter> onInvocation(DataProcessorInvocation graph,
-                                                                     ProcessingElementParameterExtractor extractor) {
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.latitudeMapper = parameters.extractor().mappingPropertyValue(LAT_KEY);
+    this.longitudeMapper = parameters.extractor().mappingPropertyValue(LNG_KEY);
+    this.epsgMapper = parameters.extractor().mappingPropertyValue(EPSG_KEY);
+  }
 
-    String lat = extractor.mappingPropertyValue(LAT_KEY);
-    String lng = extractor.mappingPropertyValue(LNG_KEY);
-    String epsg = extractor.mappingPropertyValue(EPSG_KEY);
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    Double lat = event.getFieldBySelector(latitudeMapper).getAsPrimitive().getAsDouble();
+    Double lng = event.getFieldBySelector(longitudeMapper).getAsPrimitive().getAsDouble();
+    Integer epsg = event.getFieldBySelector(epsgMapper).getAsPrimitive().getAsInt();
 
-    LatLngToGeoParameter params = new LatLngToGeoParameter(graph, epsg, lat, lng);
+    Point geom = SpGeometryBuilder.createSPGeom(lng, lat, epsg);
+
+    if (!geom.isEmpty()) {
+      event.addField(WKT_RUNTIME, geom.toString());
+      LOG.debug("Created Geometry: " + geom.toString());
+      collector.collect(event);
+    } else {
+      LOG.warn("An empty point geometry in " + EPA_NAME + " is created due"
+          + "invalid input field. Latitude: " + lat + "Longitude: " + lng);
+      LOG.error("An event is filtered out because of invalid geometry");
+    }
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
 
-    return new ConfiguredEventProcessor<>(params, LatLngToGeo::new);
   }
 }
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEPSG.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEPSG.java
deleted file mode 100755
index 46b237921..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEPSG.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg;
-
-import org.apache.streampipes.logging.api.Logger;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-
-public class SetEPSG implements EventProcessor<SetEpsgParameter> {
-
-  public static Logger log;
-  public SetEpsgParameter params;
-  public Integer epsg;
-
-
-  @Override
-  public void onInvocation(SetEpsgParameter params, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) {
-
-    log = params.getGraph().getLogger(SetEPSG.class);
-    this.epsg = params.getEpsg();
-  }
-
-  @Override
-  public void onEvent(Event in, SpOutputCollector out) {
-    in.addField(SetEpsgController.EPSG_RUNTIME, epsg);
-
-    out.collect(in);
-  }
-
-  @Override
-  public void onDetach() {
-
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgParameter.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgParameter.java
deleted file mode 100755
index ee6cfef40..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/setepsg/SetEpsgParameter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class SetEpsgParameter extends EventProcessorBindingParams {
-
-
-  private Integer epsg;
-
-  public SetEpsgParameter(DataProcessorInvocation graph, Integer epsg) {
-    super(graph);
-    this.epsg = epsg;
-  }
-
-  public Integer getEpsg() {
-    return epsg;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPoints.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPoints.java
deleted file mode 100755
index 0e11ce20e..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPoints.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory;
-
-import org.apache.streampipes.logging.api.Logger;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder;
-import org.apache.streampipes.processors.geo.jvm.jts.helper.SpTrajectoryBuilder;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import org.locationtech.jts.geom.LineString;
-import org.locationtech.jts.geom.Point;
-
-
-public class CreateTrajectoryFromPoints implements EventProcessor<CreateTrajectoryFromPointsParameter> {
-
-  private static Logger log;
-
-  private SpTrajectoryBuilder trajectory;
-
-  private String geomWkt;
-  private String epsgCode;
-  private String mValue;
-
-  @Override
-  public void onInvocation(CreateTrajectoryFromPointsParameter params, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) {
-
-    log = params.getGraph().getLogger(CreateTrajectoryFromPointsParameter.class);
-    this.geomWkt = params.getWkt();
-    this.epsgCode = params.getEpsg();
-    this.mValue = params.getM();
-
-    trajectory = new SpTrajectoryBuilder(params.getSubpoints(), params.getDescription());
-  }
-
-  @Override
-  public void onEvent(Event in, SpOutputCollector out) {
-
-    // extract values
-    String wkt = in.getFieldBySelector(geomWkt).getAsPrimitive().getAsString();
-    Integer epsg = in.getFieldBySelector(epsgCode).getAsPrimitive().getAsInt();
-    Integer m = in.getFieldBySelector(mValue).getAsPrimitive().getAsInt();
-
-    //create JTS geometry
-    Point eventGeom = (Point) SpGeometryBuilder.createSPGeom(wkt, epsg);
-
-    //adds point and m value to trajectory object
-    trajectory.addPointToTrajectory(eventGeom, m);
-    // returns JTS LineString
-    LineString geom = trajectory.returnAsLineString(eventGeom.getFactory());
-
-    // adds to stream
-    in.addField(CreateTrajectoryFromPointsController.DESCRIPTION_RUNTIME, trajectory.getDescription());
-    in.addField(CreateTrajectoryFromPointsController.WKT_RUNTIME, geom.toString());
-    out.collect(in);
-  }
-
-  @Override
-  public void onDetach() {
-
-  }
-}
-
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsController.java
deleted file mode 100755
index 14f3b5eaf..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsController.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpProperties;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.vocabulary.SO;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-public class CreateTrajectoryFromPointsController
-    extends StandaloneEventProcessingDeclarer<CreateTrajectoryFromPointsParameter> {
-
-
-  public static final String POINT_KEY = "point-key";
-  public static final String EPSG_KEY = "epsg-key";
-  public static final String M_KEY = "m-key";
-  public static final String DESCRIPTION_KEY = "description-key";
-  public static final String SUBPOINTS_KEY = "subpoints-key";
-
-  public static final String WKT_KEY = "trajectory-key";
-  public static final String WKT_RUNTIME = "trajectoryWKT";
-
-  public static final String DESCRIPTION_RUNTIME = "trajectoryDescription";
-
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder
-        .create("org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-        .withLocales(Locales.EN)
-        .requiredStream(
-            StreamRequirementsBuilder
-                .create()
-                .requiredPropertyWithUnaryMapping(
-                    EpRequirements.domainPropertyReq("http://www.opengis.net/ont/geosparql#Geometry"),
-                    Labels.withId(POINT_KEY), PropertyScope.MEASUREMENT_PROPERTY
-                )
-                .requiredPropertyWithUnaryMapping(
-                    EpRequirements.domainPropertyReq("http://data.ign.fr/def/ignf#CartesianCS"),
-                    Labels.withId(EPSG_KEY), PropertyScope.MEASUREMENT_PROPERTY
-                )
-                .requiredPropertyWithUnaryMapping(
-                    EpRequirements.numberReq(),
-                    Labels.withId(M_KEY), PropertyScope.MEASUREMENT_PROPERTY
-                )
-                .build()
-        )
-        .requiredTextParameter(
-            Labels.withId(DESCRIPTION_KEY)
-        )
-        .requiredIntegerParameter(
-            Labels.withId(SUBPOINTS_KEY),
-            2, 30, 1
-        )
-
-        .outputStrategy(OutputStrategies.append(
-                EpProperties.stringEp(
-                    Labels.withId(DESCRIPTION_KEY),
-                    DESCRIPTION_RUNTIME,
-                    SO.TEXT
-                ),
-                EpProperties.stringEp(
-                    Labels.withId(WKT_KEY),
-                    WKT_RUNTIME,
-                    "http://www.opengis.net/ont/geosparql#Geometry")
-            )
-        )
-        .build();
-  }
-
-
-  @Override
-  public ConfiguredEventProcessor<CreateTrajectoryFromPointsParameter> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-
-
-    String wkt = extractor.mappingPropertyValue(POINT_KEY);
-    String epsg = extractor.mappingPropertyValue(EPSG_KEY);
-    String m = extractor.mappingPropertyValue(M_KEY);
-
-    String description = extractor.singleValueParameter(DESCRIPTION_KEY, String.class);
-    Integer subpoints = extractor.singleValueParameter(SUBPOINTS_KEY, Integer.class);
-
-
-    CreateTrajectoryFromPointsParameter params =
-        new CreateTrajectoryFromPointsParameter(graph, wkt, epsg, description, subpoints, m);
-
-    return new ConfiguredEventProcessor<>(params, CreateTrajectoryFromPoints::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsParameter.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsParameter.java
deleted file mode 100755
index e048872a7..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/CreateTrajectoryFromPointsParameter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class CreateTrajectoryFromPointsParameter extends EventProcessorBindingParams {
-
-  private String epsg;
-  private String wkt;
-  private String description;
-  private Integer subpoints;
-  private String m;
-
-  public CreateTrajectoryFromPointsParameter(DataProcessorInvocation graph, String wkt, String epsg, String description,
-                                             Integer subpoints, String m) {
-    super(graph);
-    this.wkt = wkt;
-    this.epsg = epsg;
-    this.description = description;
-    this.subpoints = subpoints;
-    this.m = m;
-  }
-
-  public String getEpsg() {
-    return epsg;
-  }
-
-  public String getWkt() {
-    return wkt;
-  }
-
-  public String getDescription() {
-    return description;
-  }
-
-  public Integer getSubpoints() {
-    return subpoints;
-  }
-
-  public String getM() {
-    return m;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/TrajectoryFromPointsProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/TrajectoryFromPointsProcessor.java
new file mode 100644
index 000000000..9b1e1e710
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/jts/processor/trajectory/TrajectoryFromPointsProcessor.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpGeometryBuilder;
+import org.apache.streampipes.processors.geo.jvm.jts.helper.SpTrajectoryBuilder;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpProperties;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TrajectoryFromPointsProcessor extends StreamPipesDataProcessor {
+  private static final String POINT_KEY = "point-key";
+  private static final String EPSG_KEY = "epsg-key";
+  private static final String M_KEY = "m-key";
+  private static final String SUBPOINTS_KEY = "subpoints-key";
+  private static final String DESCRIPTION_KEY = "description-key";
+  private static final String TRAJECTORY_KEY = "trajectory-key";
+  private static final String TRAJECTORY_RUNTIME = "trajectoryWKT";
+  private static final String DESCRIPTION_RUNTIME = "trajectoryDescription";
+  private String pointMapper;
+  private String epsgMapper;
+  private String mValueMapper;
+  private String description;
+  private Integer subpoints;
+  private SpTrajectoryBuilder trajectory;
+  private static final Logger LOG = LoggerFactory.getLogger(TrajectoryFromPointsProcessor.class);
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder
+        .create("org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(
+            StreamRequirementsBuilder
+                .create()
+                .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq
+                        ("http://www.opengis.net/ont/geosparql#Geometry"),
+                    Labels.withId(POINT_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+                .requiredPropertyWithUnaryMapping(
+                    EpRequirements.domainPropertyReq
+                        ("http://data.ign.fr/def/ignf#CartesianCS"),
+                    Labels.withId(EPSG_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+                .requiredPropertyWithUnaryMapping(
+                    EpRequirements.numberReq(),
+                    Labels.withId(M_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+                .build()
+        )
+        .requiredTextParameter(
+            Labels.withId(DESCRIPTION_KEY))
+        .requiredIntegerParameter(
+            Labels.withId(SUBPOINTS_KEY),
+            2, 30, 1)
+
+        .outputStrategy(OutputStrategies.append(
+                EpProperties.stringEp(
+                    Labels.withId(DESCRIPTION_KEY),
+                    DESCRIPTION_RUNTIME,
+                    SO.TEXT),
+                EpProperties.stringEp(
+                    Labels.withId(TRAJECTORY_KEY),
+                    TRAJECTORY_RUNTIME,
+                    "http://www.opengis.net/ont/geosparql#Geometry")
+            )
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.pointMapper = parameters.extractor().mappingPropertyValue(POINT_KEY);
+    this.mValueMapper = parameters.extractor().mappingPropertyValue(M_KEY);
+    this.epsgMapper = parameters.extractor().mappingPropertyValue(EPSG_KEY);
+    this.description = parameters.extractor().singleValueParameter(DESCRIPTION_KEY, String.class);
+    this.subpoints = parameters.extractor().singleValueParameter(SUBPOINTS_KEY, Integer.class);
+
+    trajectory = new SpTrajectoryBuilder(subpoints, description);
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    // extract values
+    String point = event.getFieldBySelector(pointMapper).getAsPrimitive().getAsString();
+    Integer epsg = event.getFieldBySelector(epsgMapper).getAsPrimitive().getAsInt();
+    Double m = event.getFieldBySelector(mValueMapper).getAsPrimitive().getAsDouble();
+    //create JTS geometry
+    Point eventGeom = (Point) SpGeometryBuilder.createSPGeom(point, epsg);
+    LOG.debug("Geometry Point created");
+    //adds point and m value to trajectory object
+    trajectory.addPointToTrajectory(eventGeom, m);
+    LOG.debug("Point added to trajectory");
+    // returns JTS LineString
+    LineString geom = trajectory.returnAsLineString(eventGeom.getFactory());
+    // adds to stream
+    event.addField(DESCRIPTION_RUNTIME, trajectory.getDescription());
+    event.addField(TRAJECTORY_RUNTIME, geom.toString());
+    collector.collect(event);
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/DistanceUtil.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/helper/HaversineDistanceUtil.java
similarity index 88%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/DistanceUtil.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/helper/HaversineDistanceUtil.java
index 7b24e80fa..956de9e85 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/util/DistanceUtil.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/helper/HaversineDistanceUtil.java
@@ -16,17 +16,17 @@
  *
  */
 
-package org.apache.streampipes.processors.geo.jvm.processor.util;
+package org.apache.streampipes.processors.geo.jvm.latlong.helper;
 
-public class DistanceUtil {
+public class HaversineDistanceUtil {
 
   public static float dist(float lat1, float lng1, float lat2, float lng2) {
     double earthRadius = 6371000; //meters
     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);
+        + 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));
     float dist = (float) (earthRadius * c);
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversine/HaversineDistanceCalculatorProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversine/HaversineDistanceCalculatorProcessor.java
new file mode 100644
index 000000000..e806f7938
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversine/HaversineDistanceCalculatorProcessor.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.latlong.helper.HaversineDistanceUtil;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpProperties;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+public class HaversineDistanceCalculatorProcessor extends StreamPipesDataProcessor {
+  private static final String LAT_1_KEY = "lat1";
+  private static final String LONG_1_KEY = "long1";
+  private static final String LAT_2_KEY = "lat2";
+  private static final String LONG_2_KEY = "long2";
+  private static final String CALCULATED_DISTANCE_KEY = "calculatedDistance";
+  String lat1FieldMapper;
+  String long1FieldMapper;
+  String lat2FieldMapper;
+  String long2FieldMapper;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder.create(
+            "org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT),
+                Labels.withId(LAT_1_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG),
+                Labels.withId(LONG_1_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT),
+                Labels.withId(LAT_2_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG),
+                Labels.withId(LONG_2_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .build()
+        )
+        .outputStrategy(OutputStrategies
+            .append(EpProperties.numberEp(
+                Labels.withId(CALCULATED_DISTANCE_KEY),
+                "distance",
+                SO.NUMBER))
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+
+    this.lat1FieldMapper = parameters.extractor().mappingPropertyValue(LAT_1_KEY);
+    this.long1FieldMapper = parameters.extractor().mappingPropertyValue(LONG_1_KEY);
+    this.lat2FieldMapper = parameters.extractor().mappingPropertyValue(LAT_2_KEY);
+    this.long2FieldMapper = parameters.extractor().mappingPropertyValue(LONG_2_KEY);
+
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+
+    float lat1 = event.getFieldBySelector(lat1FieldMapper).getAsPrimitive().getAsFloat();
+    float long1 = event.getFieldBySelector(long1FieldMapper).getAsPrimitive().getAsFloat();
+    float lat2 = event.getFieldBySelector(lat2FieldMapper).getAsPrimitive().getAsFloat();
+    float long2 = event.getFieldBySelector(long2FieldMapper).getAsPrimitive().getAsFloat();
+
+    double resultDist = HaversineDistanceUtil.dist(lat1, long1, lat2, long2);
+
+    event.addField("distance", resultDist);
+
+    collector.collect(event);
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversinestatic/HaversineStaticDistanceCalculatorProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversinestatic/HaversineStaticDistanceCalculatorProcessor.java
new file mode 100644
index 000000000..c99d5c04c
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/distancecalculator/haversinestatic/HaversineStaticDistanceCalculatorProcessor.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.latlong.helper.HaversineDistanceUtil;
+import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.sdk.utils.Datatypes;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import java.net.URI;
+
+public class HaversineStaticDistanceCalculatorProcessor extends StreamPipesDataProcessor {
+
+  private static final String LATITUDE_KEY = "latitude-key";
+  private static final String LONGITUDE_KEY = "longitude-key";
+  private static final String SELECTED_LATITUDE_KEY = "selected-latitude-key";
+  private static final String SELECTED_LONGITUDE_KEY = "selected-longitude-key";
+  private static final String DISTANCE_RUNTIME_NAME = "distance";
+
+  String latitudeFieldMapper;
+  String longitudeFieldMapper;
+  Float selectedLatitude;
+  Float selectedLongitude;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder.create(
+            "org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(
+                EpRequirements.domainPropertyReq(Geo.LAT),
+                Labels.withId(LATITUDE_KEY),
+                PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(
+                EpRequirements.domainPropertyReq(Geo.LNG),
+                Labels.withId(LONGITUDE_KEY),
+                PropertyScope.MEASUREMENT_PROPERTY)
+            .build()
+        )
+        .requiredFloatParameter(Labels.withId(SELECTED_LATITUDE_KEY))
+        .requiredFloatParameter(Labels.withId(SELECTED_LONGITUDE_KEY))
+        .outputStrategy(OutputStrategies.append(PrimitivePropertyBuilder
+            .create(Datatypes.Float, DISTANCE_RUNTIME_NAME)
+            .domainProperty(SO.NUMBER)
+            .measurementUnit(URI.create("http://qudt.org/vocab/unit#Kilometer"))
+            .build())
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.latitudeFieldMapper = parameters.extractor().mappingPropertyValue(LATITUDE_KEY);
+    this.longitudeFieldMapper = parameters.extractor().mappingPropertyValue(LONGITUDE_KEY);
+    this.selectedLatitude = parameters.extractor().singleValueParameter(SELECTED_LATITUDE_KEY, Float.class);
+    this.selectedLongitude = parameters.extractor().singleValueParameter(SELECTED_LONGITUDE_KEY, Float.class);
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    Float latitude = event.getFieldBySelector(latitudeFieldMapper).getAsPrimitive().getAsFloat();
+    Float longitude = event.getFieldBySelector(longitudeFieldMapper).getAsPrimitive().getAsFloat();
+
+    Float distance = HaversineDistanceUtil.dist(latitude, longitude, selectedLatitude, selectedLongitude);
+
+    event.addField(DISTANCE_RUNTIME_NAME, distance);
+
+    collector.collect(event);
+
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemaps/GoogleMapsGeocoderProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemaps/GoogleMapsGeocoderProcessor.java
new file mode 100644
index 000000000..9fb3b1a89
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemaps/GoogleMapsGeocoderProcessor.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.config.ConfigKeys;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpProperties;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import com.google.maps.GeoApiContext;
+import com.google.maps.GeocodingApi;
+import com.google.maps.errors.ApiException;
+import com.google.maps.model.GeocodingResult;
+
+import java.io.IOException;
+
+public class GoogleMapsGeocoderProcessor extends StreamPipesDataProcessor {
+  private static final String GEOCODER_REQUEST_KEY = "geocoder-request-key";
+  private static final String LAT_RUNTIME_NAME = "geocoder-latitude";
+  private static final String LONG_RUNTIME_NAME = "geocoder-longitude";
+  private String geocoderRequest;
+  private GeoApiContext apiContext;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder
+        .create("org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(EpRequirements.stringReq(),
+                Labels.withId(GEOCODER_REQUEST_KEY),
+                PropertyScope.NONE)
+            .build()
+        )
+        .outputStrategy(OutputStrategies.append(
+            EpProperties.doubleEp(Labels.empty(), LAT_RUNTIME_NAME, Geo.LAT),
+            EpProperties.stringEp(Labels.empty(), LONG_RUNTIME_NAME, Geo.LNG))
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+
+    this.geocoderRequest = parameters.extractor().mappingPropertyValue(GEOCODER_REQUEST_KEY);
+
+    String googleMapsApiKey = runtimeContext.getConfigStore().getConfig().getString(ConfigKeys.GOOGLE_API_KEY);
+
+    if (googleMapsApiKey == null || googleMapsApiKey.equals("")) {
+      throw new SpRuntimeException("Could not start Geocoder. Did you forget to add a Google Maps API key?");
+    } else {
+      this.apiContext = new GeoApiContext.Builder()
+          .apiKey(googleMapsApiKey)
+          .build();
+    }
+    // TODO: RequestDeniedException
+    //  You must enable Billing on the Google Cloud Project at
+    //  https://console.cloud.google.com/project/_/billing/enable
+    //  Learn more at https://developers.google.com/maps/gmp
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    String request = event.getFieldBySelector(geocoderRequest).getAsPrimitive().getAsString();
+
+    try {
+      GeocodingResult[] results = GeocodingApi.geocode(apiContext, request).await();
+
+      Double latitude = results[0].geometry.location.lat;
+      Double longitude = results[0].geometry.location.lng;
+
+      event.addField(LAT_RUNTIME_NAME, latitude);
+      event.addField(LONG_RUNTIME_NAME, longitude);
+
+      collector.collect(event);
+
+    } catch (ApiException | InterruptedException | IOException e) {
+      e.printStackTrace();
+      throw new SpRuntimeException("Could not fetch geocoding result");
+    }
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemapsstatic/GoogleMapsStaticGeocoderProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemapsstatic/GoogleMapsStaticGeocoderProcessor.java
new file mode 100644
index 000000000..29f6c5302
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/geocoder/googlemapsstatic/GoogleMapsStaticGeocoderProcessor.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.processors.geo.jvm.config.ConfigKeys;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpProperties;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import com.google.maps.GeoApiContext;
+import com.google.maps.GeocodingApi;
+import com.google.maps.errors.ApiException;
+import com.google.maps.model.GeocodingResult;
+
+import java.io.IOException;
+
+public class GoogleMapsStaticGeocoderProcessor extends StreamPipesDataProcessor {
+  private static final String STATIC_GEOCODER_REQUEST_KEY = "sg-request-key";
+  private static final String LAT_RUNTIME_NAME = "staticgeocoder-latitude";
+  private static final String LONG_RUNTIME_NAME = "staticgeocoder-longitude";
+  private String staticGeocoderRequest;
+  private GeoApiContext apiContext;
+  private Double responseLatitude;
+  private Double responseLongitude;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder
+        .create("org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(
+            StreamRequirementsBuilder
+                .create()
+                .requiredProperty(EpRequirements.anyProperty())
+                .build()
+        )
+        .requiredTextParameter(Labels.withId(STATIC_GEOCODER_REQUEST_KEY))
+        .outputStrategy(OutputStrategies.append(
+            EpProperties.doubleEp(Labels.empty(), LAT_RUNTIME_NAME, Geo.LAT),
+            EpProperties.stringEp(Labels.empty(), LONG_RUNTIME_NAME, Geo.LNG))
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+
+    this.staticGeocoderRequest =
+        parameters.extractor().singleValueParameter(STATIC_GEOCODER_REQUEST_KEY, String.class);
+    String googleMapsApiKey = runtimeContext.getConfigStore().getConfig().getString(ConfigKeys.GOOGLE_API_KEY);
+
+    if (googleMapsApiKey == null || googleMapsApiKey.equals("")) {
+      throw new SpRuntimeException("Could not start Geocoder. Did you forget to add a Google Maps" + " API key?");
+    }
+
+    this.apiContext = new GeoApiContext.Builder().apiKey(googleMapsApiKey).build();
+
+    try {
+      GeocodingResult[] results = GeocodingApi.geocode(apiContext, staticGeocoderRequest).await();
+      this.responseLatitude = results[0].geometry.location.lat;
+      this.responseLongitude = results[0].geometry.location.lng;
+    } catch (ApiException | IOException | InterruptedException e) {
+      e.printStackTrace();
+      throw new SpRuntimeException("Could not fetch geocoding result");
+    }
+
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    event.addField(LAT_RUNTIME_NAME, responseLatitude);
+    event.addField(LONG_RUNTIME_NAME, responseLongitude);
+
+    collector.collect(event);
+
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/GeoCityNameRevdecodeProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/GeoCityNameRevdecodeProcessor.java
new file mode 100644
index 000000000..8f287810e
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/GeoCityNameRevdecodeProcessor.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.GeoName;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.ReverseGeoCode;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpProperties;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import org.apache.http.client.fluent.Request;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipInputStream;
+
+public class GeoCityNameRevdecodeProcessor extends StreamPipesDataProcessor {
+  private static final String LATITUDE_MAPPING_KEY = "latitude-mapping-key";
+  private static final String LONGITUDE_MAPPING_KEY = "longitude-mapping-key";
+  private static final String GEONAME_RUNTIME_NAME = "geoname";
+  String latitudeFieldMapper;
+  String longitudeFieldMapper;
+  private static final String CITIES_DATASET_URL = "http://download.geonames"
+      + ".org/export/dump/cities1000.zip";
+  private ReverseGeoCode reverseGeoCode;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder
+        .create("org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT),
+                Labels.withId(LATITUDE_MAPPING_KEY),
+                PropertyScope.NONE)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG),
+                Labels.withId(LONGITUDE_MAPPING_KEY),
+                PropertyScope.NONE)
+            .build())
+        .outputStrategy(OutputStrategies.append(
+            EpProperties.stringEp(Labels.empty(), GEONAME_RUNTIME_NAME, "http://schema.org/city")
+        ))
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.latitudeFieldMapper = parameters.extractor().mappingPropertyValue(LATITUDE_MAPPING_KEY);
+    this.longitudeFieldMapper = parameters.extractor().mappingPropertyValue(LONGITUDE_MAPPING_KEY);
+
+    try {
+      InputStream stream = downloadCitiesDataSet();
+      if (stream != null) {
+        ZipInputStream zipInputStream = null;
+        zipInputStream = new ZipInputStream(stream);
+        this.reverseGeoCode = new ReverseGeoCode(zipInputStream, false);
+      }
+    } catch (IOException e) {
+      throw new SpRuntimeException("Could not download cities file...");
+    }
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+
+    Double latitude = event.getFieldBySelector(latitudeFieldMapper).getAsPrimitive().getAsDouble();
+    Double longitude = event.getFieldBySelector(longitudeFieldMapper).getAsPrimitive().getAsDouble();
+
+    GeoName geoName = this.reverseGeoCode.nearestPlace(latitude, longitude);
+
+    event.addField(GEONAME_RUNTIME_NAME, geoName.name + " | " + geoName.country);
+    collector.collect(event);
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+
+  private InputStream downloadCitiesDataSet() throws IOException {
+    byte[] citiesDataset = Request.Get(CITIES_DATASET_URL).execute().returnContent().asBytes();
+    return new ByteArrayInputStream(citiesDataset);
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/GeoName.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/GeoName.java
similarity index 92%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/GeoName.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/GeoName.java
index c7c6243a1..d90c70371 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/GeoName.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/GeoName.java
@@ -20,9 +20,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 */
 
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode;
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode;
 
-import org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.kdtree.KDNodeComparator;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.kdtree.KDNodeComparator;
 
 import java.util.Comparator;
 
@@ -90,7 +90,7 @@ public class GeoName extends KDNodeComparator<GeoName> {
     return GeoNameComparator.values()[axis];
   }
 
-  protected static enum GeoNameComparator implements Comparator<GeoName> {
+  protected enum GeoNameComparator implements Comparator<GeoName> {
     x {
       @Override
       public int compare(GeoName a, GeoName b) {
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/ReverseGeoCode.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/ReverseGeoCode.java
similarity index 94%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/ReverseGeoCode.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/ReverseGeoCode.java
index 23eae4c80..da3e7643f 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/ReverseGeoCode.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/ReverseGeoCode.java
@@ -21,10 +21,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 */
 
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode;
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode;
 
 
-import org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.kdtree.KDTree;
+import org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.kdtree.KDTree;
 
 import java.io.BufferedReader;
 import java.io.IOException;
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNode.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNode.java
similarity index 92%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNode.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNode.java
index d7952b4c1..dec96eb2a 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNode.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNode.java
@@ -19,8 +19,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 */
-
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.kdtree;
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.kdtree;
 
 /**
  * @author Daniel Glasson
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNodeComparator.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNodeComparator.java
similarity index 94%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNodeComparator.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNodeComparator.java
index 84b5c7d23..c79e04cca 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDNodeComparator.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDNodeComparator.java
@@ -20,7 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 */
 
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.kdtree;
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.kdtree;
 
 import java.util.Comparator;
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDTree.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDTree.java
similarity index 96%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDTree.java
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDTree.java
index 652afaaf1..af2344e80 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/geocode/kdtree/KDTree.java
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/revgeocoder/geocityname/geocode/kdtree/KDTree.java
@@ -20,7 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 */
 
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.kdtree;
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode.kdtree;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/speedcalculator/SpeedCalculatorProcessor.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/speedcalculator/SpeedCalculatorProcessor.java
new file mode 100644
index 000000000..9018ac78c
--- /dev/null
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/latlong/processor/speedcalculator/SpeedCalculatorProcessor.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator;
+
+import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.model.DataProcessorType;
+import org.apache.streampipes.model.graph.DataProcessorDescription;
+import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.model.schema.PropertyScope;
+import org.apache.streampipes.processors.geo.jvm.latlong.helper.HaversineDistanceUtil;
+import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
+import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
+import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
+import org.apache.streampipes.sdk.helpers.EpRequirements;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.helpers.OutputStrategies;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.apache.streampipes.sdk.utils.Datatypes;
+import org.apache.streampipes.vocabulary.Geo;
+import org.apache.streampipes.vocabulary.SO;
+import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
+import org.apache.streampipes.wrapper.routing.SpOutputCollector;
+import org.apache.streampipes.wrapper.standalone.ProcessorParams;
+import org.apache.streampipes.wrapper.standalone.StreamPipesDataProcessor;
+
+import org.apache.commons.collections.buffer.CircularFifoBuffer;
+
+import java.net.URI;
+
+public class SpeedCalculatorProcessor extends StreamPipesDataProcessor {
+  private static final String TIMESTAMP_KEY = "timestamp-key";
+  private static final String LATITUDE_KEY = "latitude-key";
+  private static final String LONGITUDE_KEY = "longitude-key";
+  private static final String COUNT_WINDOW_KEY = "count-window-key";
+  private static final String SPEED_KEY = "speed-key";
+  private String latitudeFieldMapper;
+  private String longitudeFieldMapper;
+  private String timestampFieldMapper;
+  private Integer countWindowSize;
+  private CircularFifoBuffer buffer;
+
+  @Override
+  public DataProcessorDescription declareModel() {
+    return ProcessingElementBuilder
+        .create("org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator")
+        .category(DataProcessorType.GEO)
+        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+        .withLocales(Locales.EN)
+        .requiredStream(StreamRequirementsBuilder
+            .create()
+            .requiredPropertyWithUnaryMapping(EpRequirements.timestampReq(),
+                Labels.withId(TIMESTAMP_KEY), PropertyScope.HEADER_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT)
+                , Labels.withId(LATITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG)
+                , Labels.withId(LONGITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .requiredIntegerParameter(Labels.withId(COUNT_WINDOW_KEY))
+        .outputStrategy(
+            OutputStrategies.append(PrimitivePropertyBuilder
+                .create(Datatypes.Float, SPEED_KEY)
+                .domainProperty(SO.NUMBER)
+                .measurementUnit(URI.create("http://qudt.org/vocab/unit#KilometerPerHour"))
+                .build())
+        )
+        .build();
+  }
+
+  @Override
+  public void onInvocation(ProcessorParams parameters, SpOutputCollector spOutputCollector,
+                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
+    this.latitudeFieldMapper = parameters.extractor().mappingPropertyValue(LATITUDE_KEY);
+    this.longitudeFieldMapper = parameters.extractor().mappingPropertyValue(LONGITUDE_KEY);
+    this.timestampFieldMapper = parameters.extractor().mappingPropertyValue(TIMESTAMP_KEY);
+    this.countWindowSize = parameters.extractor().singleValueParameter(COUNT_WINDOW_KEY, Integer.class);
+    this.buffer = new CircularFifoBuffer(countWindowSize);
+  }
+
+  @Override
+  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
+    if (this.buffer.isFull()) {
+      Event firstEvent = (Event) buffer.get();
+      double speed = calculateSpeed(firstEvent, event);
+      event.addField(SPEED_KEY, speed);
+      collector.collect(event);
+    }
+    this.buffer.add(event);
+  }
+
+  @Override
+  public void onDetach() throws SpRuntimeException {
+
+  }
+
+  private double calculateSpeed(Event firstEvent, Event currentEvent) {
+    Float firstLatitude = getFloat(firstEvent, this.latitudeFieldMapper);
+    Float firstLongitude = getFloat(firstEvent, this.longitudeFieldMapper);
+    Long firstTimestamp = getLong(firstEvent, this.timestampFieldMapper);
+
+    Float currentLatitude = getFloat(currentEvent, this.latitudeFieldMapper);
+    Float currentLongitude = getFloat(currentEvent, this.longitudeFieldMapper);
+    Long currentTimestamp = getLong(currentEvent, this.timestampFieldMapper);
+
+    Float distanceInKm = HaversineDistanceUtil.dist(firstLatitude, firstLongitude, currentLatitude,
+        currentLongitude);
+
+    Double durationInSeconds = Double.valueOf((currentTimestamp - firstTimestamp) / 1000.0);
+
+    double speedInKilometersPerSecond = distanceInKm / durationInSeconds;
+    double speedInKilometerPerHour = speedInKilometersPerSecond * 3600;
+
+    return speedInKilometerPerHour;
+  }
+
+  private Long getLong(Event event, String fieldName) {
+    return event.getFieldBySelector(fieldName).getAsPrimitive().getAsLong();
+  }
+
+  private Float getFloat(Event event, String fieldName) {
+    return event.getFieldBySelector(fieldName).getAsPrimitive().getAsFloat();
+  }
+}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java
deleted file mode 100644
index 59fd6579c..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculator.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.distancecalculator;
-
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.util.DistanceUtil;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-public class DistanceCalculator implements EventProcessor<DistanceCalculatorParameters> {
-
-  private DistanceCalculatorParameters params;
-
-  @Override
-  public void onInvocation(DistanceCalculatorParameters numericalFilterParameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext
-                               runtimeContext) {
-    this.params = numericalFilterParameters;
-  }
-
-  @Override
-  public void onEvent(Event event, SpOutputCollector out) {
-
-    float lat1 = event.getFieldBySelector(this.params.getLat1PropertyName()).getAsPrimitive().getAsFloat();
-    float long1 = event.getFieldBySelector(this.params.getLong1PropertyName()).getAsPrimitive().getAsFloat();
-    float lat2 = event.getFieldBySelector(this.params.getLat2PropertyName()).getAsPrimitive().getAsFloat();
-    float long2 = event.getFieldBySelector(this.params.getLong2PropertyName()).getAsPrimitive().getAsFloat();
-
-    double resultDist = DistanceUtil.dist(lat1, long1, lat2, long2);
-
-    event.addField("distance", resultDist);
-
-    out.collect(event);
-  }
-
-  @Override
-  public void onDetach() {
-
-  }
-
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java
deleted file mode 100644
index d4b71c678..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorController.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.distancecalculator;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpProperties;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.vocabulary.SO;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-public class DistanceCalculatorController extends StandaloneEventProcessingDeclarer<DistanceCalculatorParameters> {
-
-  private static final String LAT_1_KEY = "lat1";
-  private static final String LONG_1_KEY = "long1";
-  private static final String LAT_2_KEY = "lat2";
-  private static final String LONG_2_KEY = "long2";
-  private static final String CALCULATED_DISTANCE_KEY = "calculatedDistance";
-
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.processor.distancecalculator")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT)
-                , Labels.withId(LAT_1_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG)
-                , Labels.withId(LONG_1_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT)
-                , Labels.withId(LAT_2_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG)
-                , Labels.withId(LONG_2_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .build())
-        .outputStrategy(
-            OutputStrategies.append(
-                EpProperties.numberEp(Labels.withId(CALCULATED_DISTANCE_KEY), "distance", SO.NUMBER))
-        )
-        .build();
-
-  }
-
-  @Override
-  public ConfiguredEventProcessor<DistanceCalculatorParameters> onInvocation(
-      DataProcessorInvocation sepa,
-      ProcessingElementParameterExtractor extractor) {
-
-    String lat1PropertyName = extractor.mappingPropertyValue(LAT_1_KEY);
-    String long11PropertyName = extractor.mappingPropertyValue(LONG_1_KEY);
-    String lat2PropertyName = extractor.mappingPropertyValue(LAT_2_KEY);
-    String long2PropertyName = extractor.mappingPropertyValue(LONG_2_KEY);
-
-    DistanceCalculatorParameters staticParam =
-        new DistanceCalculatorParameters(sepa, lat1PropertyName, long11PropertyName, lat2PropertyName,
-            long2PropertyName);
-
-    return new ConfiguredEventProcessor<>(staticParam, DistanceCalculator::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorParameters.java
deleted file mode 100644
index 4d195689d..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/distancecalculator/DistanceCalculatorParameters.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.distancecalculator;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class DistanceCalculatorParameters extends EventProcessorBindingParams {
-
-  public String lat1PropertyName;
-  public String long1PropertyName;
-  public String lat2PropertyName;
-  public String long2PropertyName;
-
-  public DistanceCalculatorParameters(DataProcessorInvocation graph) {
-    super(graph);
-  }
-
-  public DistanceCalculatorParameters(DataProcessorInvocation graph, String lat1PropertyName, String long1PropertyName,
-                                      String lat2PropertyName, String long2PropertyName) {
-    super(graph);
-    this.lat1PropertyName = lat1PropertyName;
-    this.long1PropertyName = long1PropertyName;
-    this.lat2PropertyName = lat2PropertyName;
-    this.long2PropertyName = long2PropertyName;
-  }
-
-
-  public String getLat1PropertyName() {
-    return lat1PropertyName;
-  }
-
-  public String getLong1PropertyName() {
-    return long1PropertyName;
-  }
-
-  public String getLat2PropertyName() {
-    return lat2PropertyName;
-  }
-
-  public String getLong2PropertyName() {
-    return long2PropertyName;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocoding.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocoding.java
deleted file mode 100644
index 0b2d65776..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocoding.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.geocoder;
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.config.ConfigKeys;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import com.google.maps.GeoApiContext;
-import com.google.maps.GeocodingApi;
-import com.google.maps.errors.ApiException;
-import com.google.maps.model.GeocodingResult;
-
-import java.io.IOException;
-
-public class GoogleMapsGeocoding implements EventProcessor<GoogleMapsGeocodingParameters> {
-
-  private GeoApiContext context;
-  private String placeField;
-
-  @Override
-  public void onInvocation(GoogleMapsGeocodingParameters parameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-    this.placeField = parameters.getPlaceField();
-    String googleMapsApiKey = runtimeContext.getConfigStore().getConfig().getString(ConfigKeys.GOOGLE_API_KEY);
-
-    if (googleMapsApiKey == null || googleMapsApiKey.equals("")) {
-      throw new SpRuntimeException("Could not start Geocoder. Did you forget to add a Google Maps"
-          + " API key?");
-    }
-
-    this.context = new GeoApiContext.Builder()
-        .apiKey(googleMapsApiKey)
-        .build();
-  }
-
-  @Override
-  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
-    String placename = event.getFieldBySelector(placeField).getAsPrimitive().getAsString();
-
-    try {
-      GeocodingResult[] results = GeocodingApi.geocode(context,
-          placename).await();
-
-      Double latitude = results[0].geometry.location.lat;
-      Double longitude = results[0].geometry.location.lng;
-
-      event.addField("latitude", latitude);
-      event.addField("longitude", longitude);
-
-      collector.collect(event);
-
-    } catch (ApiException | InterruptedException | IOException e) {
-      e.printStackTrace();
-      throw new SpRuntimeException("Could not fetch geocoding result");
-    }
-
-
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingController.java
deleted file mode 100644
index 9c87dad82..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.geocoder;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpProperties;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-public class GoogleMapsGeocodingController extends StandaloneEventProcessingDeclarer<GoogleMapsGeocodingParameters> {
-
-  private static final String PLACE_MAPPING = "place-mapping";
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processor.geo.jvm.geocoding")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredPropertyWithUnaryMapping(EpRequirements.stringReq(),
-                Labels.withId(PLACE_MAPPING),
-                PropertyScope.NONE)
-            .build())
-        .outputStrategy(OutputStrategies.append(
-            EpProperties.doubleEp(Labels.empty(), "latitude", Geo.LAT),
-            EpProperties.stringEp(Labels.empty(), "longitude", Geo.LNG)
-        ))
-        .build();
-  }
-
-  @Override
-  public ConfiguredEventProcessor<GoogleMapsGeocodingParameters> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-    String placeField = extractor.mappingPropertyValue(PLACE_MAPPING);
-
-    GoogleMapsGeocodingParameters params = new GoogleMapsGeocodingParameters(graph, placeField);
-
-    return new ConfiguredEventProcessor<>(params, GoogleMapsGeocoding::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingParameters.java
deleted file mode 100644
index 8ad424999..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/geocoder/GoogleMapsGeocodingParameters.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.geocoder;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class GoogleMapsGeocodingParameters extends EventProcessorBindingParams {
-
-  private String placeField;
-
-  public GoogleMapsGeocodingParameters(DataProcessorInvocation graph,
-                                       String placeField) {
-    super(graph);
-    this.placeField = placeField;
-  }
-
-  public String getPlaceField() {
-    return placeField;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocoding.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocoding.java
deleted file mode 100644
index 16cdc1f2b..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocoding.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder;
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.GeoName;
-import org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode.ReverseGeoCode;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import org.apache.http.client.fluent.Request;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.ZipInputStream;
-
-public class ReverseGeocoding implements EventProcessor<ReverseGeocodingParameters> {
-
-  private static final String CITIES_DATASET_URL = "http://download.geonames"
-      + ".org/export/dump/cities1000.zip";
-
-  private String latitudeField;
-  private String longitudeField;
-
-  private ReverseGeoCode reverseGeoCode;
-
-  @Override
-  public void onInvocation(ReverseGeocodingParameters parameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-    this.latitudeField = parameters.getLatitudeField();
-    this.longitudeField = parameters.getLongitudeField();
-
-    try {
-      InputStream stream = downloadCitiesDataSet();
-      if (stream != null) {
-        ZipInputStream zipInputStream = null;
-        zipInputStream = new ZipInputStream(stream);
-        this.reverseGeoCode = new ReverseGeoCode(zipInputStream, false);
-      }
-    } catch (IOException e) {
-      throw new SpRuntimeException("Could not download cities file...");
-    }
-  }
-
-  @Override
-  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
-    Double latitude = event.getFieldBySelector(latitudeField).getAsPrimitive().getAsDouble();
-    Double longitude = event.getFieldBySelector(longitudeField).getAsPrimitive().getAsDouble();
-
-    GeoName geoName = this.reverseGeoCode.nearestPlace(latitude, longitude);
-
-    event.addField("place", geoName.name + ", " + geoName.country);
-    collector.collect(event);
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-
-  }
-
-  private InputStream downloadCitiesDataSet() throws IOException {
-    byte[] citiesDataset = Request.Get(CITIES_DATASET_URL).execute().returnContent().asBytes();
-    return new ByteArrayInputStream(citiesDataset);
-  }
-
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingController.java
deleted file mode 100644
index ad734e3d5..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingController.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpProperties;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-public class ReverseGeocodingController extends StandaloneEventProcessingDeclarer<ReverseGeocodingParameters> {
-
-  private static final String LATITUDE_MAPPING = "latitude-mapping";
-  private static final String LONGITUDE_MAPPING = "longitude-mapping";
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processor.geo.jvm.reversegeocoding")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT),
-                Labels.withId(LATITUDE_MAPPING),
-                PropertyScope.NONE)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG),
-                Labels.withId(LONGITUDE_MAPPING),
-                PropertyScope.NONE)
-            .build())
-        .outputStrategy(OutputStrategies.append(
-            EpProperties.stringEp(Labels.empty(), "place", "http://schema.org/city")
-        ))
-        .build();
-  }
-
-  @Override
-  public ConfiguredEventProcessor<ReverseGeocodingParameters> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-    String latitudeField = extractor.mappingPropertyValue(LATITUDE_MAPPING);
-    String longitudeField = extractor.mappingPropertyValue(LONGITUDE_MAPPING);
-
-    ReverseGeocodingParameters params = new ReverseGeocodingParameters(graph, latitudeField,
-        longitudeField);
-
-    return new ConfiguredEventProcessor<>(params, ReverseGeocoding::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingParameters.java
deleted file mode 100644
index 86bc58c55..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/revgeocoder/ReverseGeocodingParameters.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.revgeocoder;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class ReverseGeocodingParameters extends EventProcessorBindingParams {
-
-  private String latitudeField;
-  private String longitudeField;
-
-  public ReverseGeocodingParameters(DataProcessorInvocation graph, String latitudeField,
-                                    String longitudeField) {
-    super(graph);
-    this.latitudeField = latitudeField;
-    this.longitudeField = longitudeField;
-  }
-
-  public String getLatitudeField() {
-    return latitudeField;
-  }
-
-  public String getLongitudeField() {
-    return longitudeField;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculator.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculator.java
deleted file mode 100644
index 227979ce0..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.speed;
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.util.DistanceUtil;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import org.apache.commons.collections.buffer.CircularFifoBuffer;
-
-public class SpeedCalculator implements EventProcessor<SpeedCalculatorParameters> {
-
-  private CircularFifoBuffer buffer;
-
-  private String latitudeFieldName;
-  private String longitudeFieldName;
-  private String timestampFieldName;
-
-  @Override
-  public void onInvocation(SpeedCalculatorParameters parameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-    this.buffer = new CircularFifoBuffer(parameters.getCountWindowSize());
-    this.latitudeFieldName = parameters.getLatitudeFieldName();
-    this.longitudeFieldName = parameters.getLongitudeFieldName();
-    this.timestampFieldName = parameters.getTimestampFieldName();
-  }
-
-  @Override
-  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
-    if (this.buffer.isFull()) {
-      Event firstEvent = (Event) buffer.get();
-      Float speed = calculateSpeed(firstEvent, event);
-      event.addField("speed", speed);
-      collector.collect(event);
-    }
-    this.buffer.add(event);
-  }
-
-  private Float calculateSpeed(Event firstEvent, Event currentEvent) {
-    Float firstLatitude = getFloat(firstEvent, latitudeFieldName);
-    Float firstLongitude = getFloat(firstEvent, longitudeFieldName);
-    Long firstTimestamp = getLong(firstEvent, timestampFieldName);
-
-    Float currentLatitude = getFloat(currentEvent, latitudeFieldName);
-    Float currentLongitude = getFloat(currentEvent, longitudeFieldName);
-    Long currentTimestamp = getLong(currentEvent, timestampFieldName);
-
-    Float distanceInKm = DistanceUtil.dist(firstLatitude, firstLongitude, currentLatitude,
-        currentLongitude);
-
-    Long durationInSeconds = (currentTimestamp - firstTimestamp) / 1000;
-
-    Float speedInKilometersPerSecond = distanceInKm / durationInSeconds;
-    Float speedInKilometerPerHour = speedInKilometersPerSecond * 3600;
-
-    return speedInKilometerPerHour;
-  }
-
-  private Long getLong(Event event, String fieldName) {
-    return event.getFieldBySelector(fieldName).getAsPrimitive().getAsLong();
-  }
-
-  private Float getFloat(Event event, String fieldName) {
-    return event.getFieldBySelector(fieldName).getAsPrimitive().getAsFloat();
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorController.java
deleted file mode 100644
index b4124e1cb..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorController.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.speed;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.sdk.utils.Datatypes;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.vocabulary.SO;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-import java.net.URI;
-
-public class SpeedCalculatorController extends StandaloneEventProcessingDeclarer<SpeedCalculatorParameters> {
-
-  private static final String TIMESTAMP_KEY = "timestamp-key";
-  private static final String LATITUDE_KEY = "latitude-key";
-  private static final String LONGITUDE_KEY = "longitude-key";
-  private static final String COUNT_WINDOW_KEY = "count-window-key";
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.processor.speed")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION, Assets.ICON)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredPropertyWithUnaryMapping(EpRequirements.timestampReq(),
-                Labels.withId(TIMESTAMP_KEY), PropertyScope.HEADER_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT)
-                , Labels.withId(LATITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG)
-                , Labels.withId(LONGITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .build())
-        .requiredIntegerParameter(Labels.withId(COUNT_WINDOW_KEY))
-        .outputStrategy(
-            OutputStrategies.append(PrimitivePropertyBuilder
-                .create(Datatypes.Float, "speed")
-                .domainProperty(SO.NUMBER)
-                .measurementUnit(URI.create("http://qudt.org/vocab/unit#KilometerPerHour"))
-                .build())
-        )
-        .build();
-  }
-
-  @Override
-  public ConfiguredEventProcessor<SpeedCalculatorParameters> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-    String latitudeFieldName = extractor.mappingPropertyValue(LATITUDE_KEY);
-    String longitudeFieldName = extractor.mappingPropertyValue(LONGITUDE_KEY);
-    String timestampFieldName = extractor.mappingPropertyValue(TIMESTAMP_KEY);
-
-    Integer countWindowSize = extractor.singleValueParameter(COUNT_WINDOW_KEY, Integer.class);
-
-    SpeedCalculatorParameters staticParam = new SpeedCalculatorParameters(graph,
-        latitudeFieldName, longitudeFieldName, timestampFieldName, countWindowSize);
-
-    return new ConfiguredEventProcessor<>(staticParam, SpeedCalculator::new);
-  }
-
-
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorParameters.java
deleted file mode 100644
index 82b996e7e..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/speed/SpeedCalculatorParameters.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.speed;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class SpeedCalculatorParameters extends EventProcessorBindingParams {
-
-  private String latitudeFieldName;
-  private String longitudeFieldName;
-  private String timestampFieldName;
-  private Integer countWindowSize;
-
-  public SpeedCalculatorParameters(DataProcessorInvocation graph,
-                                   String latitudeFieldName,
-                                   String longitudeFieldName,
-                                   String timestampFieldName,
-                                   Integer countWindowSize) {
-    super(graph);
-    this.latitudeFieldName = latitudeFieldName;
-    this.longitudeFieldName = longitudeFieldName;
-    this.timestampFieldName = timestampFieldName;
-    this.countWindowSize = countWindowSize;
-  }
-
-  public String getLatitudeFieldName() {
-    return latitudeFieldName;
-  }
-
-  public String getLongitudeFieldName() {
-    return longitudeFieldName;
-  }
-
-  public String getTimestampFieldName() {
-    return timestampFieldName;
-  }
-
-  public Integer getCountWindowSize() {
-    return countWindowSize;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java
deleted file mode 100644
index f3e73476b..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator;
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.processor.util.DistanceUtil;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-public class StaticDistanceCalculator implements EventProcessor<StaticDistanceCalculatorParameters> {
-
-  private String latitudeFieldName;
-  private String longitudeFieldName;
-
-  private Float selectedLocationLatitude;
-  private Float selectedLocationLongitude;
-
-  @Override
-  public void onInvocation(StaticDistanceCalculatorParameters parameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-    this.latitudeFieldName = parameters.getLatitudeFieldName();
-    this.longitudeFieldName = parameters.getLongitudeFieldName();
-
-    this.selectedLocationLatitude = parameters.getSelectedLatitude();
-    this.selectedLocationLongitude = parameters.getSelectedLongitude();
-  }
-
-  @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 = DistanceUtil.dist(latitude, longitude, selectedLocationLatitude,
-        selectedLocationLongitude);
-
-    event.addField("distance", distance);
-
-    collector.collect(event);
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java
deleted file mode 100644
index bf7c68d0e..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorController.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.model.schema.PropertyScope;
-import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.sdk.utils.Datatypes;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.vocabulary.SO;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-import java.net.URI;
-
-public class StaticDistanceCalculatorController
-    extends StandaloneEventProcessingDeclarer<StaticDistanceCalculatorParameters> {
-
-  private static final String LATITUDE_KEY = "latitude-key";
-  private static final String LONGITUDE_KEY = "longitude-key";
-  private static final String SELECTED_LATITUDE_KEY = "selected-latitude-key";
-  private static final String SELECTED_LONGITUDE_KEY = "selected-longitude-key";
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processors.geo.jvm.processor"
-            + ".staticdistancecalculator")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LAT)
-                , Labels.withId(LATITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .requiredPropertyWithUnaryMapping(EpRequirements.domainPropertyReq(Geo.LNG)
-                , Labels.withId(LONGITUDE_KEY), PropertyScope.MEASUREMENT_PROPERTY)
-            .build())
-        .requiredFloatParameter(Labels.withId(SELECTED_LATITUDE_KEY))
-        .requiredFloatParameter(Labels.withId(SELECTED_LONGITUDE_KEY))
-        .outputStrategy(
-            OutputStrategies.append(PrimitivePropertyBuilder
-                .create(Datatypes.Float, "distance")
-                .domainProperty(SO.NUMBER)
-                .measurementUnit(URI.create("http://qudt.org/vocab/unit#Kilometer"))
-                .build())
-        )
-        .build();
-
-  }
-
-  @Override
-  public ConfiguredEventProcessor<StaticDistanceCalculatorParameters> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-    String latitudeFieldName = extractor.mappingPropertyValue(LATITUDE_KEY);
-    String longitudeFieldName = extractor.mappingPropertyValue(LONGITUDE_KEY);
-    Float selectedLatitude = extractor.singleValueParameter(SELECTED_LATITUDE_KEY, Float.class);
-    Float selectedLongitude = extractor.singleValueParameter(SELECTED_LONGITUDE_KEY, Float.class);
-
-    StaticDistanceCalculatorParameters staticParam = new StaticDistanceCalculatorParameters(graph,
-        latitudeFieldName, longitudeFieldName, selectedLatitude, selectedLongitude);
-
-    return new ConfiguredEventProcessor<>(staticParam, StaticDistanceCalculator::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorParameters.java
deleted file mode 100644
index 3f9511680..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticdistancecalculator/StaticDistanceCalculatorParameters.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class StaticDistanceCalculatorParameters extends EventProcessorBindingParams {
-
-  private String latitudeFieldName;
-  private String longitudeFieldName;
-
-  private Float selectedLatitude;
-  private Float selectedLongitude;
-
-  public StaticDistanceCalculatorParameters(DataProcessorInvocation graph,
-                                            String latitudeFieldName,
-                                            String longitudeFieldName,
-                                            Float selectedLatitude,
-                                            Float selectedLongitude) {
-    super(graph);
-    this.latitudeFieldName = latitudeFieldName;
-    this.longitudeFieldName = longitudeFieldName;
-    this.selectedLatitude = selectedLatitude;
-    this.selectedLongitude = selectedLongitude;
-  }
-
-  public String getLatitudeFieldName() {
-    return latitudeFieldName;
-  }
-
-  public String getLongitudeFieldName() {
-    return longitudeFieldName;
-  }
-
-  public Float getSelectedLatitude() {
-    return selectedLatitude;
-  }
-
-  public void setSelectedLatitude(Float selectedLatitude) {
-    this.selectedLatitude = selectedLatitude;
-  }
-
-  public Float getSelectedLongitude() {
-    return selectedLongitude;
-  }
-
-  public void setSelectedLongitude(Float selectedLongitude) {
-    this.selectedLongitude = selectedLongitude;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocoder.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocoder.java
deleted file mode 100644
index 87a0c6223..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocoder.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.staticgeocoder;
-
-
-import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.model.runtime.Event;
-import org.apache.streampipes.processors.geo.jvm.config.ConfigKeys;
-import org.apache.streampipes.wrapper.context.EventProcessorRuntimeContext;
-import org.apache.streampipes.wrapper.routing.SpOutputCollector;
-import org.apache.streampipes.wrapper.runtime.EventProcessor;
-
-import com.google.maps.GeoApiContext;
-import com.google.maps.GeocodingApi;
-import com.google.maps.errors.ApiException;
-import com.google.maps.model.GeocodingResult;
-
-import java.io.IOException;
-
-public class StaticGoogleMapsGeocoder implements EventProcessor<StaticGoogleMapsGeocodingParameters> {
-
-  private Double latitude;
-  private Double longitude;
-
-  @Override
-  public void onInvocation(StaticGoogleMapsGeocodingParameters parameters, SpOutputCollector spOutputCollector,
-                           EventProcessorRuntimeContext runtimeContext) throws SpRuntimeException {
-    String place = parameters.getPlace();
-    String googleMapsApiKey = runtimeContext.getConfigStore().getConfig().getString(ConfigKeys.GOOGLE_API_KEY);
-
-    if (googleMapsApiKey == null || googleMapsApiKey.equals("")) {
-      throw new SpRuntimeException("Could not start Geocoder. Did you forget to add a Google Maps"
-          + " API key?");
-    }
-
-    GeoApiContext context = new GeoApiContext.Builder()
-        .apiKey(googleMapsApiKey)
-        .build();
-
-    try {
-      GeocodingResult[] results = GeocodingApi.geocode(context,
-          place).await();
-      this.latitude = results[0].geometry.location.lat;
-      this.longitude = results[0].geometry.location.lng;
-    } catch (ApiException | IOException | InterruptedException e) {
-      e.printStackTrace();
-      throw new SpRuntimeException("Could not fetch geocoding result");
-    }
-  }
-
-  @Override
-  public void onEvent(Event event, SpOutputCollector collector) throws SpRuntimeException {
-    event.addField("latitude", latitude);
-    event.addField("longitude", longitude);
-
-    collector.collect(event);
-  }
-
-  @Override
-  public void onDetach() throws SpRuntimeException {
-
-  }
-
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingController.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingController.java
deleted file mode 100644
index cba9f7020..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingController.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.staticgeocoder;
-
-import org.apache.streampipes.model.DataProcessorType;
-import org.apache.streampipes.model.graph.DataProcessorDescription;
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.sdk.builder.ProcessingElementBuilder;
-import org.apache.streampipes.sdk.builder.StreamRequirementsBuilder;
-import org.apache.streampipes.sdk.extractor.ProcessingElementParameterExtractor;
-import org.apache.streampipes.sdk.helpers.EpProperties;
-import org.apache.streampipes.sdk.helpers.EpRequirements;
-import org.apache.streampipes.sdk.helpers.Labels;
-import org.apache.streampipes.sdk.helpers.Locales;
-import org.apache.streampipes.sdk.helpers.OutputStrategies;
-import org.apache.streampipes.sdk.utils.Assets;
-import org.apache.streampipes.vocabulary.Geo;
-import org.apache.streampipes.wrapper.standalone.ConfiguredEventProcessor;
-import org.apache.streampipes.wrapper.standalone.declarer.StandaloneEventProcessingDeclarer;
-
-public class StaticGoogleMapsGeocodingController
-    extends StandaloneEventProcessingDeclarer<StaticGoogleMapsGeocodingParameters> {
-
-  private static final String PLACE = "place";
-
-  @Override
-  public DataProcessorDescription declareModel() {
-    return ProcessingElementBuilder.create("org.apache.streampipes.processor.geo.jvm.staticgeocoding")
-        .category(DataProcessorType.GEO)
-        .withAssets(Assets.DOCUMENTATION)
-        .withLocales(Locales.EN)
-        .requiredStream(StreamRequirementsBuilder
-            .create()
-            .requiredProperty(EpRequirements.anyProperty())
-            .build())
-        .requiredTextParameter(Labels.withId("place"))
-        .outputStrategy(OutputStrategies.append(
-            EpProperties.doubleEp(Labels.empty(), "latitude", Geo.LAT),
-            EpProperties.stringEp(Labels.empty(), "longitude", Geo.LNG)
-        ))
-        .build();
-  }
-
-  @Override
-  public ConfiguredEventProcessor<StaticGoogleMapsGeocodingParameters> onInvocation(
-      DataProcessorInvocation graph,
-      ProcessingElementParameterExtractor extractor) {
-    String place = extractor.singleValueParameter(PLACE, String.class);
-
-    StaticGoogleMapsGeocodingParameters params = new StaticGoogleMapsGeocodingParameters(graph, place);
-
-    return new ConfiguredEventProcessor<>(params, StaticGoogleMapsGeocoder::new);
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingParameters.java b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingParameters.java
deleted file mode 100644
index aebcdd6d6..000000000
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/java/org/apache/streampipes/processors/geo/jvm/processor/staticgeocoder/StaticGoogleMapsGeocodingParameters.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.processors.geo.jvm.processor.staticgeocoder;
-
-import org.apache.streampipes.model.graph.DataProcessorInvocation;
-import org.apache.streampipes.wrapper.params.binding.EventProcessorBindingParams;
-
-public class StaticGoogleMapsGeocodingParameters extends EventProcessorBindingParams {
-
-  private String place;
-
-  public StaticGoogleMapsGeocodingParameters(DataProcessorInvocation graph,
-                                             String place) {
-    super(graph);
-    this.place = place;
-  }
-
-  public String getPlace() {
-    return place;
-  }
-}
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/documentation.md
similarity index 57%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/documentation.md
index 1f19b7b10..a4e420892 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/documentation.md
@@ -27,13 +27,14 @@
 
 ## Description
 
-This processor adds ab integer value to the stream. This integer value represents
-an [EPSG Code](https://en.wikipedia.org/wiki/EPSG_Geodetic_Parameter_Dataset) as an Spatial Reference System Identifier [(SRID)](https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier).
+This processor adds an integer value to the event. This integer value represents
+an  <a href="https://en.wikipedia.org/wiki/EPSG_Geodetic_Parameter_Dataset" target="_blank">EPSG Code</a> as an Spatial Reference System Identifier
+an  <a href="https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier" target="_blank">(SRID)</a>.
 
 
 ***
 
-## Required input
+## Required inputs
 
 None
 
@@ -41,13 +42,17 @@ None
 
 ## Configuration
 
-Integer values, representing a spatial reference system [(SRS)](https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier).  Other possible values can be looked up under https://spatialreference.org/ref/epsg/.
+Integer values, representing a spatial reference system
+<a href="https://en.wikipedia.org/wiki/Spatial_reference_system#Identifier" target="_blank">SRID</a>.
+Other possible values can be looked up via
+<a href="https://spatialreference.org/ref/epsg/" target="_blank">spatialreference.org</a>.
 
 ### Parameter
 
-4- to 5-digit key integer number. Default value is 4326 representing the World Geodetic System [(WGS84)](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84).
+4- to 5-digit key integer number. Default value is 4326 representing the World Geodetic System
+<a href="https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84" target="_blank">(WGS84)</a>.
 
 ***
 ## Output
 
-Adds a number to the event.
+Adds the epsg number to the event.
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/icon.png
similarity index 100%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/icon.png
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/icon.png
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/strings.en
similarity index 80%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/strings.en
index 972dacf87..db8974d26 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.epsg/strings.en
@@ -15,9 +15,8 @@
 # limitations under the License.
 #
 
-
-org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg.title=EPSG Code
-org.apache.streampipes.processors.geo.jvm.jts.processor.setepsg.description=Adds a corresponding EPSG Code to the Geo-Event
+org.apache.streampipes.processors.geo.jvm.jts.processor.epsg.title=Geo EPSG Code
+org.apache.streampipes.processors.geo.jvm.jts.processor.epsg.description=Adds a corresponding EPSG Code to the Geo-Event
 
 epsg-key.title=EPSG Code field
 epsg-key.description=EPSG Code
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/icon.png
deleted file mode 100644
index d37330b5b..000000000
Binary files a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/icon.png and /dev/null differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/documentation.md
similarity index 93%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/documentation.md
index f80cd9b5f..f77cb5122 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/documentation.md
@@ -16,7 +16,7 @@
   ~
   -->
 
-## Latitude Longitutde To JTS Point
+## Latitude Longitude To JTS Point
 
 <p align="center">
     <img src="icon.png" width="150px;" class="pe-image-documentation"/>
@@ -26,11 +26,11 @@
 
 ## Description
 
-This processor creates a  JTS Point geometry from  latitude and longitude value.
+This processor creates a JTS Point geometry from  latitude and longitude value.
 
 ***
 
-## Required input
+## Required inputs
 
 *  Ontology Vocabulary Latitude
 *  Ontology Vocabulary Longitude
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/icon.png
new file mode 100644
index 000000000..7b8c3150a
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/strings.en
similarity index 73%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/strings.en
index 1fbca6ac0..2477267e1 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint/strings.en
@@ -16,9 +16,12 @@
 #
 
 
-org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo.title=Creates JTS Point
-org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtogeo.description=Creates a JTS Point from Latitude and Longitude values
+org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint.title=Geo Create JTS Point
+org.apache.streampipes.processors.geo.jvm.jts.processor.latlngtojtspoint.description=Creates a JTS Point from Latitude and Longitude values
 
-latitude-key=Latitude value
-longitude-key=Longitude value
-epsg-key= EPSG Code
+latitude-key.title=Latitude value
+latitude-key.description=Latitude value
+longitude-key.title=Longitude value
+longitude-key.description=Longitude value
+epsg-key.title=EPSG Code field
+epsg-key.description=EPSG Code
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/documentation.md
index 1fbec386e..51497c821 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/documentation.md
@@ -29,7 +29,7 @@
 This processor creates a JTS LineString geometry from  JTS Points events, represent a trajectory. A trajectory is defined  as the path that a moving object follows through space as a function of time. Each sub-point of this LineString represents a single event. The latest sub-point represents the latest geo-event. For each Point event it is also possible to store an additional m-value representing for example actually speed, distance, duration or direction of this event. A trajectory con [...]
 ***
 
-## Required input
+## Required inputs
 
 *  WKT String of a JTS Point Geometry
 *  Integer value representing EPSG code
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/icon.png
index 73890068b..1f3bebbb4 100644
Binary files a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/icon.png and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/strings.en
index 93fd927a8..5625df2b4 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory/strings.en
@@ -16,20 +16,20 @@
 #
 
 
-org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.title=Single Trajectory Creator
+org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.title=Geo Single Trajectory Creator
 org.apache.streampipes.processors.geo.jvm.jts.processor.trajectory.description=Creates a trajectory from JTS point events
 
 point-key.title=JTS Point Event
-point-key.description=Single Point Event which will be added to the trajectory
+point-key.description=Single Point Event added to the trajectory
 
 point-key.title=JTS Point Event
-point-key.description=Single Point Event which will be added to the trajectory
+point-key.description=Single Point Event added to the trajectory
 
 epsg-key.title=CRS of Input Point
 epsg-key.description=EPSG-Code of input point
 
 m-key.title=measurement value
-m-key.description=Measurement value which will be stored with each point event
+m-key.description=Measurement value which is stored together with each point event and can be used for internal calculations
 
 description-key.title=description text of trajectory
 description-key.description=A description text for the trajectory
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/documentation.md
similarity index 90%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/documentation.md
index 5821bbfb4..b9d288f27 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/documentation.md
@@ -16,7 +16,7 @@
   ~
   -->
 
-## Distance Calculator
+## Distance Calculator (Haversine)
 
 <p align="center"> 
     <img src="icon.png" width="150px;" class="pe-image-documentation"/>
@@ -25,11 +25,12 @@
 ***
 
 ## Description
-Calculates the distance between two latitude/longitude pairs in a single event.
+Calculates the distance between two latitude/longitude pairs in a single event with the
+<a href="https://en.wikipedia.org/wiki/Haversine_formula" target="_blank">Haversine formula</a>.
 
 ***
 
-## Required input
+## Required inputs
 Requires a position of point on the Earth's surface specified by the two geographic coordinates: the longitude and latitude of the point.
 
 ***
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/icon.png
new file mode 100644
index 000000000..f4a7f7555
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/strings.en
similarity index 65%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/strings.en
index c39ad9687..7d3ed3dc1 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.distancecalculator/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine/strings.en
@@ -15,21 +15,17 @@
 # limitations under the License.
 #
 
+org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine.title=Geo Distance Calculator (Haversine)
+org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversine.description=Calculates the distance between two geo points with the Haversine formula
 
-org.apache.streampipes.processors.geo.jvm.processor.distancecalculator.title=Distance Calculator
-org.apache.streampipes.processors.geo.jvm.processor.distancecalculator.description=Calculates the distance between two geo points
-
-lat1.title=First Latitude
+lat1.title=First Latitude Position 1
 lat1.description=
 
-long1.title=First Longitude
+long1.title=First Longitude Position 1
 long1.description=
 
-lat2.title=Second Latitude
+lat2.title=Second Latitude Position 2
 lat2.description=
 
-long2.title=Second Longitude
+long2.title=Second Longitude Position 2
 long2.description=
-
-calculatedDistance.title=Distance Field
-startingCell.description=
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/documentation.md
similarity index 78%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/documentation.md
index e32dd92ba..92641b3af 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/documentation.md
@@ -16,18 +16,22 @@
   ~
   -->
 
-## Static Distance Calculator
+## Distance Static Calculator (Haversine)
+
+<p align="center"> 
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
 
 ***
 
 ## Description
 
-Calculates the distance (in km) between a fixed location (e.g., a place) and a latitude/longitude pair of an input
+Calculates the distance with the <a href="https://en.wikipedia.org/wiki/Haversine_formula" target="_blank">Haversine formula</a> between a fixed location (e.g., a place) and a latitude/longitude pair of an input
  event.
 
 ***
 
-## Required input
+## Required inputs
 
 Requires a data stream that provides latitude and longitude values.
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/icon.png
new file mode 100644
index 000000000..f245b7115
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/strings.en
similarity index 75%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/strings.en
index 0186b43d0..ec2e027bf 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic/strings.en
@@ -15,9 +15,8 @@
 # limitations under the License.
 #
 
-
-org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator.title=Static Distance Calculator
-org.apache.streampipes.processors.geo.jvm.processor.staticdistancecalculator.description=Calculates the distance between a fixed location and a moving location
+org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic.title=Geo Distance Calculator Static (Haversine)
+org.apache.streampipes.processors.geo.jvm.latlong.processor.distancecalculator.haversinestatic.description=Calculates the distance between a fixed location and a moving location with the Haversine formula.
 
 latitude-key.title=Latitude field
 latitude-key.description=
@@ -29,4 +28,4 @@ selected-latitude-key.title=Latitude
 selected-latitude-key.description=The latitude value of the fixed location
 
 selected-longitude-key.title=Longitude
-selected-longitude-key.description=The longitude value of the fixed location
\ No newline at end of file
+selected-longitude-key.description=The longitude value of the fixed location
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/documentation.md
similarity index 92%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/documentation.md
index 6e844091c..f2d237d8d 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/documentation.md
@@ -18,7 +18,8 @@
 
 ## Google Maps Geocoding
 
-<p align="center"> 
+<p align="center">
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
 </p>
 
 ***
@@ -30,7 +31,7 @@ This processor computes the latitude and longitude values from a location (a pla
 
 ***
 
-## Required input
+## Required inputs
 
 Input event requires to have a field which contains the name of a place.
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/icon.png
new file mode 100644
index 000000000..ee65703f6
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/strings.en
similarity index 65%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/strings.en
index 980aa6090..c9f0447bd 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.geocoding/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps/strings.en
@@ -15,9 +15,8 @@
 # limitations under the License.
 #
 
+org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps.title=Geo Google Maps Geocoder
+org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemaps.description=Geocodes a place-name to a latitude/longitude combination
 
-org.apache.streampipes.processor.geo.jvm.geocoding.title=Google Maps Geocoder
-org.apache.streampipes.processor.geo.jvm.geocoding.description=Geocodes a placename to a latitude/longitude combination
-
-place-mapping.title=Place
-place-mapping.description=The field of the input event that should be used to compute the lat/lng values.
\ No newline at end of file
+geocoder-request-key.title=Address
+geocoder-request-key.description=The field of the input event that should be used to compute the lat/lng values.
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/documentation.md
similarity index 90%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/documentation.md
index ce3441d02..0e2fe9e46 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/documentation.md
@@ -16,9 +16,10 @@
   ~
   -->
 
-## Static Google Maps Geocoding
+## Google Maps Static Geocoding
 
-<p align="center"> 
+<p align="center">
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
 </p>
 
 ***
@@ -31,7 +32,7 @@ This processor computes the latitude and longitude values from a fixed location
 
 ***
 
-## Required input
+## Required inputs
 
 Input event requires to have a field which contains the name of a place.
 
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/icon.png
new file mode 100644
index 000000000..fae902886
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/strings.en
similarity index 67%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/strings.en
index 6fdbd659c..73609f57f 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.staticgeocoding/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic/strings.en
@@ -16,9 +16,9 @@
 #
 
 
-org.apache.streampipes.processor.geo.jvm.staticgeocoding.title=Static Google Maps Geocoder
-org.apache.streampipes.processor.geo.jvm.staticgeocoding.description=Geocodes a fixed placename to lat/lng coordinates and
+org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic.title=Geo Google Maps Static Geocoder
+org.apache.streampipes.processors.geo.jvm.latlong.processor.geocoder.googlemapsstatic.description=Geocodes a fixed place name to lat/lng coordinates and
 appends these coordinates to every input event.
 
-place.title=Place
-place.description=The place name that should be converted to a lat/lng combination
\ No newline at end of file
+sg-request-key.title=Address
+sg-request-key.description=The place name that should be converted to a lat/lng combination
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/documentation.md
similarity index 69%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/documentation.md
index 97dff2b7e..0d1b39061 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/documentation.md
@@ -16,22 +16,25 @@
   ~
   -->
 
-## Reverse Geocoding
+## Geo City Name Reverse Decoder
 
-<p align="center"> 
+<p align="center">
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
 </p>
 
 ***
 
 ## Description
 
-This processor computes place name based on given lat/lng coordinates that are transmitted as fields from an event.
+This processor computes city name based on given lat/lng coordinates that are transmitted as fields from an event.
+This processor automatically downloads the file cities1000.zip from <a href="http://download.geonames.org/export/dump/cities1000.zip)" target="_blank">Geonames</a>
+ ( This file is provided under the <a href="https://creativecommons.org/licenses/by/4.0/)" target="_blank">CC BY 4.0 license</a>).
+
 
-This processor automatically downloads the file cities1000.zip from Geonames (http://download.geonames.org/export/dump/cities1000.zip). This file is provided under the CC BY 4.0 license, see https://creativecommons.org/licenses/by/4.0/ for license details.
 
 ***
 
-## Required input
+## Required inputs
 
 Input event requires to have latitude and longitude values.
 
@@ -53,6 +56,6 @@ Outputs a similar event like below.
 
 ```
 {
-  'place': 'Colombo'
+  'geoname': 'Colombo'
 }
 ```
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/icon.png
new file mode 100644
index 000000000..505f90fa6
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/strings.en
similarity index 61%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/strings.en
index 25b5d01ee..f26e8aa3f 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processor.geo.jvm.reversegeocoding/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname/strings.en
@@ -15,13 +15,12 @@
 # limitations under the License.
 #
 
-
-org.apache.streampipes.processor.geo.jvm.reversegeocoding.title=Reverse Geocoder
-org.apache.streampipes.processor.geo.jvm.reversegeocoding.description=Finds the nearest place based on latitude and longitude
+org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.title=Geo City Name Reverse Decoder
+org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.description=Finds the nearest major city based on latitude and longitude
 values.
 
-latitude-mapping.title=Latitude
-latitude-mapping.description=The field containing the latitude value.
+latitude-mapping-key.title=Latitude
+latitude-mapping-key.description=The field containing the latitude value.
 
-longitude-mapping.title=Longitude
-longitude-mapping.description=The field containing the longitude value.
\ No newline at end of file
+longitude-mapping-key.title=Longitude
+longitude-mapping-key.description=The field containing the longitude value.
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/documentation.md b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/documentation.md
similarity index 79%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/documentation.md
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/documentation.md
index dbb4b6523..1efd85c3e 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/documentation.md
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/documentation.md
@@ -18,16 +18,20 @@
 
 ## Speed Calculator
 
+<p align="center">
+    <img src="icon.png" width="150px;" class="pe-image-documentation"/>
+</p>
+
 ***
 
 ## Description
 
-Calculates the speed (in km/h) based on latitude/longitude values in a data stream. Therefore it uses the GPS and timestamps values of consecutive events. 
+Calculates the speed (in km/h) based on latitude/longitude values in a data stream. Therefore, it uses the GPS and timestamps values of consecutive events. 
 It calculates the distance between two points (events) and how much time has passed. Based on those values the speed is calculated.
 
 ***
 
-## Required input
+## Required inputs
 
 Requires a data stream that provides latitude and longitude values as well as a timestamp.
 
@@ -43,7 +47,7 @@ Requires a data stream that provides latitude and longitude values as well as a
 
 ### Count window
 Describes the number of stored events, used for the calculation. 
-E.g. a value of 5 means that thhe current event and the event (t-5) are used for the speed calculation.
+E.g. a value of 5 means that the current event and the event (t-5) are used for the speed calculation.
 
 ## Output
 Appends the calculated speed in km/h.
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/icon.png
new file mode 100644
index 000000000..914d29e74
Binary files /dev/null and b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/icon.png differ
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/strings.en b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/strings.en
similarity index 81%
rename from streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/strings.en
rename to streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/strings.en
index 9d303ae6c..703ebb800 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/strings.en
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator/strings.en
@@ -16,8 +16,8 @@
 #
 
 
-org.apache.streampipes.processors.geo.jvm.processor.speed.title=Speed Calculator
-org.apache.streampipes.processors.geo.jvm.processor.speed.description=Calculates the speed of two latlng pairs in kilometers per hour
+org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator.title=Geo Speed Calculator
+org.apache.streampipes.processors.geo.jvm.latlong.processor.speedcalculator.description=Calculates the speed of two latlng pairs in kilometers per hour
 
 timestamp-key.title=Timestamp field
 timestamp-key.description=Used to calculate the time between events
@@ -29,4 +29,4 @@ longitude-key.title=Longitude field
 longitude-key.description=Used to calculate the distance between events
 
 count-window-key.title=Count window
-count-window-key.description=Describes the number of stored events, used for the calculation
+count-window-key.description=Describes the number of stored events, used for the calculation
\ No newline at end of file
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/icon.png b/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/icon.png
deleted file mode 100644
index 7254648fc..000000000
Binary files a/streampipes-extensions/streampipes-processors-geo-jvm/src/main/resources/org.apache.streampipes.processors.geo.jvm.processor.speed/icon.png and /dev/null differ
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/runtime/Event.java b/streampipes-model/src/main/java/org/apache/streampipes/model/runtime/Event.java
index 58281241e..8da965779 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/runtime/Event.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/runtime/Event.java
@@ -189,7 +189,7 @@ public class Event {
     }
   }
 
-  public void addField(String runtimeName, Float value) {
+  public void addField(String runtimeName, double value) {
     addPrimitive(runtimeName, value);
   }
 
diff --git a/tools/maven/suppressions.xml b/tools/maven/suppressions.xml
index 09c51005e..95d29304f 100644
--- a/tools/maven/suppressions.xml
+++ b/tools/maven/suppressions.xml
@@ -22,7 +22,7 @@
         "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
 <suppressions>
     <suppress checks="." files="[\\/]org.apache.streampipes.vocabulary[\\/].*\.java$"/>
-    <suppress checks="." files="org.apache.streampipes.processors.geo.jvm.processor.revgeocoder.geocode"/>
+    <suppress checks="." files="org.apache.streampipes.processors.geo.jvm.latlong.processor.revgeocoder.geocityname.geocode"/>
     <suppress checks="." files="com.github.jqudt"/>
     <suppress checks="." files="com.kohlschutter.boilerpipe"/>
 </suppressions>
\ No newline at end of file