diff --git a/camel/pom.xml b/camel/pom.xml
index b303fee..1d2cf77 100644
--- a/camel/pom.xml
+++ b/camel/pom.xml
@@ -61,6 +61,10 @@
             <artifactId>java-hamcrest</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.tamaya</groupId>
diff --git a/camel/src/test/java/org/apache/tamaya/camel/TamayaPropertyResolverTest.java b/camel/src/test/java/org/apache/tamaya/camel/TamayaPropertyResolverTest.java
index 10ffa9b..ee7af5e 100644
--- a/camel/src/test/java/org/apache/tamaya/camel/TamayaPropertyResolverTest.java
+++ b/camel/src/test/java/org/apache/tamaya/camel/TamayaPropertyResolverTest.java
@@ -28,7 +28,7 @@
 
 import java.io.InputStream;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Tests for integration of Tamaya with Apache Camel using Java DSL and XML DSL.
@@ -49,7 +49,7 @@
         // test configuration is injected right...
         Greeter proxy = new ProxyBuilder(camelContext).endpoint("direct:hello").build(Greeter.class);
         String greetMessage = proxy.greet();
-        assertEquals("Good Bye from Apache Tamaya!", greetMessage);
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greetMessage);
     }
 
     @Test
@@ -66,7 +66,7 @@
         // test configuration is injected right...
         Greeter proxy = new ProxyBuilder(camelContext).endpoint("direct:hello").build(Greeter.class);
         String greetMessage = proxy.greet();
-        assertEquals("Good Bye from Apache Tamaya!", greetMessage);
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greetMessage);
     }
 
     @Test
@@ -85,7 +85,7 @@
         // test configuration is injected right...
         Greeter proxy = new ProxyBuilder(camelContext).endpoint("direct:hello").build(Greeter.class);
         String greetMessage = proxy.greet();
-        assertEquals("Good Bye from Apache Tamaya!", greetMessage);
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greetMessage);
     }
 
     @Test
@@ -103,14 +103,14 @@
         }
         camelContext.start();
         Greeter greeter = new ProxyBuilder(camelContext).endpoint("direct:hello1").build(Greeter.class);
-        assertEquals("Good Bye from Apache Tamaya!", greeter.greet());
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greeter.greet());
         greeter = new ProxyBuilder(camelContext).endpoint("direct:hello2").build(Greeter.class);
-        assertEquals("Good Bye from Apache Tamaya!", greeter.greet());
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greeter.greet());
         greeter = new ProxyBuilder(camelContext).endpoint("direct:hello3").build(Greeter.class);
-        assertEquals("Good Bye from Apache Tamaya!", greeter.greet());
+        assertThat("Good Bye from Apache Tamaya!").isEqualTo(greeter.greet());
     }
 
     public interface Greeter {
         String greet();
     }
-}
\ No newline at end of file
+}
diff --git a/configjsr/pom.xml b/configjsr/pom.xml
index fb52cc9..6345748 100644
--- a/configjsr/pom.xml
+++ b/configjsr/pom.xml
@@ -87,7 +87,6 @@
         <dependency>
             <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
-            <version>${assertj.version}</version>
         </dependency>
         <!-- Config API -->
         <dependency>
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigAdapterTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigAdapterTest.java
index c00949e..54e536d 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigAdapterTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigAdapterTest.java
@@ -24,7 +24,6 @@
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spisupport.propertysource.BuildablePropertySource;
-import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
 import javax.config.Config;
@@ -36,15 +35,15 @@
 import javax.config.spi.Converter;
 import java.util.*;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.*;
 
 public class JavaConfigAdapterTest {
     @Test
     public void toConfig() throws Exception {
         Configuration config = Configuration.current();
         Config mpConfig = JavaConfigAdapterFactory.toConfig(config);
-        assertNotNull(mpConfig);
-        assertEquals(config.getProperties().keySet(), mpConfig.getPropertyNames());
+        assertThat(mpConfig).isNotNull();
+        assertThat(config.getProperties().keySet()).isEqualTo(mpConfig.getPropertyNames());
     }
 
     @Test
@@ -55,7 +54,7 @@
 
         Config result = JavaConfigAdapterFactory.toConfig(tamayaConfiguration);
 
-        Assertions.assertThat(result).isNotNull()
+        assertThat(result).isNotNull()
                   .isInstanceOf(JavaConfigAdapter.class)
                   .isSameAs(config);
     }
@@ -64,8 +63,8 @@
     public void toConfiguration() throws Exception {
         Config mpConfig = ConfigProvider.getConfig();
         Configuration config = JavaConfigAdapterFactory.toConfiguration(mpConfig);
-        assertNotNull(config);
-        assertEquals(mpConfig.getPropertyNames(), config.getProperties().keySet());
+        assertThat(config).isNotNull();
+        assertThat(mpConfig.getPropertyNames()).isEqualTo(config.getProperties().keySet());
     }
 
     @Test
@@ -73,7 +72,7 @@
         Config config = new MyConfig();
         Configuration result = JavaConfigAdapterFactory.toConfiguration(config);
 
-        Assertions.assertThat(result).isNotNull()
+        assertThat(result).isNotNull()
                   .isInstanceOf(TamayaConfigurationAdapter.class);
     }
 
@@ -87,17 +86,17 @@
         List<PropertySource> tamayaSources = new ArrayList<>();
         tamayaSources.add(testPropertySource);
         List<ConfigSource> configSources = JavaConfigAdapterFactory.toConfigSources(tamayaSources);
-        assertNotNull(configSources);
-        assertEquals(tamayaSources.size(), configSources.size());
+        assertThat(configSources).isNotNull();
+        assertThat(tamayaSources.size()).isEqualTo(configSources.size());
         compare(testPropertySource, configSources.get(0));
     }
 
     private void compare(PropertySource tamayaSource, ConfigSource mpSource) {
-        assertEquals(mpSource.getName(),tamayaSource.getName());
-        assertEquals(mpSource.getOrdinal(), tamayaSource.getOrdinal());
-        assertEquals(mpSource.getProperties().keySet(), tamayaSource.getProperties().keySet());
+        assertThat(mpSource.getName()).isEqualTo(tamayaSource.getName());
+        assertThat(mpSource.getOrdinal()).isEqualTo(tamayaSource.getOrdinal());
+        assertThat(mpSource.getProperties().keySet()).isEqualTo(tamayaSource.getProperties().keySet());
         for(String key:mpSource.getPropertyNames()){
-            assertEquals(mpSource.getValue(key), tamayaSource.get(key).getValue());
+            assertThat(mpSource.getValue(key)).isEqualTo(tamayaSource.get(key).getValue());
         }
     }
 
@@ -111,8 +110,8 @@
         List<ConfigSource> configSources = new ArrayList<>();
         configSources.add(configSource);
         List<PropertySource> propertySources = JavaConfigAdapterFactory.toPropertySources(configSources);
-        assertNotNull(propertySources);
-        assertEquals(propertySources.size(), configSources.size());
+        assertThat(propertySources).isNotNull();
+        assertThat(propertySources.size()).isEqualTo(configSources.size());
         compare(propertySources.get(0), configSource);
     }
 
@@ -124,7 +123,7 @@
                 .withSimpleProperty("int0", "0")
                 .build();
         ConfigSource configSource = JavaConfigAdapterFactory.toConfigSource(tamayaSource);
-        assertNotNull(configSource);
+        assertThat(configSource).isNotNull();
         compare(tamayaSource, configSource);
     }
 
@@ -136,28 +135,28 @@
                 .withProperty("int0", "0")
                 .build();
         PropertySource tamayaSource = JavaConfigAdapterFactory.toPropertySource(configSource);
-        assertNotNull(configSource);
+        assertThat(configSource).isNotNull();
         compare(tamayaSource, configSource);
     }
 
     @Test
     public void toPropertyConverter() throws Exception {
         PropertyConverter<String> tamayaConverter = JavaConfigAdapterFactory.toPropertyConverter(new UppercaseConverter());
-        assertNotNull(tamayaConverter);
-        assertEquals("ABC", tamayaConverter.convert("aBC", null));
+        assertThat(tamayaConverter).isNotNull();
+        assertThat("ABC").isEqualTo(tamayaConverter.convert("aBC", null));
     }
 
     @Test
     public void toConverter() throws Exception {
         Converter<String> mpConverter = JavaConfigAdapterFactory.toConverter(new UppercasePropertyConverter());
-        assertNotNull(mpConverter);
-        assertEquals("ABC", mpConverter.convert("aBC"));
+        assertThat(mpConverter).isNotNull();
+        assertThat("ABC").isEqualTo(mpConverter.convert("aBC"));
     }
 
     @Test
     public void toConfigBuilder() throws Exception {
         ConfigBuilder builder = JavaConfigAdapterFactory.toConfigBuilder(ConfigurationProvider.getConfigurationBuilder());
-        assertNotNull(builder);
+        assertThat(builder).isNotNull();
     }
 
     @Test
@@ -165,9 +164,9 @@
         Map<String,PropertyValue> props = new HashMap<>();
         props.put("a", PropertyValue.of("a","b", "toStringMap"));
         Map<String, String> mpProps = JavaConfigAdapterFactory.toStringMap(props);
-        assertNotNull(mpProps);
-        assertEquals(props.keySet(), mpProps.keySet());
-        assertEquals(mpProps.get("a"), "b");
+        assertThat(mpProps).isNotNull();
+        assertThat(props.keySet()).isEqualTo(mpProps.keySet());
+        assertThat(mpProps.get("a")).isEqualTo("b");
     }
 
     @Test
@@ -175,10 +174,10 @@
         Map<String,String> props = new HashMap<>();
         props.put("a", "b");
         Map<String, PropertyValue> tamayaProps = JavaConfigAdapterFactory.toPropertyValueMap(props, "toPropertyValueMap");
-        assertNotNull(tamayaProps);
-        assertEquals(tamayaProps.keySet(), props.keySet());
-        assertEquals(tamayaProps.get("a").getValue(), "b");
-        assertEquals("toPropertyValueMap", tamayaProps.get("a").getSource());
+        assertThat(tamayaProps).isNotNull();
+        assertThat(tamayaProps.keySet()).isEqualTo(props.keySet());
+        assertThat(tamayaProps.get("a").getValue()).isEqualTo("b");
+        assertThat("toPropertyValueMap").isEqualTo(tamayaProps.get("a").getSource());
     }
 
     static class MyConfig implements Config {
@@ -260,4 +259,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigBuilderTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigBuilderTest.java
index 445102e..b25f977 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigBuilderTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigBuilderTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.tamaya.jsr382;
 
-import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
 import javax.config.Config;
@@ -31,7 +30,7 @@
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Created by atsticks on 24.03.17.
@@ -63,40 +62,40 @@
     @Test
     public void testBuildEmptyConfig(){
         ConfigBuilder builder = ConfigProviderResolver.instance().getBuilder();
-        assertNotNull(builder);
+        assertThat(builder).isNotNull();
         Config config = builder.build();
-        assertNotNull(config);
-        assertFalse(config.getPropertyNames().iterator().hasNext());
-        assertFalse(config.getConfigSources().iterator().hasNext());
+        assertThat(config).isNotNull();
+        assertThat(config.getPropertyNames().iterator().hasNext()).isFalse();
+        assertThat(config.getConfigSources().iterator().hasNext()).isFalse();
     }
 
     @Test
     public void testBuildConfig(){
         ConfigBuilder builder = ConfigProviderResolver.instance().getBuilder();
-        assertNotNull(builder);
+        assertThat(builder).isNotNull();
         builder.withSources(testSource);
         Config config = builder.build();
-        assertNotNull(config);
-        assertTrue(config.getPropertyNames().iterator().hasNext());
-        assertTrue(config.getConfigSources().iterator().hasNext());
-        assertNotNull(config.getValue("timestamp", String.class));
+        assertThat(config).isNotNull();
+        assertThat(config.getPropertyNames().iterator().hasNext()).isTrue();
+        assertThat(config.getConfigSources().iterator().hasNext()).isTrue();
+        assertThat(config.getValue("timestamp", String.class)).isNotNull();
         ConfigSource src = config.getConfigSources().iterator().next();
-        assertNotNull(src);
-        assertEquals(src, testSource);
+        assertThat(src).isNotNull();
+        assertThat(src).isEqualTo(testSource);
     }
 
     @Test
     public void testBuildDefaultConfig(){
         ConfigBuilder builder = ConfigProviderResolver.instance().getBuilder();
-        assertNotNull(builder);
+        assertThat(builder).isNotNull();
         builder.addDefaultSources();
         Config config = builder.build();
-        assertNotNull(config);
-        assertTrue(config.getPropertyNames().iterator().hasNext());
-        assertTrue(config.getConfigSources().iterator().hasNext());
-        assertNotNull(config.getValue("java.home", String.class));
+        assertThat(config).isNotNull();
+        assertThat(config.getPropertyNames().iterator().hasNext()).isTrue();
+        assertThat(config.getConfigSources().iterator().hasNext()).isTrue();
+        assertThat(config.getValue("java.home", String.class)).isNotNull();
         ConfigSource src = config.getConfigSources().iterator().next();
-        assertNotNull(src);
+        assertThat(src).isNotNull();
     }
 
     @Test
@@ -112,7 +111,7 @@
                                          .map(ConfigSource::getName)
                                          .collect(Collectors.toList());
 
-        Assertions.assertThat(name).hasSize(4)
+        assertThat(name).hasSize(4)
                   .containsExactlyInAnyOrder("paris",
                                              "SystemPropertySource",
                                              "environment-properties",
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderResolverTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderResolverTest.java
index 7c43bdc..5c8681c 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderResolverTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderResolverTest.java
@@ -25,7 +25,7 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.*;
 
 /**
  * Created by atsticks on 24.03.17.
@@ -34,39 +34,39 @@
 
     @Test
     public void testInstance(){
-        assertNotNull(ConfigProviderResolver.instance());
+        assertThat(ConfigProviderResolver.instance()).isNotNull();
     }
 
     @Test
     public void testGetBuilder(){
-        assertNotNull(ConfigProviderResolver.instance().getBuilder());
+        assertThat(ConfigProviderResolver.instance().getBuilder()).isNotNull();
     }
 
     @Test
     public void testGetConfig(){
-        assertNotNull(ConfigProviderResolver.instance().getConfig());
+        assertThat(ConfigProviderResolver.instance().getConfig()).isNotNull();
     }
 
     @Test
     public void testGetConfig_CL(){
-        assertNotNull(ConfigProviderResolver.instance().getConfig(ClassLoader.getSystemClassLoader()));
+        assertThat(ConfigProviderResolver.instance().getConfig(ClassLoader.getSystemClassLoader())).isNotNull();
     }
 
     @Test
     public void testRegisterAndReleaseConfig(){
         ClassLoader cl = new URLClassLoader(new URL[]{});
         Config emptyConfig = ConfigProviderResolver.instance().getBuilder().build();
-        assertNotNull(emptyConfig);
+        assertThat(emptyConfig).isNotNull();
         Config cfg = ConfigProviderResolver.instance().getConfig(cl);
-        assertNotNull(cfg);
+        assertThat(cfg).isNotNull();
         ConfigProviderResolver.instance().registerConfig(emptyConfig, cl);
         cfg = ConfigProviderResolver.instance().getConfig(cl);
-        assertNotNull(cfg);
-        assertEquals(cfg, emptyConfig);
+        assertThat(cfg).isNotNull();
+        assertThat(cfg).isEqualTo(emptyConfig);
         ConfigProviderResolver.instance().releaseConfig(emptyConfig);
         cfg = ConfigProviderResolver.instance().getConfig(cl);
-        assertNotNull(cfg);
-        assertNotSame(cfg, emptyConfig);
+        assertThat(cfg).isNotNull();
+        assertThat(cfg).isNotSameAs(emptyConfig);
     }
 
 }
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderTest.java
index c69af54..b2c9243 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigProviderTest.java
@@ -24,8 +24,7 @@
 import javax.config.Config;
 import javax.config.ConfigProvider;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Created by atsticks on 24.03.17.
@@ -35,9 +34,9 @@
     @Test
     public void testDefaultConfigAccess(){
         Config config = ConfigProvider.getConfig();
-        assertNotNull(config);
+        assertThat(config).isNotNull();
         Iterable<String> names = config.getPropertyNames();
-        assertNotNull(names);
+        assertThat(names).isNotNull();
         int count = 0;
         for(String name:names){
             count++;
@@ -47,20 +46,20 @@
         for(String s:ConfigProvider.getConfig().getPropertyNames()){
             cfgCount++;
         }
-        assertTrue(cfgCount <= count);
+        assertThat(cfgCount <= count).isTrue();
     }
 
     @Test
     public void testClassloaderAccess(){
         Config config = ConfigProvider.getConfig(Thread.currentThread().getContextClassLoader());
-        assertNotNull(config);
+        assertThat(config).isNotNull();
         Iterable<String> names = config.getPropertyNames();
-        assertNotNull(names);
+        assertThat(names).isNotNull();
         int count = 0;
         for(String name:names){
             count++;
         }
-        assertTrue(count>0);
+        assertThat(count > 0).isTrue();
     }
 
 }
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigSourceProviderTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigSourceProviderTest.java
index 3552a4a..6dffa6d 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigSourceProviderTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigSourceProviderTest.java
@@ -24,7 +24,7 @@
 
 import javax.config.spi.ConfigSource;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class JavaConfigConfigSourceProviderTest {
     @Test
@@ -35,11 +35,11 @@
                         .withSimpleProperty("a", "b").build())
                 .build();
         JavaConfigSourceProvider provider = new JavaConfigSourceProvider(prov);
-        assertNotNull(provider);
+        assertThat(provider).isNotNull();
         Iterable<ConfigSource> configSources = provider.getConfigSources(null);
-        assertNotNull(configSources);
-        assertTrue(configSources.iterator().hasNext());
-        assertEquals("b", configSources.iterator().next().getValue("a"));
+        assertThat(configSources).isNotNull();
+        assertThat(configSources.iterator().hasNext()).isTrue();
+        assertThat("b").isEqualTo(configSources.iterator().next().getValue("a"));
     }
 
-}
\ No newline at end of file
+}
diff --git a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigTest.java b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigTest.java
index 06685e1..3e0d7ae 100644
--- a/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigTest.java
+++ b/configjsr/src/test/java/org/apache/tamaya/jsr382/JavaConfigConfigTest.java
@@ -26,7 +26,7 @@
 import java.util.NoSuchElementException;
 import java.util.Optional;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.*;
 
 /**
  * Created by atsticks on 24.03.17.
@@ -41,7 +41,7 @@
         for (ConfigSource cs : sources) {
             count++;
         }
-        assertEquals(4, count);
+        assertThat(4).isEqualTo(count);
     }
 
     @Test
@@ -50,10 +50,10 @@
         int count = 0;
         for(String key:config.getPropertyNames()){
             Optional<String> val = config.getOptionalValue(key, String.class);
-            assertNotNull(val);
+            assertThat(val).isNotNull();
             val = config.getOptionalValue(key + System.currentTimeMillis(), String.class);
-            assertNotNull(val);
-            assertFalse(val.isPresent());
+            assertThat(val).isNotNull();
+            assertThat(val.isPresent()).isFalse();
         }
     }
 
@@ -63,7 +63,7 @@
         int count = 0;
         for(String key:config.getPropertyNames()){
             String val = config.getValue(key, String.class);
-            assertNotNull(val);
+            assertThat(val).isNotNull();
         }
     }
 
@@ -83,13 +83,13 @@
     public void testEmptySystemProperty(){
         System.setProperty("my.empty.property", "");
         Config config = ConfigProvider.getConfig();
-        assertEquals("", config.getValue("my.empty.property", String.class));
+        assertThat("").isEqualTo(config.getValue("my.empty.property", String.class));
     }
 
     @Test
     public void testEmptyConfigProperty(){
         Config config = ConfigProvider.getConfig();
-        assertEquals("", config.getValue("my.empty.property.in.config.file", String.class));
+        assertThat("").isEqualTo(config.getValue("my.empty.property.in.config.file", String.class));
     }
 
 }
diff --git a/documentation/pom.xml b/documentation/pom.xml
index 8ac628f..033b2c9 100644
--- a/documentation/pom.xml
+++ b/documentation/pom.xml
@@ -64,6 +64,11 @@
             <artifactId>java-hamcrest</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>${assertj.version}</version>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
diff --git a/documentation/src/test/java/org/apache/tamaya/doc/ConfigDocumenterTest.java b/documentation/src/test/java/org/apache/tamaya/doc/ConfigDocumenterTest.java
index 1979e74..1012699 100644
--- a/documentation/src/test/java/org/apache/tamaya/doc/ConfigDocumenterTest.java
+++ b/documentation/src/test/java/org/apache/tamaya/doc/ConfigDocumenterTest.java
@@ -22,7 +22,7 @@
 import org.apache.tamaya.doc.formats.TextDocFormat;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class ConfigDocumenterTest {
 
@@ -31,7 +31,7 @@
         ConfigDocumenter reader = new ConfigDocumenter();
         reader.readClasses(AnnotatedDocConfigBean.class);
         DocumentedConfiguration documentation = reader.getDocumentation();
-        assertNotNull(documentation);
+        assertThat(documentation).isNotNull();
         System.out.println(new TextDocFormat().apply(documentation));
     }
 
@@ -40,7 +40,7 @@
         ConfigDocumenter reader = new ConfigDocumenter();
         reader.readClasses(AnnotBasedStandaloneConfigDocumentation.class);
         DocumentedConfiguration documentation = reader.getDocumentation();
-        assertNotNull(documentation);
+        assertThat(documentation).isNotNull();
         System.out.println(new TextDocFormat().apply(documentation));
     }
 
@@ -49,7 +49,7 @@
         ConfigDocumenter reader = new ConfigDocumenter();
         reader.readPackages("org.apache.tamaya.doc");
         DocumentedConfiguration documentation = reader.getDocumentation();
-        assertNotNull(documentation);
+        assertThat(documentation).isNotNull();
         System.out.println(new TextDocFormat().apply(documentation));
     }
 
@@ -58,7 +58,7 @@
         ConfigDocumenter reader = new ConfigDocumenter();
         reader.readPackages("org.apache.tamaya.doc");
         DocumentedConfiguration documentation = reader.getDocumentation();
-        assertNotNull(documentation);
+        assertThat(documentation).isNotNull();
         System.out.println(new HtmlDocFormat().apply(documentation));
     }
-}
\ No newline at end of file
+}
diff --git a/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java b/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java
index 8bc7c88..d2a4238 100644
--- a/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java
+++ b/hjson/src/test/java/org/apache/tamaya/hjson/CommonHJSONTestCaseCollection.java
@@ -21,17 +21,12 @@
 import org.apache.tamaya.spi.PropertySource;
 import org.apache.tamaya.spi.PropertyValue;
 import org.apache.tamaya.spisupport.PropertySourceComparator;
-import org.hamcrest.CoreMatchers;
-import org.hamcrest.Matchers;
 import org.junit.Test;
 
 import java.io.IOException;
 import java.net.URL;
 
-import static org.hamcrest.CoreMatchers.*;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Class with a collection of common test cases each JSON processing
@@ -46,14 +41,14 @@
         URL configURL = CommonHJSONTestCaseCollection.class
              .getResource("/configs/valid/cyrillic.hjson");
 
-        assertThat(configURL, Matchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource propertySource = getPropertiesFrom(configURL);
 
-        assertThat(propertySource.get("name"), Matchers.notNullValue());
-        assertThat(propertySource.get("name").getValue(), equalTo("\u041e\u043b\u0438\u0432\u0435\u0440"));
-        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f"), Matchers.notNullValue());
-        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f").getValue(), Matchers.equalTo("Fischer"));
+        assertThat(propertySource.get("name")).isNotNull();
+        assertThat(propertySource.get("name").getValue()).isEqualTo("\u041e\u043b\u0438\u0432\u0435\u0440");
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f")).isNotNull();
+        assertThat(propertySource.get("\u0444\u0430\u043c\u0438\u043b\u0438\u044f").getValue()).isEqualTo("Fischer");
     }
 
     @Test
@@ -61,13 +56,13 @@
         URL configURL = CommonHJSONTestCaseCollection.class
                 .getResource("/configs/valid/kanji.hjson");
 
-        assertThat(configURL, Matchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource propertySource = getPropertiesFrom(configURL);
 
-        assertThat(propertySource.get("onamae"), Matchers.notNullValue());
+        assertThat(propertySource.get("onamae")).isNotNull();
         // 霊屋 = Tamaya
-        assertThat(propertySource.get("onamae").getValue(), equalTo("\u970a\u5c4b"));
+        assertThat(propertySource.get("onamae").getValue()).isEqualTo("\u970a\u5c4b");
     }
 
     @Test
@@ -75,24 +70,24 @@
         URL configURL = CommonHJSONTestCaseCollection.class
                 .getResource("/configs/valid/simple-nested-string-only-config-1.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
         System.out.println("simple-nested-string-only-config-1.json -> " + properties.getProperties().values());
 
-        assertTrue(properties.getProperties().keySet().size()>=5);
+        assertThat(properties.getProperties().keySet().size() >= 5).isTrue();
 
         PropertyValue keyB = properties.get("b");
         PropertyValue keyDO = properties.get("d.o");
         PropertyValue keyDP = properties.get("d.p");
 
-        assertThat(keyB, notNullValue());
-        assertThat(keyB.getValue(), equalTo("B"));
-        assertThat(keyDO, notNullValue());
-        assertThat(keyDO.getValue(), equalTo("O"));
-        assertThat(keyDP, Matchers.notNullValue());
-        assertThat(keyDP.getValue(), is("P"));
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
     }
 
     @Test
@@ -101,32 +96,32 @@
         URL configURL = CommonHJSONTestCaseCollection.class
                 .getResource("/configs/valid/simple-nested-string-only-config-2.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
-        assertTrue(properties.getProperties().keySet().size()>=4);
+        assertThat(properties.getProperties().keySet().size() >= 4).isTrue();
 
         PropertyValue keyA = properties.get("a");
         PropertyValue keyDO = properties.get("b.o");
         PropertyValue keyDP = properties.get("b.p");
         PropertyValue keyC = properties.get("c");
 
-        assertThat(keyA, notNullValue());
-        assertThat(keyA.getValue(), is("A"));
-        assertThat(keyC, notNullValue());
-        assertThat(keyC.getValue(), equalTo("C"));
-        assertThat(keyDO, notNullValue());
-        assertThat(keyDO.getValue(), equalTo("O"));
-        assertThat(keyDP, notNullValue());
-        assertThat(keyDP.getValue(), is("P"));
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
+        assertThat(keyDO).isNotNull();
+        assertThat(keyDO.getValue()).isEqualTo("O");
+        assertThat(keyDP).isNotNull();
+        assertThat(keyDP.getValue()).isEqualTo("P");
     }
 
     @Test
     public void canHandleIllegalJSONFileWhichContainsAnArray() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/with-array.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         getPropertiesFrom(configURL).getProperties();
     }
@@ -135,7 +130,7 @@
     public void canHandleIllegalJSONFileConsistingOfOneOpeningBracket() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/only-opening-bracket.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         getPropertiesFrom(configURL).getProperties();
     }
@@ -144,7 +139,7 @@
     public void canHandleIllegalJSONFileWhichIsEmpty() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/empty-file.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         getPropertiesFrom(configURL).getProperties();
     }
@@ -153,40 +148,40 @@
     public void priorityInConfigFileOverwriteExplicitlyGivenPriority() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/with-explicit-priority.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
-        assertThat(PropertySourceComparator.getOrdinal(properties), is(16784));
+        assertThat(PropertySourceComparator.getOrdinal(properties)).isEqualTo(16784);
     }
 
     @Test
     public void canReadFlatStringOnlyJSONConfigFile() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/simple-flat-string-only-config.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
-        assertEquals(3, properties.getProperties().size());
+        assertThat(3).isEqualTo(properties.getProperties().size());
 
         PropertyValue keyA = properties.get("a");
         PropertyValue keyB = properties.get("b");
         PropertyValue keyC = properties.get("c");
 
-        assertThat(keyA, notNullValue());
-        assertThat(keyA.getValue(), equalTo("A"));
-        assertThat(keyB, notNullValue());
-        assertThat(keyB.getValue(), is("B"));
-        assertThat(keyC, notNullValue());
-        assertThat(keyC.getValue(), is("C"));
+        assertThat(keyA).isNotNull();
+        assertThat(keyA.getValue()).isEqualTo("A");
+        assertThat(keyB).isNotNull();
+        assertThat(keyB.getValue()).isEqualTo("B");
+        assertThat(keyC).isNotNull();
+        assertThat(keyC.getValue()).isEqualTo("C");
     }
 
     @Test
     public void emptyJSONFileResultsInConfigException() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/invalid/empty-file.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
@@ -197,10 +192,10 @@
     public void canHandleEmptyJSONObject() throws Exception {
         URL configURL = CommonHJSONTestCaseCollection.class.getResource("/configs/valid/empty-object-config.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         PropertySource properties = getPropertiesFrom(configURL);
 
-        assertTrue(properties.getProperties().keySet().size()>=0);
+        assertThat(properties.getProperties().keySet().size() >= 0).isTrue();
     }
 }
diff --git a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
index 976c781..6258fc5 100644
--- a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
+++ b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatIT.java
@@ -24,8 +24,7 @@
 
 import java.util.List;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Integration tests for {@link HJSONFormat}.
@@ -43,6 +42,6 @@
                 break;
             }
         }
-        assertThat(format, notNullValue());
+        assertThat(format).isNotNull();
     }
 }
diff --git a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
index 2713b0f..f008aad 100644
--- a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
+++ b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONFormatTest.java
@@ -27,8 +27,7 @@
 import java.io.InputStream;
 import java.net.URL;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class HJSONFormatTest extends CommonHJSONTestCaseCollection {
     private final HJSONFormat format = new HJSONFormat();
@@ -42,27 +41,27 @@
     public void aNonJSONFileBasedURLIsNotAccepted() throws Exception {
         URL url = new URL("file:///etc/service/conf.conf");
 
-        assertThat(format.accepts(url), is(false));
+        assertThat(format.accepts(url)).isFalse();
     }
 
     @Test
     public void aJSONFileBasedURLIsAccepted() throws Exception {
         URL url = new URL("file:///etc/service/conf.hjson");
 
-        assertThat(format.accepts(url), is(true));
+        assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aHTTPBasedURLIsNotAccepted() throws Exception {
         URL url = new URL("http://nowhere.somewhere/conf.hjson");
-        assertThat(format.accepts(url), is(true));
+        assertThat(format.accepts(url)).isTrue();
     }
 
     @Test
     public void aFTPBasedURLIsNotAccepted() throws Exception {
         URL url = new URL("ftp://nowhere.somewhere/a/b/c/d/conf.hjson");
 
-        assertThat(format.accepts(url), is(true));
+        assertThat(format.accepts(url)).isTrue();
     }
 
     @Override
@@ -72,4 +71,4 @@
             return new MappedConfigurationDataPropertySource(data);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
index 25c9f6d..52dacd3 100644
--- a/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
+++ b/hjson/src/test/java/org/apache/tamaya/hjson/HJSONPropertySourceTest.java
@@ -19,13 +19,11 @@
 package org.apache.tamaya.hjson;
 
 import org.apache.tamaya.spi.PropertySource;
-import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
 import java.net.URL;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class HJSONPropertySourceTest extends CommonHJSONTestCaseCollection {
 
@@ -33,17 +31,17 @@
     public void tamayaOrdinalKeywordIsNotPropagatedAsNormalProperty() throws Exception {
         URL configURL = HJSONPropertySourceTest.class.getResource("/configs/valid/with-explicit-priority.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         HJSONPropertySource source = new HJSONPropertySource(configURL, 4);
-        assertEquals(source.getOrdinal(), 16784);
+        assertThat(source.getOrdinal()).isEqualTo(16784);
     }
     
     @Test
     public void testAcceptJsonArrays() throws Exception {
         URL configURL = HJSONPropertySourceTest.class.getResource("/configs/invalid/array.hjson");
 
-        assertThat(configURL, CoreMatchers.notNullValue());
+        assertThat(configURL).isNotNull();
 
         new HJSONPropertySource(configURL);
     }
diff --git a/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java b/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java
index ab9c5d2..b5def8a 100644
--- a/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java
+++ b/hjson/src/test/java/org/apache/tamaya/hjson/PathBasedHJSONPropertySourceProviderTest.java
@@ -20,8 +20,7 @@
 
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Tests for {@link PathBasedHJSONPropertySourceProvider}.
@@ -33,8 +32,8 @@
         PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
                 "configs/valid/*.hjson"
         );
-        assertNotNull(provider.getPropertySources());
-        assertEquals(7, provider.getPropertySources().size());
+        assertThat(provider.getPropertySources()).isNotNull();
+        assertThat(7).isEqualTo(provider.getPropertySources().size());
     }
 
     @Test
@@ -42,8 +41,8 @@
         PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
                 "configs/valid/cyril*.hjson"
         );
-        assertNotNull(provider.getPropertySources());
-        assertEquals(1, provider.getPropertySources().size());
+        assertThat(provider.getPropertySources()).isNotNull();
+        assertThat(1).isEqualTo(provider.getPropertySources().size());
     }
 
     @Test
@@ -51,8 +50,8 @@
         PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
                 "configs/valid/simple-*.hjson"
         );
-        assertNotNull(provider.getPropertySources());
-        assertEquals(3, provider.getPropertySources().size());
+        assertThat(provider.getPropertySources()).isNotNull();
+        assertThat(3).isEqualTo(provider.getPropertySources().size());
     }
 
     @Test
@@ -60,7 +59,7 @@
         PathBasedHJSONPropertySourceProvider provider = new PathBasedHJSONPropertySourceProvider(
                 "configs/valid/foo*.hjson", "configs/valid/*.HJSON"
         );
-        assertNotNull(provider.getPropertySources());
-        assertEquals(0, provider.getPropertySources().size());
+        assertThat(provider.getPropertySources()).isNotNull();
+        assertThat(0).isEqualTo(provider.getPropertySources().size());
     }
-}
\ No newline at end of file
+}
diff --git a/jodatime/pom.xml b/jodatime/pom.xml
index 7ffbf23..3596425 100644
--- a/jodatime/pom.xml
+++ b/jodatime/pom.xml
@@ -76,6 +76,10 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>joda-time</groupId>
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
index 85e7b6f..8055e48 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterIT.java
@@ -26,9 +26,7 @@
 
 import java.util.List;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DateTimeConverterIT {
     @Test
@@ -46,8 +44,8 @@
             }
         }
 
-        assertThat("Converter not found via service context.", converter, notNullValue());
-        assertThat(converter, instanceOf(DateTimeConverter.class));
+        assertThat(converter).isNotNull();
+        assertThat(converter).isInstanceOf(DateTimeConverter.class);
     }
 
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
index 58b4587..f3c7a04 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeConverterTest.java
@@ -24,16 +24,8 @@
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.junit.Test;
-import org.mockito.Mockito;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
-import static org.mockito.Matchers.any;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DateTimeConverterTest {
     /*
@@ -72,8 +64,8 @@
         for (Object[] pair : inputResultPairs) {
             DateTime date = converter.convert((String)pair[0], context);
 
-            assertThat("Converter failed to convert input createValue " + pair[0], date, notNullValue());
-            assertThat(date.isEqual((DateTime)pair[1]), is(true));
+            assertThat(date).isNotNull();
+            assertThat(date.isEqual((DateTime) pair[1])).isTrue();
         }
     }
 
@@ -87,7 +79,7 @@
         for (String input : inputValues) {
             DateTime date = converter.convert(input, context);
 
-            assertThat(date, nullValue());
+            assertThat(date).isNull();
         }
     }
 
@@ -96,11 +88,11 @@
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(DateTime.class)).build();
         converter.convert("2007-08-31T16+00:00", context);
 
-        assertThat(context.getSupportedFormats(), hasSize(DateTimeConverter.PARSER_FORMATS.length));
+        assertThat(context.getSupportedFormats().size()).isEqualTo(DateTimeConverter.PARSER_FORMATS.length);
 
         for (String format : DateTimeConverter.PARSER_FORMATS) {
             String expected = format + " (" + DateTimeConverter.class.getSimpleName() + ")";
-            assertThat(context.getSupportedFormats(), hasItem(expected));
+            assertThat(context.getSupportedFormats().contains(expected)).isTrue();
         }
     }
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
index 0963408..9a35f78 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterIT.java
@@ -26,9 +26,7 @@
 
 import java.util.List;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DateTimeZoneConverterIT {
     @Test
@@ -45,8 +43,8 @@
             }
         }
 
-        assertThat("Converter not found via service context.", converter, notNullValue());
-        assertThat(converter, instanceOf(DateTimeZoneConverter.class));
+        assertThat(converter).isNotNull();
+        assertThat(converter).isInstanceOf(DateTimeZoneConverter.class);
     }
 
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
index 7bc3adb..1ec307d 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DateTimeZoneConverterTest.java
@@ -25,13 +25,7 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DateTimeZoneConverterTest {
     private DateTimeZoneConverter converter = new DateTimeZoneConverter();
@@ -59,8 +53,8 @@
         for (Object[] pair : inputResultPairs) {
             DateTimeZone zone = converter.convert((String) pair[0], context);
 
-            assertThat("Converter failed to convert input createValue " + pair[0], zone, notNullValue());
-            assertThat(zone, equalTo((DateTimeZone)pair[1]));
+            assertThat(zone).isNotNull();
+            assertThat(zone).isEqualTo((DateTimeZone)pair[1]);
         }
     }
 
@@ -78,7 +72,7 @@
         for (String input : inputValues) {
             DateTimeZone date = converter.convert(input, context);
 
-            assertThat(date, nullValue());
+            assertThat(date).isNull();
         }
     }
 
@@ -90,10 +84,10 @@
         ConversionContext context = new Builder(TypeLiteral.of(DateTimeZone.class)).build();
         DateTimeZone result = converter.convert("+01:00", context);
 
-        assertThat(result, notNullValue());
-        assertThat(context.getSupportedFormats(), hasSize(2));
-        assertThat(context.getSupportedFormats(), hasItem(firstFormat));
-        assertThat(context.getSupportedFormats(), hasItem(secondFormat));
+        assertThat(result).isNotNull();
+        assertThat(context.getSupportedFormats().size()).isEqualTo(2);
+        assertThat(context.getSupportedFormats().contains(firstFormat)).isTrue();
+        assertThat(context.getSupportedFormats().contains(secondFormat)).isTrue();
     }
 
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterIT.java
index 41288a8..c672b8b 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterIT.java
@@ -25,9 +25,7 @@
 
 import java.util.List;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DurationConverterIT {
     @Test
@@ -44,8 +42,8 @@
             }
         }
 
-        assertThat("Converter not found via service context.", converter, notNullValue());
-        assertThat(converter, instanceOf(DurationConverter.class));
+        assertThat(converter).isNotNull();
+        assertThat(converter).isInstanceOf(DurationConverter.class);
     }
 
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
index 7ddf6da..9b1c8a7 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/DurationConverterTest.java
@@ -26,12 +26,7 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class DurationConverterTest {
 
@@ -62,8 +57,8 @@
         for (Object[] pair : inputResultPairs) {
             Duration duration = converter.convert((String) pair[0], context);
 
-            assertThat("Converter failed to convert input createValue " + pair[0], duration, notNullValue());
-            assertThat(duration, equalTo((Duration) pair[1]));
+            assertThat(duration).isNotNull();
+            assertThat(duration).isEqualTo((Duration) pair[1]);
         }
     }
 
@@ -80,7 +75,7 @@
         for (String input : inputValues) {
             Duration duration = converter.convert(input, context);
 
-            assertThat(duration, nullValue());
+            assertThat(duration).isNull();
         }
     }
 
@@ -91,9 +86,9 @@
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Duration.class)).build();
         converter.convert("P0DT0H0M0S", context);
 
-        assertThat(context.getSupportedFormats(), hasSize(3));
-        assertThat(context.getSupportedFormats(), hasItem("PdDThHmMsS (" + name + ")"));
-        assertThat(context.getSupportedFormats(), hasItem("ddThh:mm:ss (" + name + ")"));
-        assertThat(context.getSupportedFormats(), hasItem("PTa.bS (" + name + ")"));
+        assertThat(context.getSupportedFormats().size()).isEqualTo(3);
+        assertThat(context.getSupportedFormats().contains("PdDThHmMsS (" + name + ")")).isTrue();
+        assertThat(context.getSupportedFormats().contains("ddThh:mm:ss (" + name + ")")).isTrue();
+        assertThat(context.getSupportedFormats().contains("PTa.bS (" + name + ")")).isTrue();
     }
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
index 85bc6ca..0f4a41d 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/FullStackIT.java
@@ -28,9 +28,7 @@
 
 import java.util.Locale;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.joda.time.format.ISODateTimeFormat.dateTime;
 
 public class FullStackIT {
@@ -43,10 +41,10 @@
         String dateTimeString = configuration.get("dateTimeValue");
         DateTime dateTimeValue = configuration.get("dateTimeValue", DateTime.class);
 
-        assertThat(dateTimeString, notNullValue());
-        assertThat(dateTimeString, equalTo("2010-08-08T14:00:15.5+10:00"));
-        assertThat(dateTimeValue, notNullValue());
-        assertThat(dateTimeValue.getMillis(), equalTo(dateTime().parseDateTime(dateTimeString).getMillis()));
+        assertThat(dateTimeString).isNotNull();
+        assertThat(dateTimeString).isEqualTo("2010-08-08T14:00:15.5+10:00");
+        assertThat(dateTimeValue).isNotNull();
+        assertThat(dateTimeValue.getMillis()).isEqualTo(dateTime().parseDateTime(dateTimeString).getMillis());
     }
 
     @Test
@@ -56,14 +54,14 @@
         String zoneAAsString = configuration.get("dateTimeZoneValueA");
         DateTimeZone zoneA = configuration.get("dateTimeZoneValueA", DateTimeZone.class);
 
-        assertThat(zoneAAsString, equalTo("UTC"));
-        assertThat(zoneA, equalTo(DateTimeZone.forID("UTC")));
+        assertThat(zoneAAsString).isEqualTo("UTC");
+        assertThat(zoneA).isEqualTo(DateTimeZone.forID("UTC"));
 
         String zoneBAsString = configuration.get("dateTimeZoneValueB");
         DateTimeZone zoneB = configuration.get("dateTimeZoneValueB", DateTimeZone.class);
 
-        assertThat(zoneBAsString, equalTo("+01:00"));
-        assertThat(zoneB, equalTo(DateTimeZone.forOffsetHours(1)));
+        assertThat(zoneBAsString).isEqualTo("+01:00");
+        assertThat(zoneB).isEqualTo(DateTimeZone.forOffsetHours(1));
     }
 
     @Test
@@ -78,7 +76,7 @@
         String periodAsString = configuration.get("periodValueA");
         Period period = configuration.get("periodValueA", Period.class);
 
-        assertThat(periodAsString, equalTo("P1Y1M1W1DT1H1M1S"));
-        assertThat(period, equalTo(referenceValue.toPeriod()));
+        assertThat(periodAsString).isEqualTo("P1Y1M1W1DT1H1M1S");
+        assertThat(period).isEqualTo(referenceValue.toPeriod());
     }
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
index f110754..b70bfcb 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterIT.java
@@ -25,9 +25,7 @@
 
 import java.util.List;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class PeriodConverterIT {
     @Test
@@ -44,8 +42,8 @@
             }
         }
 
-        assertThat("Converter not found via service context.", converter, notNullValue());
-        assertThat(converter, instanceOf(PeriodConverter.class));
+        assertThat(converter).isNotNull();
+        assertThat(converter).isInstanceOf(PeriodConverter.class);
     }
 
 }
diff --git a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
index 9ed7724..058584e 100644
--- a/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
+++ b/jodatime/src/test/java/org/apache/tamaya/jodatime/PeriodConverterTest.java
@@ -26,12 +26,7 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class PeriodConverterTest {
     /*
@@ -66,8 +61,8 @@
         for (Object[] pair : inputResultPairs) {
             Period period = converter.convert((String) pair[0], context);
 
-            assertThat("Converter failed to convert input createValue " + pair[0], period, notNullValue());
-            assertThat(period, equalTo((Period)pair[1]));
+            assertThat(period).isNotNull();
+            assertThat(period).isEqualTo((Period) pair[1]);
         }
     }
 
@@ -83,7 +78,7 @@
         for (String input : inputValues) {
             Period period = converter.convert(input, context);
 
-            assertThat(period, nullValue());
+            assertThat(period).isNull();
         }
     }
 
@@ -94,8 +89,8 @@
         ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Period.class)).build();
         converter.convert("P7Y0M0W0DT0H0M0S", context);
 
-        assertThat(context.getSupportedFormats(), hasSize(2));
-        assertThat(context.getSupportedFormats(), hasItem("PyYmMwWdDThHmMsS (" + name + ")"));
-        assertThat(context.getSupportedFormats(), hasItem("Pyyyy-mm-ddThh:mm:ss (" + name + ")"));
+        assertThat(context.getSupportedFormats().size()).isEqualTo(2);
+        assertThat(context.getSupportedFormats().contains("PyYmMwWdDThHmMsS (" + name + ")")).isTrue();
+        assertThat(context.getSupportedFormats().contains("Pyyyy-mm-ddThh:mm:ss (" + name + ")")).isTrue();
     }
 }
diff --git a/management/pom.xml b/management/pom.xml
index 81f64c9..f57233a 100644
--- a/management/pom.xml
+++ b/management/pom.xml
@@ -55,6 +55,10 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/management/src/test/java/org/apache/tamaya/management/internal/ManagedConfigTest.java b/management/src/test/java/org/apache/tamaya/management/internal/ManagedConfigTest.java
index 5cbef7f..a8f5562 100644
--- a/management/src/test/java/org/apache/tamaya/management/internal/ManagedConfigTest.java
+++ b/management/src/test/java/org/apache/tamaya/management/internal/ManagedConfigTest.java
@@ -28,7 +28,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.*;
 
 /**
  * Created by Anatole on 20.08.2015.
@@ -40,26 +40,26 @@
     @org.junit.Test
     public void testGetJsonConfigurationInfo() throws Exception {
         String info = bean.getJsonConfigurationInfo();
-        assertNotNull(info);
-        assertTrue(info.contains("java.version"));
+        assertThat(info).isNotNull();
+        assertThat(info.contains("java.version")).isTrue();
         System.out.println(bean.getJsonConfigurationInfo());
     }
 
     @org.junit.Test
     public void testGetXmlConfigurationInfo() throws Exception {
         String info = bean.getXmlConfigurationInfo();
-        assertNotNull(info);
-        assertTrue(info.contains("java.version"));
-        assertTrue(info.contains("<configuration>"));
+        assertThat(info).isNotNull();
+        assertThat(info.contains("java.version")).isTrue();
+        assertThat(info.contains("<configuration>")).isTrue();
         System.out.println(bean.getXmlConfigurationInfo());
     }
 
     @org.junit.Test
     public void testGetConfiguration() throws Exception {
         Map<String,String> config = bean.getConfiguration();
-        assertNotNull(config);
+        assertThat(config).isNotNull();
         for(Map.Entry<Object, Object> en:System.getProperties().entrySet()){
-            assertEquals(config.get(en.getKey()),en.getValue());
+            assertThat(config.get(en.getKey())).isEqualTo(en.getValue());
         }
     }
 
@@ -67,33 +67,33 @@
     public void testGetConfigurationArea() throws Exception {
         Map<String,String> cfg = bean.getSection("java", false);
         for(Map.Entry<String,String> en:cfg.entrySet()){
-            assertEquals(System.getProperty(en.getKey()), en.getValue());
+            assertThat(System.getProperty(en.getKey())).isEqualTo(en.getValue());
         }
     }
 
     @org.junit.Test
     public void testGetAreas() throws Exception {
         Set<String> sections = (bean.getSections());
-        assertNotNull(sections);
-        assertTrue(sections.contains("java"));
-        assertTrue(sections.contains("file"));
+        assertThat(sections).isNotNull();
+        assertThat(sections.contains("java")).isTrue();
+        assertThat(sections.contains("file")).isTrue();
     }
 
     @org.junit.Test
     public void testGetTransitiveAreas() throws Exception {
         Set<String> sections = (bean.getTransitiveSections());
         Set<String> sectionsNT = (bean.getSections());
-        assertNotNull(sections);
-        assertTrue(sections.contains("java"));
-        assertTrue(sections.contains("sun"));
-        assertTrue(sections.contains("sun.os"));
-        assertTrue(sectionsNT.size()<sections.size());
+        assertThat(sections).isNotNull();
+        assertThat(sections.contains("java")).isTrue();
+        assertThat(sections.contains("sun")).isTrue();
+        assertThat(sections.contains("sun.os")).isTrue();
+        assertThat(sectionsNT.size() < sections.size()).isTrue();
     }
 
     @org.junit.Test
     public void testIsAreaExisting() throws Exception {
-        assertTrue(bean.isAreaExisting("java"));
-        assertFalse(bean.isAreaExisting("sd.fldsfl.erlwsf"));
+        assertThat(bean.isAreaExisting("java")).isTrue();
+        assertThat(bean.isAreaExisting("sd.fldsfl.erlwsf")).isFalse();
     }
 
     @org.junit.Test
@@ -102,7 +102,7 @@
         ConfigManagementSupport.registerMBean();
         // Lookup createObject name
         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-        assertTrue(mbs.getMBeanInfo(on)!=null);
+        assertThat(mbs.getMBeanInfo(on) != null).isTrue();
     }
 
     @org.junit.Test
@@ -112,7 +112,7 @@
         ObjectName on2 = ConfigManagementSupport.registerMBean("SubContext2");
         // Lookup createObject name
         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-        assertTrue(mbs.getMBeanInfo(on1)!=null);
-        assertTrue(mbs.getMBeanInfo(on2)!=null);
+        assertThat(mbs.getMBeanInfo(on1) != null).isTrue();
+        assertThat(mbs.getMBeanInfo(on2) != null).isTrue();
     }
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/CLIArgumentsFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/CLIArgumentsFactoryTest.java
index bd73b11..0c144a8 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/CLIArgumentsFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/CLIArgumentsFactoryTest.java
@@ -24,8 +24,7 @@
 
 import java.util.Collections;
 
-import static org.junit.Assert.*;
-
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Created by atsticks on 18.04.17.
@@ -36,19 +35,19 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("CLI", f.getName());
+        assertThat("CLI").isEqualTo(f.getName());
     }
 
     @Test
     public void create() throws Exception {
         PropertySource ps = f.create(Collections.EMPTY_MAP);
-        assertNotNull(ps);
-        assertTrue(ps instanceof CLIPropertySource);
+        assertThat(ps).isNotNull();
+        assertThat(ps).isInstanceOf(CLIPropertySource.class);
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/EnvPropertiesFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/EnvPropertiesFactoryTest.java
index 5193df7..5ac5886 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/EnvPropertiesFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/EnvPropertiesFactoryTest.java
@@ -24,7 +24,7 @@
 
 import java.util.Collections;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -36,19 +36,19 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("env-properties", f.getName());
+        assertThat("env-properties").isEqualTo(f.getName());
     }
 
     @Test
     public void create() throws Exception {
         PropertySource ps = f.create(Collections.EMPTY_MAP);
-        assertNotNull(ps);
-        assertTrue(ps instanceof EnvironmentPropertySource);
+        assertThat(ps).isNotNull();
+        assertThat(ps).isInstanceOf(EnvironmentPropertySource.class);
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/FilePropertySourceFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/FilePropertySourceFactoryTest.java
index d91d279..1811372 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/FilePropertySourceFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/FilePropertySourceFactoryTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -37,7 +37,7 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("file", f.getName());
+        assertThat("file").isEqualTo(f.getName());
     }
 
     @Test
@@ -45,19 +45,19 @@
         Map<String,String> params = new HashMap<>();
         params.put("location", "src/test/resources/GLOBAL.properties");
         PropertySource ps = f.create(params);
-        assertNotNull(ps);
+        assertThat(ps).isNotNull();
     }
 
     @Test
     public void create_Error() throws Exception {
         Map<String,String> params = new HashMap<>();
         PropertySource ps = f.create(Collections.<String, String>emptyMap());
-        assertNull("Should throw error for missing location.", ps);
+        assertThat(ps).isNull();
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceFactoryTest.java
index bd6ee93..7608b95 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceFactoryTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -37,7 +37,7 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("resource", f.getName());
+        assertThat("resource").isEqualTo(f.getName());
     }
 
     @Test
@@ -45,19 +45,19 @@
         Map<String,String> params = new HashMap<>();
         params.put("location", "GLOBAL.properties");
         PropertySource ps = f.create(params);
-        assertNotNull(ps);
+        assertThat(ps).isNotNull();
     }
 
     @Test
     public void create_Error() throws Exception {
         Map<String,String> params = new HashMap<>();
         PropertySource ps = f.create(Collections.<String, String>emptyMap());
-        assertNull("Should return null for missing location.", ps);
+        assertThat(ps).isNull();
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactoryTest.java
index edc0d95..f1e7d70 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/ResourcePropertySourceProviderFactoryTest.java
@@ -26,7 +26,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -38,7 +38,7 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("resources", f.getName());
+        assertThat("resources").isEqualTo(f.getName());
     }
 
     @Test
@@ -46,19 +46,19 @@
         Map<String,String> params = new HashMap<>();
         params.put("location", "GLOBAL.properties");
         PropertySourceProvider prov = f.create(params);
-        assertNotNull(prov);
+        assertThat(prov).isNotNull();
     }
 
     @Test
     public void create_Error() throws Exception {
         Map<String,String> params = new HashMap<>();
         PropertySourceProvider prov = f.create(Collections.<String, String>emptyMap());
-        assertNull("Should return null for missing location.", prov);
+        assertThat(prov).isNull();
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySourceProvider.class, f.getType());
+        assertThat(PropertySourceProvider.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/SysPropertiesFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/SysPropertiesFactoryTest.java
index 5d21811..07f9d8d 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/SysPropertiesFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/SysPropertiesFactoryTest.java
@@ -24,7 +24,7 @@
 
 import java.util.Collections;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -36,19 +36,19 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("sys-properties", f.getName());
+        assertThat("sys-properties").isEqualTo(f.getName());
     }
 
     @Test
     public void create() throws Exception {
         PropertySource ps = f.create(Collections.EMPTY_MAP);
-        assertNotNull(ps);
-        assertTrue(ps instanceof SystemPropertySource);
+        assertThat(ps).isNotNull();
+        assertThat(ps).isInstanceOf(SystemPropertySource.class);
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactoryTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactoryTest.java
index f316417..3301ffe 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactoryTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/factories/URLPropertySourceFactoryTest.java
@@ -25,7 +25,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -37,7 +37,7 @@
 
     @Test
     public void getName() throws Exception {
-        assertEquals("url", f.getName());
+        assertThat("url").isEqualTo(f.getName());
     }
 
     @Test
@@ -45,19 +45,19 @@
         Map<String,String> params = new HashMap<>();
         params.put("location", "http://apache.org");
         PropertySource ps = f.create(params);
-        assertNotNull(ps);
+        assertThat(ps).isNotNull();
     }
 
     @Test
     public void create_Error() throws Exception {
         Map<String,String> params = new HashMap<>();
         PropertySource ps = f.create(Collections.<String, String>emptyMap());
-        assertNull("Should return null for missing location.", ps);
+        assertThat(ps).isNull();
     }
 
     @Test
     public void getType() throws Exception {
-        assertEquals(PropertySource.class, f.getType());
+        assertThat(PropertySource.class).isEqualTo(f.getType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/JavaResolverTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/JavaResolverTest.java
index 93ccd56..3292601 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/JavaResolverTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/JavaResolverTest.java
@@ -21,7 +21,7 @@
 import org.apache.tamaya.metamodel.MetaContext;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -35,43 +35,43 @@
 
     @Test
     public void getResolverId() throws Exception {
-        assertEquals(r.getResolverId(), "java");
+        assertThat(r.getResolverId()).isEqualTo("java");
     }
 
     @Test
     public void evaluateDirect() throws Exception {
-        assertEquals("createValue", r.evaluate("\"createValue\""));
-        assertEquals("1.1", r.evaluate("1.1"));
-        assertEquals("1", r.evaluate("1"));
+        assertThat("createValue").isEqualTo(r.evaluate("\"createValue\""));
+        assertThat("1.1").isEqualTo(r.evaluate("1.1"));
+        assertThat("1").isEqualTo(r.evaluate("1"));
     }
 
     @Test
     public void evaluateProperties() throws Exception {
-        assertEquals(System.getProperty("java.version"), r.evaluate("sys(\"java.version\")"));
+        assertThat(System.getProperty("java.version")).isEqualTo(r.evaluate("sys(\"java.version\")"));
         String key = System.getenv().keySet().iterator().next();
-        assertEquals(System.getenv(key), r.evaluate("env(\""+key+"\")"));
+        assertThat(System.getenv(key)).isEqualTo(r.evaluate("env(\""+key+"\")"));
         MetaContext.getInstance().setProperty("foo", "bar");
-        assertEquals("bar", r.evaluate("context(\"foo\")"));
+        assertThat("bar").isEqualTo(r.evaluate("context(\"foo\")"));
     }
 
     @Test
     public void evaluateExpression() throws Exception {
-        assertEquals("true", r.evaluate("env(\"STAGE\") == null"));
-        assertEquals("true", r.evaluate("sys(\"STAGE\") == null"));
+        assertThat("true").isEqualTo(r.evaluate("env(\"STAGE\") == null"));
+        assertThat("true").isEqualTo(r.evaluate("sys(\"STAGE\") == null"));
         System.setProperty("STAGE", "DEV2");
-        assertEquals("false", r.evaluate("sys(\"STAGE\") == null"));
+        assertThat("false").isEqualTo(r.evaluate("sys(\"STAGE\") == null"));
         System.setProperty("STAGE", "DEV2");
-        assertEquals("DEV2", r.evaluate("sys(\"STAGE\") == null?env(\"STAGE\"):sys(\"STAGE\")"));
-        assertEquals("DEV2", r.evaluate("if(sys(\"STAGE\") == null)return env(\"STAGE\"); else return sys(\"STAGE\");"));
+        assertThat("DEV2").isEqualTo(r.evaluate("sys(\"STAGE\") == null?env(\"STAGE\"):sys(\"STAGE\")"));
+        assertThat("DEV2").isEqualTo(r.evaluate("if(sys(\"STAGE\") == null)return env(\"STAGE\"); else return sys(\"STAGE\");"));
         System.getProperties().remove("STAGE");
-        assertEquals("foo", r.evaluate("if(sys(\"STAGE\") == null)return \"foo\"; else return sys(\"STAGE\");"));
+        assertThat("foo").isEqualTo(r.evaluate("if(sys(\"STAGE\") == null)return \"foo\"; else return sys(\"STAGE\");"));
     }
 
     @Test
     public void evaluateSimple() throws Exception {
-        assertEquals(TEST, r.evaluate("org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest.TEST"));
-        assertEquals(TEST, r.evaluate("new org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest().getTest1()"));
-        assertEquals(TEST, r.evaluate("org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest.getTest2()"));
+        assertThat(TEST).isEqualTo(r.evaluate("org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest.TEST"));
+        assertThat(TEST).isEqualTo(r.evaluate("new org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest().getTest1()"));
+        assertThat(TEST).isEqualTo(r.evaluate("org.apache.tamaya.metamodel.internal.resolver.JavaResolverTest.getTest2()"));
     }
 
     public String getTest1(){
@@ -82,4 +82,4 @@
         return TEST;
     }
 
-}
\ No newline at end of file
+}
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/PropertiesResolverTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/PropertiesResolverTest.java
index 988c224..b92cfb7 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/PropertiesResolverTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/PropertiesResolverTest.java
@@ -22,7 +22,7 @@
 
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
 
 
 /**
@@ -34,19 +34,19 @@
 
     @Test
     public void getResolverId() throws Exception {
-        assertEquals(r.getResolverId(), "properties");
+        assertThat(r.getResolverId()).isEqualTo("properties");
     }
 
     @Test
     public void evaluate() throws Exception {
         for(Map.Entry<String,String> en: System.getenv().entrySet()){
-            assertEquals(en.getValue(), r.evaluate("env:"+en.getKey()));
+            assertThat(en.getValue()).isEqualTo(r.evaluate("env:"+en.getKey()));
         }
-        assertEquals("foo", r.evaluate("env:fsdifoisfo?default=foo"));
+        assertThat("foo").isEqualTo(r.evaluate("env:fsdifoisfo?default=foo"));
         for(Map.Entry en: System.getProperties().entrySet()){
-            assertEquals(en.getValue(), r.evaluate("system:"+en.getKey()));
+            assertThat(en.getValue()).isEqualTo(r.evaluate("system:"+en.getKey()));
         }
-        assertEquals("foo", r.evaluate("system:fsdifoisfo?default=foo"));
+        assertThat("foo").isEqualTo(r.evaluate("system:fsdifoisfo?default=foo"));
     }
 
-}
\ No newline at end of file
+}
diff --git a/propertysources/pom.xml b/propertysources/pom.xml
index e9d64ac..7119f09 100644
--- a/propertysources/pom.xml
+++ b/propertysources/pom.xml
@@ -61,6 +61,10 @@
             <artifactId>tamaya-formats</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java b/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
index fecfff7..e407706 100644
--- a/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
+++ b/propertysources/src/test/java/org/apache/tamaya/propertysources/MetainfConfigPropertySourceProviderTest.java
@@ -20,7 +20,7 @@
 
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Created by atsticks on 30.10.16.
@@ -30,8 +30,8 @@
     @Test
     public void getPropertySources_Default() throws Exception {
         MetainfConfigPropertySourceProvider provider = new MetainfConfigPropertySourceProvider();
-        assertNotNull(provider.getPropertySources());
+        assertThat(provider.getPropertySources()).isNotNull();
         // TODO addNode test for containing property sources.
     }
 
-}
\ No newline at end of file
+}
diff --git a/server/pom.xml b/server/pom.xml
index 6a37194..c2ed26d 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -86,9 +86,8 @@
             <artifactId>junit</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>java-hamcrest</artifactId>
-            <scope>test</scope>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/server/src/test/java/org/apache/tamaya/server/VersionPropertiesTest.java b/server/src/test/java/org/apache/tamaya/server/VersionPropertiesTest.java
index 18bc0ba..1243223 100644
--- a/server/src/test/java/org/apache/tamaya/server/VersionPropertiesTest.java
+++ b/server/src/test/java/org/apache/tamaya/server/VersionPropertiesTest.java
@@ -18,16 +18,13 @@
  */
 package org.apache.tamaya.server;
 
-import org.hamcrest.Matchers;
 import org.junit.Test;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class VersionPropertiesTest {
 
@@ -38,9 +35,11 @@
         Properties properties = new Properties();
         properties.load(resource);
 
-        assertThat(VersionProperties.getVersion(), not(Matchers.isEmptyOrNullString()));
-        assertThat(VersionProperties.getVersion(), equalTo(properties.get("server.version")));
-        assertThat(VersionProperties.getProduct(), not(Matchers.isEmptyOrNullString()));
-        assertThat(VersionProperties.getProduct(), equalTo(properties.get("server.product")));
+        assertThat(VersionProperties.getVersion()).isNotNull();
+        assertThat(VersionProperties.getVersion()).isNotEqualTo("");
+        assertThat(VersionProperties.getVersion()).isEqualTo(properties.get("server.version"));
+        assertThat(VersionProperties.getProduct()).isNotNull();
+        assertThat(VersionProperties.getProduce()).isNotEqualTo("");
+        assertThat(VersionProperties.getProduct()).isEqualTo(properties.get("server.product"));
     }
 }
diff --git a/uom/pom.xml b/uom/pom.xml
index 8b29c85..42281da 100644
--- a/uom/pom.xml
+++ b/uom/pom.xml
@@ -61,6 +61,11 @@
         </dependency>
 
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>javax.measure</groupId>
             <artifactId>unit-api</artifactId>
             <version>${jsr363.version}</version>
diff --git a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
index 7852693..f09a0ea 100644
--- a/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
+++ b/uom/src/test/java/org/apache/tamaya/uom/UnitConverterTest.java
@@ -18,17 +18,15 @@
  */
 package org.apache.tamaya.uom;
 
+import javax.measure.Unit;
+
 import org.apache.tamaya.TypeLiteral;
 import org.apache.tamaya.spi.ConversionContext;
 import org.junit.Test;
 
 import tec.units.ri.unit.Units;
 
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.*;
-
-import javax.measure.Unit;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class UnitConverterTest {
 	private UnitConverter converter = new UnitConverter();
@@ -39,8 +37,8 @@
 		ConversionContext context = new ConversionContext.Builder(TypeLiteral.of(Unit.class)).build();
 		Unit<?> unit = converter.convert("m", context);
 
-		assertThat("Converter failed to convert input createValue " + unit, notNullValue());
-		assertEquals(unit, Units.METRE);
+		assertThat(unit).isNotNull();
+		assertThat(unit).isEqualTo(Units.METRE);
 	}
 
 }
diff --git a/usagetracker/pom.xml b/usagetracker/pom.xml
index c1d2d14..00afc0a 100644
--- a/usagetracker/pom.xml
+++ b/usagetracker/pom.xml
@@ -83,6 +83,10 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/usagetracker/src/test/java/org/apache/tamaya/model/ConfigUsageTest.java b/usagetracker/src/test/java/org/apache/tamaya/model/ConfigUsageTest.java
index d424ab7..5b9bb35 100644
--- a/usagetracker/src/test/java/org/apache/tamaya/model/ConfigUsageTest.java
+++ b/usagetracker/src/test/java/org/apache/tamaya/model/ConfigUsageTest.java
@@ -23,7 +23,7 @@
 import org.junit.Test;
 import test.model.TestConfigAccessor;
 
-import static org.junit.Assert.*;
+import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Created by Anatole on 09.08.2015.
@@ -36,8 +36,8 @@
         TestConfigAccessor.readConfiguration();
         Configuration config = Configuration.current();
         String info = ConfigUsage.getInstance().getInfo();
-        assertFalse(info.contains("java.version"));
-        assertNotNull(info);
+        assertThat(info.contains("java.version")).isFalse();
+        assertThat(info).isNotNull();
         config = TestConfigAccessor.readConfiguration();
         config.getProperties();
         TestConfigAccessor.readProperty(config, "java.locale");
@@ -46,8 +46,8 @@
         config.get("java.version");
         info = ConfigUsage.getInstance().getInfo();
         System.out.println(info);
-        assertTrue(info.contains("java.version"));
-        assertNotNull(info);
+        assertThat(info.contains("java.version")).isTrue();
+        assertThat(info).isNotNull();
         ConfigUsage.getInstance().enableUsageTracking(false);
     }
 
@@ -58,8 +58,8 @@
         TestConfigAccessor.readConfiguration();
         Configuration config = Configuration.current();
         String info = ConfigUsage.getInstance().getInfo();
-        assertNotNull(info);
-        assertFalse(info.contains("java.version"));
+        assertThat(info).isNotNull();
+        assertThat(info.contains("java.version")).isFalse();
         config = TestConfigAccessor.readConfiguration();
         config.getProperties();
         TestConfigAccessor.readProperty(config, "java.locale");
@@ -67,8 +67,8 @@
         TestConfigAccessor.readProperty(config, "java.version");
         config.get("java.version");
         info = ConfigUsage.getInstance().getInfo();
-        assertFalse(info.contains("java.version"));
-        assertNotNull(info);
+        assertThat(info.contains("java.version")).isFalse();
+        assertThat(info).isNotNull();
         ConfigUsage.getInstance().enableUsageTracking(false);
     }
 }
