diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfiguration.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfig.java
similarity index 85%
rename from metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfiguration.java
rename to metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfig.java
index 5729e6b..ea0844d 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfiguration.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaConfig.java
@@ -19,7 +19,7 @@
 package org.apache.tamaya.metamodel;
 
 import org.apache.tamaya.base.ServiceContext;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.ServiceContextManager;
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
@@ -40,19 +40,19 @@
 /**
  * Accessor singleton for accessing/loading meta-configuration.
  */
-public final class MetaConfiguration {
+public final class MetaConfig {
 
     private static final String CONFIG_RESOURCE = "tamaya-config.xml";
 
-    private static final Logger LOG = Logger.getLogger(MetaConfiguration.class.getName());
+    private static final Logger LOG = Logger.getLogger(MetaConfig.class.getName());
 
     /**
      * Singleton constructor.
      */
-    private MetaConfiguration(){}
+    private MetaConfig(){}
 
     /**
-     * Creates a new {@link Config} using {@link #createConfiguration(URL)}
+     * Creates a new {@link Config} using {@link #createConfig(URL)}
      * and applies it as default configuration using {@link ConfigProviderResolver#registerConfig(Config, ClassLoader)} .
      */
     public static void configure(ClassLoader classLoader){
@@ -65,14 +65,14 @@
     }
 
     /**
-     * Creates a new {@link Config} using {@link #createConfiguration(URL)}
+     * Creates a new {@link Config} using {@link #createConfig(URL)}
      * and applies it as default configuration using {@link ConfigProviderResolver#registerConfig(Config, ClassLoader)} .
      * @param metaConfig URL for loading the {@code tamaya-config.xml} meta-configuration.
      */
     public static void configure(URL metaConfig, ClassLoader classloader){
         try {
             // Let readers do their work
-            Config config = createConfiguration(metaConfig);
+            Config config = createConfig(metaConfig);
             ConfigProviderResolver.instance().registerConfig(config, classloader);
         }catch(Exception e){
             LOG.log(Level.SEVERE, "TAMAYA: Error loading configuration.", e);
@@ -94,12 +94,12 @@
                 }
             }
         }
-        return MetaConfiguration.class.getClassLoader().getResource(CONFIG_RESOURCE);
+        return MetaConfig.class.getClassLoader().getResource(CONFIG_RESOURCE);
     }
 
     /**
      * Performs initialization of a new configuration
-     * context to the {@link MetaConfigurationReader} instances found in the current
+     * context to the {@link MetaConfigReader} instances found in the current
      * {@link ServiceContext} and returns the corresponding builder
      * instance.
      * @param metaConfig URL for loading the {@code tamaya-config.xml} meta-configuration.
@@ -114,8 +114,8 @@
             document = DocumentBuilderFactory.newInstance()
                     .newDocumentBuilder().parse(configFile.openStream());
             ConfigBuilder builder = ConfigProviderResolver.instance().getBuilder();
-            for(MetaConfigurationReader reader: ServiceContextManager.getServiceContext().getServices(
-                    MetaConfigurationReader.class
+            for(MetaConfigReader reader: ServiceContextManager.getServiceContext().getServices(
+                    MetaConfigReader.class
             )){
                 LOG.fine("TAMAYA: Executing MetaConfig-Reader: " + reader.getClass().getName() + "...");
                 reader.read(document, builder);
@@ -128,12 +128,12 @@
 
     /**
      * Reads the meta-configuration and delegates initialization of the current configuration
-     * context to the {@link MetaConfigurationReader} instances found in the current
+     * context to the {@link MetaConfigReader} instances found in the current
      * {@link ServiceContext}.
      * @param metaConfig URL for loading the {@code tamaya-config.xml} meta-configuration.
      * @return the new configuration instance.
      */
-    public static Config createConfiguration(URL metaConfig){
+    public static Config createConfig(URL metaConfig){
         return createConfigBuilder(metaConfig).build();
     }
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/CombinationPolicyReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/CombinationPolicyReader.java
index 0291721..4b506af 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/CombinationPolicyReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/CombinationPolicyReader.java
@@ -21,7 +21,7 @@
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.ConfigValueCombinationPolicy;
 import org.apache.tamaya.base.TamayaConfigBuilder;
 import org.osgi.service.component.annotations.Component;
@@ -37,7 +37,7 @@
  * Metaconfiguration reader that reads the configuration combination policy to be used.
  */
 @Component
-public class CombinationPolicyReader implements MetaConfigurationReader{
+public class CombinationPolicyReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(CombinationPolicyReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceOrderingReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceOrderingReader.java
index 5eb3ad9..235b892 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceOrderingReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceOrderingReader.java
@@ -20,7 +20,7 @@
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.TamayaConfigBuilder;
 import org.osgi.service.component.annotations.Component;
 import org.w3c.dom.Document;
@@ -38,7 +38,7 @@
  */
 @Component
 @Priority(Integer.MAX_VALUE)
-public class ConfigSourceOrderingReader implements MetaConfigurationReader{
+public class ConfigSourceOrderingReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(ConfigSourceOrderingReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceReader.java
index fc10ce0..0ee7b7f 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConfigSourceReader.java
@@ -26,7 +26,7 @@
 import org.apache.tamaya.metamodel.ext.RefreshableConfigSourceProvider;
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.filter.Filter;
 import org.apache.tamaya.base.ServiceContext;
 import org.osgi.service.component.annotations.Component;
@@ -45,7 +45,7 @@
  * Metaconfiguration reader to read property sources and property source providers.
  */
 @Component
-public class ConfigSourceReader implements MetaConfigurationReader{
+public class ConfigSourceReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(ConfigSourceReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConverterReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConverterReader.java
index 77b85af..d2814fc 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConverterReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ConverterReader.java
@@ -20,7 +20,7 @@
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.osgi.service.component.annotations.Component;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -36,7 +36,7 @@
  * Metaconfiguration reader to read property sources and property source providers.
  */
 @Component
-public class ConverterReader implements MetaConfigurationReader{
+public class ConverterReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(ConverterReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLBasedConfigFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLBasedConfigFactory.java
index 52ed876..81af555 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLBasedConfigFactory.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/DSLBasedConfigFactory.java
@@ -22,7 +22,7 @@
 import org.apache.tamaya.base.configsource.ConfigSourceComparator;
 import org.apache.tamaya.base.filter.FilterComparator;
 import org.apache.tamaya.core.TamayaConfigProviderResolver;
-import org.apache.tamaya.metamodel.MetaConfiguration;
+import org.apache.tamaya.metamodel.MetaConfig;
 import org.osgi.service.component.annotations.Component;
 
 import javax.annotation.Priority;
@@ -30,9 +30,9 @@
 
 
 /**
- * ConfigFactory that uses {@link MetaConfiguration} to create new Config instances for
+ * ConfigFactory that uses {@link MetaConfig} to create new Config instances for
  * the Tamaya Configuration System. This class is not usable when an alternate
- * Configuration implementation is active. Instead use the methods in {@link MetaConfiguration}
+ * Configuration implementation is active. Instead use the methods in {@link MetaConfig}
  * to configure/setup your configuration system.
  */
 @Priority(1)
@@ -41,7 +41,7 @@
 
     @Override
     public Config createConfig(ClassLoader classLoader) {
-        MetaConfiguration.configure(classLoader);
+        MetaConfig.configure(classLoader);
         return new DefaultConfigBuilder()
                         .addDiscoveredConverters()
                         .addDiscoveredFilters()
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterOrderingReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterOrderingReader.java
index a9ed765..c59cbb9 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterOrderingReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterOrderingReader.java
@@ -20,7 +20,7 @@
 
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.TamayaConfigBuilder;
 import org.osgi.service.component.annotations.Component;
 import org.w3c.dom.Document;
@@ -38,7 +38,7 @@
  */
 @Component
 @Priority(Integer.MAX_VALUE)
-public class FilterOrderingReader implements MetaConfigurationReader{
+public class FilterOrderingReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(FilterOrderingReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterReader.java
index 041a22a..a997882 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/FilterReader.java
@@ -21,7 +21,7 @@
 import org.apache.tamaya.ConfigException;
 import org.apache.tamaya.metamodel.spi.ItemFactory;
 import org.apache.tamaya.metamodel.spi.ItemFactoryManager;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.base.filter.Filter;
 import org.apache.tamaya.base.TamayaConfigBuilder;
 import org.osgi.service.component.annotations.Component;
@@ -38,7 +38,7 @@
  * Metaconfiguration reader that reads the configuration filters to be used.
  */
 @Component
-public class FilterReader implements MetaConfigurationReader{
+public class FilterReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(FilterReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/MetaContextReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/MetaContextReader.java
index dc484e5..d5f1e71 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/MetaContextReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/MetaContextReader.java
@@ -19,7 +19,7 @@
 package org.apache.tamaya.metamodel.internal;
 
 import org.apache.tamaya.metamodel.MetaContext;
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.apache.tamaya.metamodel.spi.SimpleResolver;
 import org.apache.tamaya.base.ServiceContextManager;
 import org.osgi.service.component.annotations.Component;
@@ -41,7 +41,7 @@
  */
 @Priority(-1)
 @Component
-public class MetaContextReader implements MetaConfigurationReader {
+public class MetaContextReader implements MetaConfigReader {
 
     private static final Logger LOG = Logger.getLogger(MetaContextReader.class.getName());
 
diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigReader.java
similarity index 97%
rename from metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
rename to metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigReader.java
index 4cbb4fd..3f31d08 100644
--- a/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigurationReader.java
+++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/spi/MetaConfigReader.java
@@ -27,7 +27,7 @@
  * Reader that reads meta configuration from the meta configuration XML source.
  * This SPI allows to allow different aspects to be configured by different modules.
  */
-public interface MetaConfigurationReader {
+public interface MetaConfigReader {
 
     /**
      * Reads meta-configuration from the given document and configures the current
diff --git a/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader b/metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigReader
similarity index 100%
rename from metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader
rename to metamodel/src/main/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigReader
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/IntegrationTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/IntegrationTest.java
index ad974df..cda823d 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/IntegrationTest.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/ext/IntegrationTest.java
@@ -22,7 +22,7 @@
 import org.apache.tamaya.base.ConfigContextSupplier;
 import org.apache.tamaya.base.filter.Filter;
 import org.apache.tamaya.metamodel.CachedFilter;
-import org.apache.tamaya.metamodel.MetaConfiguration;
+import org.apache.tamaya.metamodel.MetaConfig;
 import org.apache.tamaya.metamodel.MetaContext;
 import org.junit.Test;
 
@@ -49,7 +49,7 @@
 
     @Test
     public void testEmptyConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/empty-config.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/empty-config.xml"));
         assertNotNull(config);
         assertTrue(!config.getPropertyNames().iterator().hasNext());
         assertTrue(!config.getConfigSources().iterator().hasNext());
@@ -62,7 +62,7 @@
 
     @Test
     public void testMetaContextConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/context-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/context-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         if(config instanceof ConfigContextSupplier) {
@@ -80,7 +80,7 @@
 
     @Test
     public void testDefaultConvertersConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/default-propertyconverters-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/default-propertyconverters-test.xml"));
         assertNotNull(config);
         assertFalse(config.getConfigSources().iterator().hasNext());
         assertFalse(config.getPropertyNames().iterator().hasNext());
@@ -93,7 +93,7 @@
 
     @Test
     public void testDefaultPropertySourcesConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/default-propertysources-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/default-propertysources-test.xml"));
         assertNotNull(config);
         assertTrue(config.getPropertyNames().iterator().hasNext());
         assertTrue(config.getConfigSources().iterator().hasNext());
@@ -106,7 +106,7 @@
 
     @Test
     public void testDefaultPropertyFiltersConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/default-propertyfilters-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/default-propertyfilters-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertFalse(config.getConfigSources().iterator().hasNext());
@@ -119,7 +119,7 @@
 
     @Test
     public void testPropertyFiltersConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertyfilters-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertyfilters-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertFalse(config.getConfigSources().iterator().hasNext());
@@ -134,7 +134,7 @@
 
     @Test
     public void testPropertyConvertersConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertyconverters-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertyconverters-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertFalse(config.getConfigSources().iterator().hasNext());
@@ -150,7 +150,7 @@
 
     @Test
     public void testPropertySourcesConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertysources-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertysources-test.xml"));
         assertNotNull(config);
         assertTrue(config.getPropertyNames().iterator().hasNext());
         assertTrue(config.getConfigSources().iterator().hasNext());
@@ -164,7 +164,7 @@
 
     @Test
     public void testPropertyFilterConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertyfilter-config-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertyfilter-config-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertFalse(config.getConfigSources().iterator().hasNext());
@@ -186,7 +186,7 @@
 
     @Test
     public void testPropertySourceConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertysource-config-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertysource-config-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertTrue(config.getConfigSources().iterator().hasNext());
@@ -211,7 +211,7 @@
 
     @Test
     public void testPropertyConverterConfig(){
-        Config config = MetaConfiguration.createConfiguration(getConfig("IntegrationTests/propertyconverter-config-test.xml"));
+        Config config = MetaConfig.createConfig(getConfig("IntegrationTests/propertyconverter-config-test.xml"));
         assertNotNull(config);
         assertFalse(config.getPropertyNames().iterator().hasNext());
         assertFalse(config.getConfigSources().iterator().hasNext());
diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/LoggingReader.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/LoggingReader.java
index 1018a10..3756c8e 100644
--- a/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/LoggingReader.java
+++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/internal/resolver/LoggingReader.java
@@ -18,7 +18,7 @@
  */
 package org.apache.tamaya.metamodel.internal.resolver;
 
-import org.apache.tamaya.metamodel.spi.MetaConfigurationReader;
+import org.apache.tamaya.metamodel.spi.MetaConfigReader;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -36,7 +36,7 @@
 /**
  * Created by atsticks on 01.05.17.
  */
-public class LoggingReader implements MetaConfigurationReader{
+public class LoggingReader implements MetaConfigReader {
 
     private static final JavaResolver resolver = new JavaResolver();
 
diff --git a/metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader b/metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigReader
similarity index 100%
rename from metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigurationReader
rename to metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.MetaConfigReader
