Repository: apache/streampipes
Pull request #1695 (2023-06-17 19:54:21)

Maven housekeeping
<!--
  ~ 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.
  ~
  -->
  
  <!--
Thanks for contributing! Here are some tips you can follow to help us incorporate your contribution quickly and easily:
1. If this is your first time, please read our contributor guidelines:
    - https://streampipes.apache.org/getinvolved.html
    - https://cwiki.apache.org/confluence/display/STREAMPIPES/Getting+Started
2. Make sure the PR title is formatted like: `[#<GitHub issue id>] PR title ...`
3. If the PR is unfinished, add '[WIP]' in your PR title, e.g., `[WIP][#<GitHub issue id>] PR title ...`.
4. Please write your PR title to summarize what this PR proposes/fixes.
5. Link the PR to the corresponding GitHub issue (if present) in the `Development` section in the right menu bar. 
6. Be sure to keep the PR description updated to reflect all changes.
7. If possible, provide a concise example to reproduce the issue for a faster review.
8. Make sure tests pass via `mvn clean install`.
9. (Optional) If the contribution is large, please file an Apache ICLA
    - http://apache.org/licenses/icla.pdf
-->

### Purpose
<!--
Please clarify what changes you are proposing and describe how those changes will address the issue.
Furthermore, describe potential consequences the changes might have.
-->

Update and remove some obsolete dependencies to reduce bundle size, several minor improvements of dependency management.

### Remarks
<!--
Is there anything left we need to pay attention on?
Are there some references that might be important? E.g. links to Confluence, or discussions
on the mailing list or GitHub.
-->
PR introduces (a) breaking change(s): no

PR introduces (a) deprecation(s): no



Patch:
diff --git a/README.md b/README.md
index 9266f9b931..2c995a10ce 100644
--- a/README.md
+++ b/README.md
@@ -22,11 +22,13 @@
 [![Maven central](https://img.shields.io/maven-central/v/org.apache.streampipes/streampipes-service-core.svg)](https://img.shields.io/maven-central/v/org.apache.streampipes/streampipes-service-core.svg)
 [![License](https://img.shields.io/github/license/apache/streampipes.svg)](http://www.apache.org/licenses/LICENSE-2.0)
 [![Last commit](https://img.shields.io/github/last-commit/apache/streampipes.svg)]()
-[![Twitter](https://img.shields.io/twitter/follow/StreamPipes.svg?label=Follow&style=social)](https://twitter.com/StreamPipes)
 [![Apache StreamPipes](https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/detailed/q1jdu2&style=flat&logo=cypress)](https://dashboard.cypress.io/projects/q1jdu2/runs)
 [![Contributors](https://img.shields.io/github/contributors/apache/streampipes)](https://github.com/apache/streampipes/graphs/contributors)
 ![GitHub commit activity](https://img.shields.io/github/commit-activity/y/apache/streampipes)
 [![GitHub issues by-label](https://img.shields.io/github/issues/apache/streampipes/good%20first%20issue)](https://github.com/apache/streampipes/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)
+<br>
+[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://linkedin.com/company/apache-streampipes)
+[![Twitter](https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/StreamPipes)
 
 <h1 align="center">
   <br>
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 3eff615f47..ed1cf2450c 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -21,6 +21,137 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
+
+# [0.92.0]
+
+## What's Changed
+
+### Enhancement 🌟
+
+* [[#1564](https://github.com/apache/streampipes/issues/1564)]: Add feature to assign labels to StreamPipes resources
+* [[#1522](https://github.com/apache/streampipes/issues/1522)]: Return 404 if requested pipeline does not exist
+* [[#1520](https://github.com/apache/streampipes/issues/1520)]: Map http 404 to Java Optional.empty in Java Client
+* [[#1518](https://github.com/apache/streampipes/issues/1518)]: Compiling maven submodule with checkstyle check
+* [[#1467](https://github.com/apache/streampipes/pull/1467)]: Implement create method in Java client PipelineApi
+* [[#1405](https://github.com/apache/streampipes/issues/1405)]: Enable search for Python docs
+* [[#1339](https://github.com/apache/streampipes/pull/1339)]: Support backend-only development mode (#1327)
+* [[#1319](https://github.com/apache/streampipes/pull/1319)]: chore(ui): provide some more references for support in the 'about' view
+* [[#1307](https://github.com/apache/streampipes/issues/1307)]: Geometry Validation processor
+* [[#1296](https://github.com/apache/streampipes/issues/1296)]: Swinging Door Trending (SDT) Filter Processor
+* [[#1272](https://github.com/apache/streampipes/issues/1272)]: Buffer Processor
+* [[#1261](https://github.com/apache/streampipes/issues/1261)]: Add Python changes to release notes
+* [[#1259](https://github.com/apache/streampipes/issues/1259)]: Verify authentication on startup of Python client
+* [[#1113](https://github.com/apache/streampipes/issues/1113)]: Add buttons to start and stop all adapters
+* [[#1107](https://github.com/apache/streampipes/issues/1107)]: Build Github worfklow with OSV scanner
+* [[#1101](https://github.com/apache/streampipes/issues/1101)]: Extend StreamPipes API by a health-check endpoint
+
+
+### Bug fixes 🧰
+
+* [[#1547](https://github.com/apache/streampipes/issues/1547)]: standalone dashborad empty
+* [[#1527](https://github.com/apache/streampipes/issues/1527)]: Fix logo url of email templates
+* [[#1501](https://github.com/apache/streampipes/pull/1501)]: [hotfix] Fix handling of count queries in data explorer
+* [[#1479](https://github.com/apache/streampipes/issues/1479)]: Truncate does not work in data lake configuration
+* [[#1439](https://github.com/apache/streampipes/issues/1439)]: Past data exists twice in raw widget
+* [[#1391](https://github.com/apache/streampipes/issues/1391)]: Data Explorer filter doesn't work for boolean and `false` value
+* [[#1333](https://github.com/apache/streampipes/issues/1333)]: Endpoint to receive pipelines is broken
+* [[#1329](https://github.com/apache/streampipes/issues/1329)]: Data Lake measurements endpoint returns no data series when no data between `startDate` and `endDate`
+* [[#1327](https://github.com/apache/streampipes/issues/1327)]: Failed to start local backend enviroment
+* [[#1308](https://github.com/apache/streampipes/issues/1308)]: [CI] label-pr workflow fails on fork-based PRs
+* [[#1291](https://github.com/apache/streampipes/issues/1291)]: Can't aggregate calculation results of the Math processing element
+* [[#1199](https://github.com/apache/streampipes/issues/1199)]: UI Semantik Type field is too small to see full term
+* [[#793](https://github.com/apache/streampipes/issues/793)]: Empty string as API token name
+
+
+### Breaking Change 💣
+
+* [[#1040](https://github.com/apache/streampipes/issues/1040)]: Change Event Runtime Name of geometry field
+
+
+### Deprecation ⚠️
+
+* [[#1115](https://github.com/apache/streampipes/discussions/1115)] **IMPORTANT** In the future we will remove support for data set adapters
+
+
+### Documentation & Website 📚
+
+* [[#1623](https://github.com/apache/streampipes/pull/1623)]: chore: mark streampipes-wrapper-python as deprecated
+* [[#1535](https://github.com/apache/streampipes/pull/1535)]: Add vulnerability report
+* [[#1442](https://github.com/apache/streampipes/issues/1442)]: Extend Python docs with dark mode
+* [[#1415](https://github.com/apache/streampipes/pull/1415)]: [doc](readme)Enhancement in some Hyperlinks.
+* [[#1411](https://github.com/apache/streampipes/issues/1411)]: Create custom error page for Python docs
+* [[#1405](https://github.com/apache/streampipes/issues/1405)]: Enable search for Python docs
+* [[#1327](https://github.com/apache/streampipes/issues/1327)]: Failed to start local backend enviroment
+* [[#1326](https://github.com/apache/streampipes/pull/1326)]: chore(docs): add information on how to develop the UI locally
+* [[#1051](https://github.com/apache/streampipes/issues/1051)]: Add further badges to README of Python client
+
+
+### Dependency Updates 📦
+
+* [[#1623](https://github.com/apache/streampipes/pull/1623)]: chore: mark streampipes-wrapper-python as deprecated
+* [[#1577](https://github.com/apache/streampipes/pull/1577)]: Bump tubemq-client from 1.5.0 to 1.6.0
+* [[#1574](https://github.com/apache/streampipes/pull/1574)]: Bump amqp-client from 5.16.0 to 5.17.0
+* [[#1571](https://github.com/apache/streampipes/pull/1571)]: Remove guice from dependencies
+* [[#1570](https://github.com/apache/streampipes/pull/1570)]: Bump annotations from 16.0.2 to 24.0.1
+* [[#1566](https://github.com/apache/streampipes/pull/1566)]: Bump mypy from 1.2.0 to 1.3.0 in /streampipes-client-python
+* [[#1562](https://github.com/apache/streampipes/pull/1562)]: Bump jackson-databind from 2.14.1 to 2.15.0
+* [[#1560](https://github.com/apache/streampipes/pull/1560)]: Bump google-maps-services from 2.1.2 to 2.2.0
+* [[#1559](https://github.com/apache/streampipes/pull/1559)]: Bump pyupgrade from 3.3.1 to 3.4.0 in /streampipes-client-python
+* [[#1558](https://github.com/apache/streampipes/pull/1558)]: Bump types-requests from 2.29.0.0 to 2.30.0.0 in /streampipes-client-python
+* [[#1552](https://github.com/apache/streampipes/pull/1552)]: Bump opencsv from 5.5.2 to 5.7.1
+* [[#1550](https://github.com/apache/streampipes/pull/1550)]: Bump commons-compress from 1.22 to 1.23.0
+* [[#1549](https://github.com/apache/streampipes/pull/1549)]: Bump engine.io and socket.io in /ui
+* [[#1545](https://github.com/apache/streampipes/pull/1545)]: Bump consul from 1.17.6 to 1.18.0
+* [[#1542](https://github.com/apache/streampipes/pull/1542)]: Bump jackson.version from 2.14.1 to 2.15.0
+* [[#1541](https://github.com/apache/streampipes/pull/1541)]: Bump pre-commit from 3.2.0 to 3.3.0 in /streampipes-client-python
+* [[#1540](https://github.com/apache/streampipes/pull/1540)]: Bump flask from 1.1.2 to 2.3.2 in /streampipes-wrapper-python
+* [[#1539](https://github.com/apache/streampipes/pull/1539)]: chore(deps): bump several dependencies to resolve vulnerability issues
+* [[#1536](https://github.com/apache/streampipes/pull/1536)]: Bump types-requests from 2.28.11.7 to 2.29.0.0 in /streampipes-client-python
+* [[#1525](https://github.com/apache/streampipes/pull/1525)]: Bump mkdocs-gen-files from 0.4.0 to 0.5.0 in /streampipes-client-python
+* [[#1516](https://github.com/apache/streampipes/pull/1516)]: Bump karma-chrome-launcher from 3.1.1 to 3.2.0 in /ui/projects/streampipes/platform-services
+* [[#1512](https://github.com/apache/streampipes/pull/1512)]: Bump jetty-server from 10.0.10 to 10.0.14
+* [[#1511](https://github.com/apache/streampipes/pull/1511)]: Bump spring-core from 6.0.7 to 6.0.8 & spring-bot from 3.0.5 to 3.0.6 & spring-security from 6.0.2 to 6.0.3
+* [[#1510](https://github.com/apache/streampipes/pull/1510)]: Bump type-parser from 0.7.0 to 0.8.1
+* [[#1507](https://github.com/apache/streampipes/pull/1507)]: Bump maven-plugin-plugin from 3.7.0 to 3.8.1
+* [[#1506](https://github.com/apache/streampipes/pull/1506)]: Bump pandas-stubs from 1.5.2.230105 to 2.0.0.230412 in /streampipes-client-python
+* [[#1503](https://github.com/apache/streampipes/pull/1503)]: Bump peter-evans/create-pull-request from 4 to 5
+* [[#1502](https://github.com/apache/streampipes/pull/1502)]: Bump mkdocs-awesome-pages-plugin from 2.8.0 to 2.9.0 in /streampipes-client-python
+* [[#1499](https://github.com/apache/streampipes/pull/1499)]: Bump log4j.version from 2.19.0 to 2.20.0
+* [[#1498](https://github.com/apache/streampipes/pull/1498)]: Bump pytest from 7.2.1 to 7.3.0 in /streampipes-client-python
+* [[#1472](https://github.com/apache/streampipes/pull/1472)]: Bump rdf4j.version from 3.5.0 to 3.7.7
+
+
+### Uncategorized ❓
+
+* [[#1532](https://github.com/apache/streampipes/pull/1532)]: [hotfix] exclude versions file from pydocs update
+* [[#1524](https://github.com/apache/streampipes/pull/1524)]: feature: add workflow that stales PRs
+* [[#1517](https://github.com/apache/streampipes/pull/1517)]: [FEATURE] add division as operation for data harmonization rules
+* [[#1504](https://github.com/apache/streampipes/issues/1504)]: Data streams are removed from pipelines when exported
+* [[#1497](https://github.com/apache/streampipes/pull/1497)]: [hotfix] Move sp-split-section to shared-ui module
+* [[#1484](https://github.com/apache/streampipes/pull/1484)]: [hotfix] Improve handling of count queries, improve table widget
+* [[#1478](https://github.com/apache/streampipes/issues/1478)]: Distinguish between Consumer and Publisher for the broker
+* [[#1475](https://github.com/apache/streampipes/issues/1475)]: Fulfill PEP 561 compatibility
+* [[#1465](https://github.com/apache/streampipes/pull/1465)]: [hotfix] Fix configuration for pipeline element development
+* [[#1445](https://github.com/apache/streampipes/pull/1445)]: Improve Log info in Processor Test
+* [[#1433](https://github.com/apache/streampipes/pull/1433)]: update archetypes template
+* [[#1428](https://github.com/apache/streampipes/pull/1428)]: Maintain the same directory structure for source and test
+* [[#1406](https://github.com/apache/streampipes/issues/1406)]: Cleanup data explorer query management
+* [[#1385](https://github.com/apache/streampipes/issues/1385)]: Remove unused features from data explorer module
+* [[#1383](https://github.com/apache/streampipes/issues/1383)]: Introduce environment variable to provide path to file storage of backend
+* [[#1368](https://github.com/apache/streampipes/pull/1368)]: Improve create client model script
+* [[#1367](https://github.com/apache/streampipes/issues/1367)]: Add `QueryResult` as data type for `DataLakeMeasureEndpoint`
+* [[#1362](https://github.com/apache/streampipes/issues/1362)]: Support Kafka in Python client
+* [[#1361](https://github.com/apache/streampipes/pull/1361)]: Fix UI container cannot resolve backend IP correctly
+* [[#1350](https://github.com/apache/streampipes/pull/1350)]: [hotfix] Use try-with-resource way to fix the potential InfluxDB connection leak in `DataExplorerQueryV4#executeQuery`
+* [[#1336](https://github.com/apache/streampipes/issues/1336)]: Create builder for SpQueryResult
+* [[#1311](https://github.com/apache/streampipes/pull/1311)]: chore(ci): improve caching for dependencies in pr-validation workflow
+* [[#1293](https://github.com/apache/streampipes/issues/1293)]: Rename java module name `streampipes-extensions-management`
+* [[#1264](https://github.com/apache/streampipes/issues/1264)]: CLI Installer clean does not delete volumes anymore
+* [[#841](https://github.com/apache/streampipes/issues/841)]: Include supported Java versions in CI
+* [[#777](https://github.com/apache/streampipes/issues/777)]: 1-class processor model and stylechecks on all processors.geo.jvm
+* [[#655](https://github.com/apache/streampipes/issues/655)]: Support change of username and password in profile view
+
+
 # [0.91.0]
 
 ## Appreciation
diff --git a/archetypes/streampipes-archetype-extensions-jvm/pom.xml b/archetypes/streampipes-archetype-extensions-jvm/pom.xml
index 0b3fc03b01..a9d848d9a6 100644
--- a/archetypes/streampipes-archetype-extensions-jvm/pom.xml
+++ b/archetypes/streampipes-archetype-extensions-jvm/pom.xml
@@ -51,6 +51,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/archetypes/streampipes-archetype-pe-processors-flink/pom.xml b/archetypes/streampipes-archetype-pe-processors-flink/pom.xml
index 8e6286c919..2a6196d766 100644
--- a/archetypes/streampipes-archetype-pe-processors-flink/pom.xml
+++ b/archetypes/streampipes-archetype-pe-processors-flink/pom.xml
@@ -51,6 +51,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/archetypes/streampipes-archetype-pe-sinks-flink/pom.xml b/archetypes/streampipes-archetype-pe-sinks-flink/pom.xml
index 42f57597d7..25e9cb76a3 100644
--- a/archetypes/streampipes-archetype-pe-sinks-flink/pom.xml
+++ b/archetypes/streampipes-archetype-pe-sinks-flink/pom.xml
@@ -51,6 +51,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/pom.xml b/pom.xml
index 4a52f9f6d3..b13220b535 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,7 @@
 	<asm.version>9.4</asm.version>
 	<cloning.version>1.9.12</cloning.version>
 	<commons-beanutils.version>1.9.4</commons-beanutils.version>
-	<commons-codec.version>1.11</commons-codec.version>
+	<commons-codec.version>1.15</commons-codec.version>
 	<commons-collections.version>3.2.2</commons-collections.version>
 	<commons-io.version>2.11.0</commons-io.version>
 	<commons-lang3.version>3.12.0</commons-lang3.version>
@@ -130,7 +130,7 @@
 
 	<!-- Test dependencies -->
 	<junit.version>4.13.2</junit.version>
-	<mockito.version>5.3.1</mockito.version>
+	<mockito.version>5.4.0</mockito.version>
 	<powermock.version>2.0.9</powermock.version>
 	<rest-assured.version>2.9.0</rest-assured.version>
 	<wiremock.version>2.27.2</wiremock.version>
diff --git a/streampipes-client-python/README.md b/streampipes-client-python/README.md
index aece5a73c3..35f7b76964 100644
--- a/streampipes-client-python/README.md
+++ b/streampipes-client-python/README.md
@@ -34,6 +34,9 @@ and the amazing universe of data analytics libraries in Python. </p>
 <br>
 
 <p align="center">
+<a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">
+    <img src="https://img.shields.io/github/license/apache/streampipes.svg" alt="License Apache 2.0">
+</a>
 <a href="https://github.com/apache/streampipes/tree/dev/streampipes-client-python" target="_blank">
     <img src="https://img.shields.io/pypi/pyversions/streampipes" alt="Supported Python versions">
 </a>
diff --git a/streampipes-client-python/setup.py b/streampipes-client-python/setup.py
index 6a5d118efc..0caa6697a9 100644
--- a/streampipes-client-python/setup.py
+++ b/streampipes-client-python/setup.py
@@ -33,6 +33,7 @@ PROJECT_URLS = {
     "Documentation": "https://streampipes.apache.org/docs/docs/python/latest/",
     "Bug Tracker": "https://github.com/apache/streampipes/issues",
     "Source Code": "https://github.com/apache/streampipes",
+    "Changelog": "https://github.com/apache/streampipes/releases",
 }
 
 # Package requirements.
@@ -52,12 +53,12 @@ dev_packages = base_packages + [
     "flake8==6.0.0",
     "interrogate[png]==1.5.0",
     "isort==5.12.0",
-    "mypy==1.3.0",
+    "mypy==1.4.0",
     "pandas-stubs==2.0.0.230412",
     "pre-commit==3.3.0",
     "pytest==7.3.0",
     "pytest-cov==4.1.0",
-    "pyupgrade==3.6.0",
+    "pyupgrade==3.7.0",
     "types-Jinja2==2.11.9",
     "types-requests==2.31.0.0",
 ]
diff --git a/streampipes-client/pom.xml b/streampipes-client/pom.xml
index 3eb39855d0..263ffa43d6 100644
--- a/streampipes-client/pom.xml
+++ b/streampipes-client/pom.xml
@@ -83,10 +83,6 @@
         </dependency>
 
         <!-- 3rd party Dependencies -->
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
diff --git a/streampipes-commons/pom.xml b/streampipes-commons/pom.xml
index 18cf8dc381..3667bc39aa 100644
--- a/streampipes-commons/pom.xml
+++ b/streampipes-commons/pom.xml
@@ -39,10 +39,20 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
         <extensions>
diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/resources/Resources.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/resources/Resources.java
new file mode 100644
index 0000000000..32c0bdd2f7
--- /dev/null
+++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/resources/Resources.java
@@ -0,0 +1,37 @@
+/*
+ * 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.commons.resources;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+public class Resources {
+
+  public static String asString(String resourceName,
+                                Charset charset) throws IOException {
+    return IOUtils.resourceToString(resourceName, charset, ClassLoader.getSystemClassLoader());
+  }
+
+  public static URL asUrl(String resourceName) throws IOException {
+    return IOUtils.resourceToURL(resourceName, ClassLoader.getSystemClassLoader());
+  }
+}
diff --git a/streampipes-config/pom.xml b/streampipes-config/pom.xml
index 1c57e371d5..6f70e62e59 100644
--- a/streampipes-config/pom.xml
+++ b/streampipes-config/pom.xml
@@ -49,12 +49,6 @@
             <artifactId>streampipes-service-discovery</artifactId>
             <version>0.93.0-SNAPSHOT</version>
         </dependency>
-
-        <!-- External dependencies -->
-        <dependency>
-            <groupId>com.google.code.findbugs</groupId>
-            <artifactId>jsr305</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/SelectClauseParams.java b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/SelectClauseParams.java
index 6861b4915e..fe7f8d0f65 100644
--- a/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/SelectClauseParams.java
+++ b/streampipes-data-explorer/src/main/java/org/apache/streampipes/dataexplorer/param/model/SelectClauseParams.java
@@ -22,8 +22,6 @@ package org.apache.streampipes.dataexplorer.param.model;
 import org.apache.streampipes.dataexplorer.api.IQueryStatement;
 import org.apache.streampipes.dataexplorer.querybuilder.IDataLakeQueryBuilder;
 
-import javax.annotation.Nullable;
-
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -56,8 +54,8 @@ public class SelectClauseParams implements IQueryStatement {
     }
   }
 
-  public static SelectClauseParams from(@Nullable String columns,
-                                        @Nullable String aggregationFunction) {
+  public static SelectClauseParams from(String columns,
+                                        String aggregationFunction) {
     return new SelectClauseParams(columns, aggregationFunction);
   }
 
diff --git a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java
index 2bfb9a6d0d..3ce1807a3d 100644
--- a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java
+++ b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/locales/LabelGenerator.java
@@ -34,6 +34,8 @@ import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.Properties;
 
 import static org.apache.streampipes.extensions.management.util.LocalesUtil.makePath;
@@ -126,7 +128,7 @@ public class LabelGenerator {
 
   private Properties makeProperties() throws IOException {
     Properties props = new Properties();
-    props.load(loadResource());
+    props.load(new InputStreamReader(loadResource(), StandardCharsets.UTF_8));
 
     return props;
   }
diff --git a/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml b/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
index da6eef37a3..5d3435e600 100644
--- a/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
+++ b/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
@@ -125,6 +125,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
index f4e9e31b26..3a057237cc 100644
--- a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
@@ -81,6 +81,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/streampipes-extensions/streampipes-pipeline-elements-all-jvm/pom.xml b/streampipes-extensions/streampipes-pipeline-elements-all-jvm/pom.xml
index be12e3320f..66f0d7d74a 100644
--- a/streampipes-extensions/streampipes-pipeline-elements-all-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-pipeline-elements-all-jvm/pom.xml
@@ -124,6 +124,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
diff --git a/streampipes-extensions/streampipes-processors-change-detection-jvm/pom.xml b/streampipes-extensions/streampipes-processors-change-detection-jvm/pom.xml
index 78f5c30b64..b68156ba72 100644
--- a/streampipes-extensions/streampipes-processors-change-detection-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-change-detection-jvm/pom.xml
@@ -46,6 +46,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml b/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
index 9cc12b1830..40fc564aae 100644
--- a/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
@@ -52,6 +52,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-filters-jvm/pom.xml b/streampipes-extensions/streampipes-processors-filters-jvm/pom.xml
index b5b3fa757e..98bfabefdb 100644
--- a/streampipes-extensions/streampipes-processors-filters-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-filters-jvm/pom.xml
@@ -50,6 +50,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-filters-siddhi/pom.xml b/streampipes-extensions/streampipes-processors-filters-siddhi/pom.xml
index babcc03d54..aa2fce447d 100644
--- a/streampipes-extensions/streampipes-processors-filters-siddhi/pom.xml
+++ b/streampipes-extensions/streampipes-processors-filters-siddhi/pom.xml
@@ -76,6 +76,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-geo-jvm/pom.xml b/streampipes-extensions/streampipes-processors-geo-jvm/pom.xml
index 045b2f6ef7..bf61f86db4 100644
--- a/streampipes-extensions/streampipes-processors-geo-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-geo-jvm/pom.xml
@@ -78,6 +78,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-image-processing-jvm/pom.xml b/streampipes-extensions/streampipes-processors-image-processing-jvm/pom.xml
index 24ff6c3acc..b80cfcf744 100644
--- a/streampipes-extensions/streampipes-processors-image-processing-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-image-processing-jvm/pom.xml
@@ -53,6 +53,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-processors-text-mining-jvm/pom.xml b/streampipes-extensions/streampipes-processors-text-mining-jvm/pom.xml
index 0c78c95485..2d5fbc396f 100644
--- a/streampipes-extensions/streampipes-processors-text-mining-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-text-mining-jvm/pom.xml
@@ -56,6 +56,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
index e0b7afbc7c..4980a3701d 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
@@ -120,6 +120,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
index 714f9e9385..157333404c 100644
--- a/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
@@ -136,6 +136,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-sinks-internal-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-internal-jvm/pom.xml
index ade1a6c4b4..d10a3cd7fa 100644
--- a/streampipes-extensions/streampipes-sinks-internal-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-internal-jvm/pom.xml
@@ -87,6 +87,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-sinks-notifications-jvm/pom.xml b/streampipes-extensions/streampipes-sinks-notifications-jvm/pom.xml
index b06eba5917..b51a074695 100644
--- a/streampipes-extensions/streampipes-sinks-notifications-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-notifications-jvm/pom.xml
@@ -64,6 +64,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-extensions/streampipes-sources-watertank-simulator/pom.xml b/streampipes-extensions/streampipes-sources-watertank-simulator/pom.xml
index f4777ce922..a38c31c109 100644
--- a/streampipes-extensions/streampipes-sources-watertank-simulator/pom.xml
+++ b/streampipes-extensions/streampipes-sources-watertank-simulator/pom.xml
@@ -111,6 +111,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
         <finalName>streampipes-sources-watertank-simulator</finalName>
diff --git a/streampipes-mail/src/main/java/org/apache/streampipes/mail/utils/MailUtils.java b/streampipes-mail/src/main/java/org/apache/streampipes/mail/utils/MailUtils.java
index d82066f1bb..317f534966 100644
--- a/streampipes-mail/src/main/java/org/apache/streampipes/mail/utils/MailUtils.java
+++ b/streampipes-mail/src/main/java/org/apache/streampipes/mail/utils/MailUtils.java
@@ -17,13 +17,12 @@
  */
 package org.apache.streampipes.mail.utils;
 
+import org.apache.streampipes.commons.resources.Resources;
 import org.apache.streampipes.config.backend.BackendConfig;
 import org.apache.streampipes.config.backend.model.GeneralConfig;
 
-import com.google.common.base.Charsets;
-import com.google.common.io.Resources;
-
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 public class MailUtils {
 
@@ -38,6 +37,6 @@ public class MailUtils {
   }
 
   public static String readResourceFileToString(String filename) throws IOException {
-    return Resources.toString(Resources.getResource(filename), Charsets.UTF_8);
+    return Resources.asString(filename, StandardCharsets.UTF_8);
   }
 }
diff --git a/streampipes-measurement-units/pom.xml b/streampipes-measurement-units/pom.xml
index 839f5d6197..896bf4cabc 100644
--- a/streampipes-measurement-units/pom.xml
+++ b/streampipes-measurement-units/pom.xml
@@ -16,7 +16,8 @@
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.streampipes</groupId>
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/UnitFactory.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/UnitFactory.java
index 495da29128..d9fdf6b75d 100644
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/UnitFactory.java
+++ b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/UnitFactory.java
@@ -13,7 +13,6 @@ import org.eclipse.rdf4j.model.impl.LinkedHashModel;
 import org.eclipse.rdf4j.model.impl.ValueFactoryImpl;
 import org.eclipse.rdf4j.model.vocabulary.RDF;
 import org.eclipse.rdf4j.model.vocabulary.RDFS;
-import org.eclipse.rdf4j.model.vocabulary.XMLSchema;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -90,8 +89,6 @@ public class UnitFactory {
 							unit.setType(new URI(typeURI.stringValue()));
 						}
 					}
-				} else {
-					// System.out.println("Ignoring: " + statement);
 				}
 			}
 			unit.setMultiplier(multiplier);
@@ -102,27 +99,6 @@ public class UnitFactory {
 		return unit;
 	}
 
-	public List<Unit> findUnits(String symbol) {
-		if (symbol == null) throw new IllegalArgumentException("The symbol cannot be null");
-
-		ValueFactory f = ValueFactoryImpl.getInstance();
-		Model statements = repos.filter(null, QUDT.ABBREVIATION, f.createLiteral(symbol, XMLSchema.STRING));
-		if (statements.isEmpty()) return Collections.emptyList();
-		List<Unit> foundUnits = new ArrayList<>();
-		for (Statement statement : statements) {
-			Object type = statement.getSubject();
-			try {
-				if (type instanceof org.eclipse.rdf4j.model.URI) {
-					org.eclipse.rdf4j.model.URI typeURI = (org.eclipse.rdf4j.model.URI)type;
-					foundUnits.add(getUnit(typeURI.toString()));
-				}
-			} catch (Exception exception) {
-				// ignore
-			}
-		}
-		return foundUnits;
-	}
-
 	public List<String> getURIs(String type) {
 		URI uri;
 		try {
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/AreaUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/AreaUnit.java
deleted file mode 100644
index 118d47117e..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/AreaUnit.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class AreaUnit {
-
-	public static Unit SQUARE_METER = UnitFactory
-					.getInstance()
-					.getUnit("http://qudt.org/vocab/unit#SquareMeter");
-
-	public static Unit SQUARE_ANGSTROM = UnitFactory
-					.getInstance()
-					.getUnit("http://www.openphacts.org/units/SquareAngstrom");
-
-	private AreaUnit() {}
-
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/ConcentrationUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/ConcentrationUnit.java
deleted file mode 100644
index 0c526b0cfe..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/ConcentrationUnit.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class ConcentrationUnit {
-
-	public static Unit MOLE_PER_CUBIC_METER = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#MolePerCubicMeter");
-
-	public static Unit MOLAR = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Molar");
-	public static Unit MILLIMOLAR = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Millimolar");
-	public static Unit NANOMOLAR = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Nanomolar");
-	public static Unit MICROMOLAR = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Micromolar");
-
-	public static Unit GRAM_PER_LITER = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/GramPerLiter");
-	public static Unit MICROGRAM_PER_MILLILITER = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/MicrogramPerMilliliter");
-	public static Unit PICOGRAM_PER_MILLILITER = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/PicogramPerMilliliter");
-
-	private ConcentrationUnit() {}
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/CountingUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/CountingUnit.java
deleted file mode 100644
index c4363431ab..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/CountingUnit.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class CountingUnit {
-
-	public static Unit PERCENT = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Percent");
-
-	private CountingUnit() {}
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/EnergyUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/EnergyUnit.java
deleted file mode 100644
index 5f6f671d01..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/EnergyUnit.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class EnergyUnit {
-
-	private EnergyUnit() {}
-
-	public static Unit EV = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#ElectronVolt");
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/LengthUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/LengthUnit.java
deleted file mode 100644
index 538bf26a85..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/LengthUnit.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class LengthUnit {
-
-  private LengthUnit() {
-  }
-
-  public static Unit NM = UnitFactory
-          .getInstance()
-          .getUnit("http://www.openphacts.org/units/Nanometer");
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/MassUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/MassUnit.java
deleted file mode 100644
index 7c0cd2d006..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/MassUnit.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class MassUnit {
-
-  public static Unit KILOGRAM = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Kilogram");
-  public static Unit GRAM = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Gram");
-  public static Unit MILLIGRAM = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Milligram");
-  public static Unit MICROGRAM = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Microgram");
-  public static Unit NANOGRAM = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Nanogram");
-  public static Unit PICOGRAM = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Picogram");
-  public static Unit FEMTOGRAM = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Femtogram");
-
-  private MassUnit() {
-  }
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/PressureOrStressUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/PressureOrStressUnit.java
deleted file mode 100644
index f6943caf98..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/PressureOrStressUnit.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class PressureOrStressUnit {
-    private PressureOrStressUnit() {}
-
-    public static Unit PASCAL = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Pascal");
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/TemperatureUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/TemperatureUnit.java
deleted file mode 100644
index 388d4f0190..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/TemperatureUnit.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class TemperatureUnit {
-
-	private TemperatureUnit() {}
-
-	public static Unit KELVIN = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Kelvin");
-	public static Unit CELSIUS = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#DegreeCelsius");
-	public static Unit FAHRENHEIT = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#DegreeFahrenheit");
-
-}
diff --git a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/VolumeUnit.java b/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/VolumeUnit.java
deleted file mode 100644
index 04156b085e..0000000000
--- a/streampipes-measurement-units/src/main/java/com/github/jqudt/onto/units/VolumeUnit.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright (C) 2012  Egon Willighagen <egonw@users.sf.net>
- *
- * License: new BSD
- */
-package com.github.jqudt.onto.units;
-
-import com.github.jqudt.Unit;
-import com.github.jqudt.onto.UnitFactory;
-
-public class VolumeUnit {
-
-	private VolumeUnit() {}
-
-	public static Unit LITER = UnitFactory.getInstance().getUnit("http://qudt.org/vocab/unit#Liter");
-	public static Unit MICROLITER = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Microliter");
-	public static Unit MILLILITER = UnitFactory.getInstance().getUnit("http://www.openphacts.org/units/Milliliter");
-
-}
diff --git a/streampipes-model/pom.xml b/streampipes-model/pom.xml
index bc4ff9f994..059059f41d 100644
--- a/streampipes-model/pom.xml
+++ b/streampipes-model/pom.xml
@@ -71,24 +71,16 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>commons-collections</groupId>
-            <artifactId>commons-collections</artifactId>
-        </dependency>
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
+          <scope>test</scope>
       </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
         </dependency>
-      <dependency>
-        <groupId>com.typesafe.akka</groupId>
-        <artifactId>akka-stream_2.11</artifactId>
-        <version>2.5.21</version>
-        <scope>compile</scope>
-      </dependency>
     </dependencies>
 
     <build>
@@ -136,6 +128,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventProperty.java b/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventProperty.java
index 0cdc8f15e9..9cc33eae6b 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventProperty.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventProperty.java
@@ -19,10 +19,10 @@
 package org.apache.streampipes.model.schema;
 
 import org.apache.streampipes.model.util.ElementIdGenerator;
+import org.apache.streampipes.model.util.ListUtils;
 
 import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import org.apache.commons.collections.ListUtils;
 
 import java.net.URI;
 import java.util.ArrayList;
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventSchema.java b/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventSchema.java
index d5e21a1046..89c978c1ab 100644
--- a/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventSchema.java
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/schema/EventSchema.java
@@ -19,8 +19,7 @@
 package org.apache.streampipes.model.schema;
 
 import org.apache.streampipes.model.util.Cloner;
-
-import org.apache.commons.collections.ListUtils;
+import org.apache.streampipes.model.util.ListUtils;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/streampipes-model/src/main/java/org/apache/streampipes/model/util/ListUtils.java b/streampipes-model/src/main/java/org/apache/streampipes/model/util/ListUtils.java
new file mode 100644
index 0000000000..7e2a1b4c48
--- /dev/null
+++ b/streampipes-model/src/main/java/org/apache/streampipes/model/util/ListUtils.java
@@ -0,0 +1,49 @@
+/*
+ * 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.model.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Objects;
+
+public class ListUtils {
+
+  public static boolean isEqualList(final Collection<?> list1, final Collection<?> list2) {
+    if (list1 == list2) {
+      return true;
+    }
+    if (list1 == null || list2 == null || list1.size() != list2.size()) {
+      return false;
+    }
+
+    final Iterator<?> it1 = list1.iterator();
+    final Iterator<?> it2 = list2.iterator();
+
+    while (it1.hasNext() && it2.hasNext()) {
+      final Object obj1 = it1.next();
+      final Object obj2 = it2.next();
+
+      if (!Objects.equals(obj1, obj2)) {
+        return false;
+      }
+    }
+
+    return !(it1.hasNext() || it2.hasNext());
+  }
+}
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/DocumentationParser.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/DocumentationParser.java
index 9ee7c74915..01d1e2a27d 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/DocumentationParser.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/assets/DocumentationParser.java
@@ -17,11 +17,11 @@
  */
 package org.apache.streampipes.manager.assets;
 
-import com.google.common.base.Charsets;
 import org.apache.commons.io.FileUtils;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 public class DocumentationParser {
 
@@ -38,14 +38,14 @@ public class DocumentationParser {
     try {
       String fileContents = getFileContents();
       String newFileContents = new ImagePathReplacer(fileContents, appId).replaceContent();
-      FileUtils.writeStringToFile(file, newFileContents, Charsets.UTF_8);
+      FileUtils.writeStringToFile(file, newFileContents, StandardCharsets.UTF_8);
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
 
   private String getFileContents() throws IOException {
-    return FileUtils.readFileToString(file, Charsets.UTF_8);
+    return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
   }
 
 }
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemFetcher.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemFetcher.java
index 0c103e6990..0cfda6e2b7 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemFetcher.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemFetcher.java
@@ -27,7 +27,6 @@ import org.apache.http.client.fluent.Request;
 import org.apache.http.message.BasicHeader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.http.MediaType;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -51,7 +50,7 @@ public class EndpointItemFetcher {
   private List<ExtensionsServiceEndpointItem> getEndpointItems(ExtensionsServiceEndpoint e) {
     try {
       String result = Request.Get(e.getEndpointUrl())
-          .addHeader(new BasicHeader("Accept", MediaType.APPLICATION_JSON_VALUE))
+          .addHeader(new BasicHeader("Accept", "application/json"))
           .connectTimeout(1000)
           .execute()
           .returnContent()
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemParser.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemParser.java
index 24eab26891..88a3a22c6e 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemParser.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/endpoint/EndpointItemParser.java
@@ -23,7 +23,6 @@ import org.apache.streampipes.model.message.NotificationType;
 import org.apache.streampipes.model.message.Notifications;
 
 import org.apache.http.client.fluent.Request;
-import org.springframework.http.MediaType;
 
 import java.io.IOException;
 import java.net.URLDecoder;
@@ -47,7 +46,7 @@ public class EndpointItemParser {
   private String parseURIContent(String url) throws IOException {
     return Request
         .Get(url)
-        .addHeader("Accept", MediaType.APPLICATION_JSON_VALUE)
+        .addHeader("Accept", "application/json")
         .execute()
         .returnContent()
         .asString();
diff --git a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/pipeline/PipelineManager.java b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/pipeline/PipelineManager.java
index 3fcc77e464..c0f1c12a4a 100644
--- a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/pipeline/PipelineManager.java
+++ b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/pipeline/PipelineManager.java
@@ -29,8 +29,6 @@ import org.apache.streampipes.storage.api.IPermissionStorage;
 import org.apache.streampipes.storage.api.IPipelineStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
-import com.google.common.collect.Streams;
-
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -129,10 +127,10 @@ public class PipelineManager {
         .collect(Collectors.toList());
   }
 
-  private static Stream<NamedStreamPipesEntity> mergePipelineElement(Pipeline pipeline) {
-    return Streams.concat(pipeline.getStreams().stream(),
-        pipeline.getActions().stream(),
-        pipeline.getSepas().stream());
+  private static Stream<? extends NamedStreamPipesEntity> mergePipelineElement(Pipeline pipeline) {
+    return Stream.concat(
+        Stream.concat(pipeline.getStreams().stream(), pipeline.getSepas().stream()),
+        pipeline.getActions().stream());
   }
 
   private static void preparePipelineBasics(String username,
diff --git a/streampipes-sdk/pom.xml b/streampipes-sdk/pom.xml
index 93cf4fa669..5b4671c79d 100644
--- a/streampipes-sdk/pom.xml
+++ b/streampipes-sdk/pom.xml
@@ -34,6 +34,11 @@
             <artifactId>streampipes-config</artifactId>
             <version>0.93.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-commons</artifactId>
+            <version>0.93.0-SNAPSHOT</version>
+        </dependency>
         <dependency>
             <groupId>org.apache.streampipes</groupId>
             <artifactId>streampipes-extensions-api</artifactId>
@@ -51,10 +56,6 @@
         </dependency>
 
         <!-- External dependencies -->
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.github.drapostolos</groupId>
             <artifactId>type-parser</artifactId>
@@ -81,6 +82,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java
index 1a29aa0e48..378e5372a2 100644
--- a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java
+++ b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/helpers/Labels.java
@@ -18,13 +18,12 @@
 
 package org.apache.streampipes.sdk.helpers;
 
-import com.google.common.io.ByteSource;
-import com.google.common.io.Resources;
+import org.apache.streampipes.commons.resources.Resources;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
 import java.util.Properties;
 
@@ -117,14 +116,10 @@ public class Labels {
   }
 
   private static Properties loadProperties(String filename) throws IOException {
-    URL url = Resources.getResource(filename);
+    URL url = Resources.asUrl(filename);
     final Properties props = new Properties();
 
-    final ByteSource byteSource = Resources.asByteSource(url);
-    InputStream inputStream = null;
-
-    inputStream = byteSource.openBufferedStream();
-    props.load(inputStream);
+    props.load(url.openStream());
     return props;
   }
 
diff --git a/streampipes-service-base/pom.xml b/streampipes-service-base/pom.xml
index 496781231b..8da3f3f26e 100644
--- a/streampipes-service-base/pom.xml
+++ b/streampipes-service-base/pom.xml
@@ -121,10 +121,6 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-context-support</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.hibernate.validator</groupId>
-            <artifactId>hibernate-validator</artifactId>
-        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
index fb46f25465..214b21b9de 100644
--- a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
+++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
@@ -18,8 +18,8 @@
 
 package org.apache.streampipes.service.core;
 
-import org.apache.streampipes.rest.filter.TokenAuthenticationFilter;
 import org.apache.streampipes.service.base.security.UnauthorizedRequestEntryPoint;
+import org.apache.streampipes.service.core.filter.TokenAuthenticationFilter;
 import org.apache.streampipes.user.management.service.SpUserDetailsService;
 
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/streampipes-rest/src/main/java/org/apache/streampipes/rest/filter/TokenAuthenticationFilter.java b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/filter/TokenAuthenticationFilter.java
similarity index 98%
rename from streampipes-rest/src/main/java/org/apache/streampipes/rest/filter/TokenAuthenticationFilter.java
rename to streampipes-service-core/src/main/java/org/apache/streampipes/service/core/filter/TokenAuthenticationFilter.java
index fa4e64cac9..e389f4afbf 100644
--- a/streampipes-rest/src/main/java/org/apache/streampipes/rest/filter/TokenAuthenticationFilter.java
+++ b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/filter/TokenAuthenticationFilter.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.streampipes.rest.filter;
+package org.apache.streampipes.service.core.filter;
 
 import org.apache.streampipes.commons.constants.HttpConstants;
 import org.apache.streampipes.model.client.user.Principal;
diff --git a/streampipes-service-discovery-consul/pom.xml b/streampipes-service-discovery-consul/pom.xml
index d3a102fa56..f6e34c39c6 100644
--- a/streampipes-service-discovery-consul/pom.xml
+++ b/streampipes-service-discovery-consul/pom.xml
@@ -50,10 +50,6 @@
             <artifactId>consul-api</artifactId>
             <version>1.4.5</version>
         </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>fluent-hc</artifactId>
diff --git a/streampipes-storage-couchdb/pom.xml b/streampipes-storage-couchdb/pom.xml
index 44f478e5d6..963d0a25cc 100644
--- a/streampipes-storage-couchdb/pom.xml
+++ b/streampipes-storage-couchdb/pom.xml
@@ -51,14 +51,14 @@
         </dependency>
 
         <!-- External dependencies -->
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.lightcouch</groupId>
             <artifactId>lightcouch</artifactId>
diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ConnectionStorageImpl.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ConnectionStorageImpl.java
index 6402d4b30b..7f98b3746d 100644
--- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ConnectionStorageImpl.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/ConnectionStorageImpl.java
@@ -24,7 +24,6 @@ import org.apache.streampipes.storage.api.IPipelineElementConnectionStorage;
 import org.apache.streampipes.storage.couchdb.dao.AbstractDao;
 import org.apache.streampipes.storage.couchdb.utils.Utils;
 
-import com.google.common.net.UrlEscapers;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
@@ -67,8 +66,8 @@ public class ConnectionStorageImpl extends AbstractDao<Connection> implements
   }
 
   private String buildQuery(String from) {
-    String escapedPath = UrlEscapers.urlPathSegmentEscaper()
-        .escape("startkey=[\"" + from + "\"]&endkey=[\"" + from + "\", {}]&group=true");
+    String escapedPath = Utils
+        .escapePathSegment("startkey=[\"" + from + "\"]&endkey=[\"" + from + "\", {}]&group=true");
     return couchDbClientSupplier.get().getDBUri() + "_design/connection/_view/frequent?" + escapedPath;
   }
 
diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
index 0817e52299..c0f814b581 100644
--- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
@@ -26,7 +26,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.net.UrlEscapers;
 import org.apache.http.client.fluent.Content;
 import org.apache.http.client.fluent.Request;
 
@@ -52,8 +51,8 @@ public class GenericStorageImpl implements IGenericStorage {
 
   @Override
   public List<Map<String, Object>> findAll(String type) throws IOException {
-    String query = getDatabaseRoute() + "/_design/appDocType/_view/appDocType?" + UrlEscapers.urlPathSegmentEscaper()
-        .escape("startkey=[\"" + type + "\"]&endkey=[\"" + type + "\",{}]&include_docs=true");
+    String query = getDatabaseRoute() + "/_design/appDocType/_view/appDocType?" + Utils
+        .escapePathSegment("startkey=[\"" + type + "\"]&endkey=[\"" + type + "\",{}]&include_docs=true");
     Map<String, Object> queryResult = this.queryDocuments(query);
 
     List<Map<String, Object>> rows = (List<Map<String, Object>>) queryResult.get("rows");
diff --git a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
index ba4356f0f0..4ec1b20a2b 100644
--- a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
+++ b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/utils/Utils.java
@@ -22,6 +22,7 @@ import org.apache.streampipes.commons.environment.Environment;
 import org.apache.streampipes.commons.environment.Environments;
 import org.apache.streampipes.storage.couchdb.serializer.GsonSerializer;
 
+import com.google.common.net.UrlEscapers;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.HttpHeaders;
 import org.apache.http.client.fluent.Request;
@@ -35,6 +36,10 @@ public class Utils {
     return getCouchDbGsonClient("data-processor");
   }
 
+  public static String escapePathSegment(String urlSegment) {
+    return UrlEscapers.urlPathSegmentEscaper().escape(urlSegment);
+  }
+
   public static CouchDbClient getCouchDbDataStreamDescriptionClient() {
     return getCouchDbGsonClient("data-stream");
   }
diff --git a/streampipes-user-management/pom.xml b/streampipes-user-management/pom.xml
index 632959c08e..8d5592fb73 100644
--- a/streampipes-user-management/pom.xml
+++ b/streampipes-user-management/pom.xml
@@ -52,8 +52,8 @@
 
         <!-- External dependencies -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-oauth2-client</artifactId>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
         </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
diff --git a/streampipes-wrapper-distributed/pom.xml b/streampipes-wrapper-distributed/pom.xml
index 6ee0136918..1f08d7e34e 100644
--- a/streampipes-wrapper-distributed/pom.xml
+++ b/streampipes-wrapper-distributed/pom.xml
@@ -55,6 +55,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-wrapper-flink/pom.xml b/streampipes-wrapper-flink/pom.xml
index 0d6b63cd4b..e813ead056 100644
--- a/streampipes-wrapper-flink/pom.xml
+++ b/streampipes-wrapper-flink/pom.xml
@@ -121,6 +121,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-wrapper-kafka-streams/pom.xml b/streampipes-wrapper-kafka-streams/pom.xml
index 8ba6767a8d..e6d42cdbff 100644
--- a/streampipes-wrapper-kafka-streams/pom.xml
+++ b/streampipes-wrapper-kafka-streams/pom.xml
@@ -64,6 +64,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-wrapper-python/pom.xml b/streampipes-wrapper-python/pom.xml
index d9a4c294de..64fad8e3ce 100644
--- a/streampipes-wrapper-python/pom.xml
+++ b/streampipes-wrapper-python/pom.xml
@@ -29,6 +29,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-wrapper-siddhi/pom.xml b/streampipes-wrapper-siddhi/pom.xml
index 861a9ed42b..aea9d9fe71 100644
--- a/streampipes-wrapper-siddhi/pom.xml
+++ b/streampipes-wrapper-siddhi/pom.xml
@@ -70,6 +70,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/streampipes-wrapper/pom.xml b/streampipes-wrapper/pom.xml
index 7ab6eeb663..0f95aef5b2 100644
--- a/streampipes-wrapper/pom.xml
+++ b/streampipes-wrapper/pom.xml
@@ -63,6 +63,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
+                <configuration>
+                    <propertyExpansion>
+                		checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+                	</propertyExpansion>
+                </configuration>
             </plugin>
         </plugins>
     </build>
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 109b12e020..d9c730e528 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -88,7 +88,7 @@
         "@types/rx": "^4.1.2",
         "@types/showdown": "1.9.4",
         "@typescript-eslint/eslint-plugin": "5.57.1",
-        "@typescript-eslint/parser": "5.56.0",
+        "@typescript-eslint/parser": "5.59.11",
         "ajv-keywords": "^5.1.0",
         "assert": "^2.0.0",
         "compression-webpack-plugin": "^10.0.0",
@@ -7086,14 +7086,14 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz",
-      "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz",
+      "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "5.56.0",
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/typescript-estree": "5.56.0",
+        "@typescript-eslint/scope-manager": "5.59.11",
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/typescript-estree": "5.59.11",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -7113,13 +7113,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz",
-      "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz",
+      "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/visitor-keys": "5.56.0"
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/visitor-keys": "5.59.11"
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -7279,9 +7279,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz",
-      "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz",
+      "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -7292,13 +7292,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz",
-      "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz",
+      "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/visitor-keys": "5.56.0",
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/visitor-keys": "5.59.11",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -7441,12 +7441,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz",
-      "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz",
+      "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==",
       "dev": true,
       "dependencies": {
-        "@typescript-eslint/types": "5.56.0",
+        "@typescript-eslint/types": "5.59.11",
         "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
@@ -33084,25 +33084,25 @@
       }
     },
     "@typescript-eslint/parser": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.56.0.tgz",
-      "integrity": "sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz",
+      "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/scope-manager": "5.56.0",
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/typescript-estree": "5.56.0",
+        "@typescript-eslint/scope-manager": "5.59.11",
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/typescript-estree": "5.59.11",
         "debug": "^4.3.4"
       }
     },
     "@typescript-eslint/scope-manager": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz",
-      "integrity": "sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz",
+      "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/visitor-keys": "5.56.0"
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/visitor-keys": "5.59.11"
       }
     },
     "@typescript-eslint/type-utils": {
@@ -33193,19 +33193,19 @@
       }
     },
     "@typescript-eslint/types": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.56.0.tgz",
-      "integrity": "sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz",
+      "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==",
       "dev": true
     },
     "@typescript-eslint/typescript-estree": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz",
-      "integrity": "sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz",
+      "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.56.0",
-        "@typescript-eslint/visitor-keys": "5.56.0",
+        "@typescript-eslint/types": "5.59.11",
+        "@typescript-eslint/visitor-keys": "5.59.11",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -33289,12 +33289,12 @@
       }
     },
     "@typescript-eslint/visitor-keys": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz",
-      "integrity": "sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==",
+      "version": "5.59.11",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz",
+      "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==",
       "dev": true,
       "requires": {
-        "@typescript-eslint/types": "5.56.0",
+        "@typescript-eslint/types": "5.59.11",
         "eslint-visitor-keys": "^3.3.0"
       }
     },
diff --git a/ui/package.json b/ui/package.json
index 2969dd6d1c..66d18c604a 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -110,7 +110,7 @@
     "@types/rx": "^4.1.2",
     "@types/showdown": "1.9.4",
     "@typescript-eslint/eslint-plugin": "5.57.1",
-    "@typescript-eslint/parser": "5.56.0",
+    "@typescript-eslint/parser": "5.59.11",
     "ajv-keywords": "^5.1.0",
     "assert": "^2.0.0",
     "compression-webpack-plugin": "^10.0.0",


Test patch:
diff --git a/streampipes-commons/src/test/java/TestResources.java b/streampipes-commons/src/test/java/TestResources.java
new file mode 100644
index 0000000000..ec7174e336
--- /dev/null
+++ b/streampipes-commons/src/test/java/TestResources.java
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ *
+ */
+
+import org.apache.streampipes.commons.resources.Resources;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class TestResources {
+
+  @Test
+  public void testResourceLoader() throws IOException {
+    String filename = "test.txt";
+    String content = Resources.asString(filename, StandardCharsets.UTF_8);
+    assertEquals("HelloWorld", content.replaceAll("\\s+",""));
+  }
+}
diff --git a/streampipes-commons/src/test/resources/test.txt b/streampipes-commons/src/test/resources/test.txt
new file mode 100644
index 0000000000..3da1ec26e9
--- /dev/null
+++ b/streampipes-commons/src/test/resources/test.txt
@@ -0,0 +1,1 @@
+HelloWorld
diff --git a/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredCsvOutputWriter.java b/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredCsvOutputWriter.java
index 5b64b44218..f929f71655 100644
--- a/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredCsvOutputWriter.java
+++ b/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredCsvOutputWriter.java
@@ -20,11 +20,11 @@ package org.apache.streampipes.dataexplorer.query.writer;
 
 import org.apache.streampipes.dataexplorer.param.ProvidedRestQueryParams;
 
-import com.google.common.base.Charsets;
 import org.junit.Test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 
 import static org.junit.Assert.assertEquals;
@@ -46,7 +46,7 @@ public class TestConfiguredCsvOutputWriter extends TestConfiguredOutputWriter {
       }
 
       writer.afterLastItem(outputStream);
-      assertEquals(Expected, outputStream.toString(Charsets.UTF_8));
+      assertEquals(Expected, outputStream.toString(StandardCharsets.UTF_8));
     }
   }
 }
diff --git a/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredJsonOutputWriter.java b/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredJsonOutputWriter.java
index 2e0431cf7e..1acecffdac 100644
--- a/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredJsonOutputWriter.java
+++ b/streampipes-data-explorer/src/test/java/org/apache/streampipes/dataexplorer/query/writer/TestConfiguredJsonOutputWriter.java
@@ -20,11 +20,11 @@ package org.apache.streampipes.dataexplorer.query.writer;
 
 import org.apache.streampipes.dataexplorer.param.ProvidedRestQueryParams;
 
-import com.google.common.base.Charsets;
 import org.junit.Test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 
 import static org.junit.Assert.assertEquals;
@@ -47,7 +47,7 @@ public class TestConfiguredJsonOutputWriter extends TestConfiguredOutputWriter {
       }
 
       writer.afterLastItem(outputStream);
-      assertEquals(Expected, outputStream.toString(Charsets.UTF_8));
+      assertEquals(Expected, outputStream.toString(StandardCharsets.UTF_8));
     }
   }
 }
diff --git a/streampipes-integration-tests/pom.xml b/streampipes-integration-tests/pom.xml
index a4b05efbbb..f77c4e5b37 100644
--- a/streampipes-integration-tests/pom.xml
+++ b/streampipes-integration-tests/pom.xml
@@ -102,6 +102,11 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+        	<propertyExpansion>
+				checkstyle.config.base.path=${project.parent.basedir}/tools/maven
+            </propertyExpansion>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/utils/TestUrlEscapers.java b/streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/utils/TestUrlEscapers.java
new file mode 100644
index 0000000000..50926ed4f6
--- /dev/null
+++ b/streampipes-storage-couchdb/src/test/java/org/apache/streampipes/storage/couchdb/utils/TestUrlEscapers.java
@@ -0,0 +1,44 @@
+/*
+ * 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.storage.couchdb.utils;
+
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class TestUrlEscapers {
+
+  @Test
+  public void testUrlPathEscaper() {
+    String type = "typeDummy";
+    String test = "startkey=[\"" + type + "\"]&endkey=[\"" + type + "\",{}]&include_docs=true";
+    String escaped = Utils.escapePathSegment(test);
+    String expected = "startkey=%5B%22typeDummy%22%5D&endkey=%5B%22typeDummy%22,%7B%7D%5D&include_docs=true";
+    assertEquals(expected, escaped);
+  }
+
+  @Test
+  public void testUrlPathEscaper2() {
+    String from = "fromDummy";
+    String test = "startkey=[\"" + from + "\"]&endkey=[\"" + from + "\", {}]&group=true";
+    String escaped = Utils.escapePathSegment(test);
+    String expected2 = "startkey=%5B%22fromDummy%22%5D&endkey=%5B%22fromDummy%22,%20%7B%7D%5D&group=true";
+    assertEquals(expected2, escaped);
+  }
+}