diff --git a/pom.xml b/pom.xml
index a5e2ab1..ae8094e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
   <groupId>org.apache.archiva.redback.components.registry</groupId>
   <artifactId>spring-registry</artifactId>
   <version>2.5-SNAPSHOT</version>
-  <name>Redback Spring Registry Component</name>
+  <name>Redback Components :: Spring Registry Component</name>
   <packaging>pom</packaging>
 
   <properties>
@@ -45,6 +45,7 @@
     <module>spring-registry-api</module>
     <module>spring-registry-commons</module>
   </modules>
+
   <dependencyManagement>
     <dependencies>
       <dependency>
@@ -57,56 +58,34 @@
         <artifactId>spring-registry-commons</artifactId>
         <version>${project.version}</version>
       </dependency>
+
       <dependency>
         <groupId>commons-configuration</groupId>
         <artifactId>commons-configuration</artifactId>
-        <version>${commons-configuration.version}</version>
+        <version>${commons.configuration.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-text</artifactId>
+        <version>${commons.text.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <version>${commons.collections.3.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-beanutils</groupId>
+        <artifactId>commons-beanutils</artifactId>
+        <version>${commons.beanutils.version}</version>
       </dependency>
     </dependencies>
   </dependencyManagement>
   <dependencies>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.annotation</groupId>
-      <artifactId>jsr250-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-core</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-context-support</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-beans</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-test</artifactId>
-      <scope>compile</scope>
-    </dependency>
+
   </dependencies>
 
   <build>
@@ -121,6 +100,17 @@
         </plugin>
       </plugins>
     </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.8.0</version>
+        <configuration>
+          <source>${compiler.source}</source>
+          <target>${compiler.target}</target>
+        </configuration>
+      </plugin>
+    </plugins>
   </build>
 
   <reporting>
diff --git a/spring-registry-api/pom.xml b/spring-registry-api/pom.xml
index 1f6dbc4..60286fc 100644
--- a/spring-registry-api/pom.xml
+++ b/spring-registry-api/pom.xml
@@ -27,8 +27,9 @@
     <version>2.5-SNAPSHOT</version>
   </parent>
 
+  <groupId>org.apache.archiva.redback.components.registry</groupId>
   <artifactId>spring-registry-api</artifactId>
-  <name>Redback Spring Registry Api</name>
+  <name>Redback Components :: Spring Registry Api</name>
 
   <properties>
     <site.staging.base>${project.parent.basedir}/../site</site.staging.base>
@@ -39,10 +40,4 @@
     <url>${scmBrowseUrl};f=${project.artifactId}</url>
   </scm>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-  </dependencies>
 </project>
diff --git a/spring-registry-commons/pom.xml b/spring-registry-commons/pom.xml
index 32bb697..516d3d6 100644
--- a/spring-registry-commons/pom.xml
+++ b/spring-registry-commons/pom.xml
@@ -28,7 +28,7 @@
   </parent>
 
   <artifactId>spring-registry-commons</artifactId>
-  <name>Redback Spring Registry commons-configuration</name>
+  <name>Redback Components :: Spring Registry ACC</name>
   <properties>
     <site.staging.base>${project.parent.basedir}/../site</site.staging.base>
   </properties>
@@ -42,21 +42,13 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-interpolation</artifactId>
-      <version>1.14</version>
-    </dependency>
-    <dependency>
       <groupId>org.apache.archiva.redback.components.registry</groupId>
       <artifactId>spring-registry-api</artifactId>
     </dependency>
     <dependency>
       <groupId>commons-configuration</groupId>
       <artifactId>commons-configuration</artifactId>
+      <version>${commons.configuration.version}</version>
       <exclusions>
         <exclusion>
           <groupId>commons-beanutils</groupId>
@@ -85,20 +77,61 @@
         </exclusion>
       </exclusions>
     </dependency>
-    <dependency>
-      <groupId>commons-beanutils</groupId>
-      <artifactId>commons-beanutils</artifactId>
-      <version>1.7.0</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>3.2.1</version>
-    </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
     </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-core</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-beans</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-beanutils</groupId>
+      <artifactId>commons-beanutils</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.inject</groupId>
+      <artifactId>javax.inject</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-text</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-jcl</artifactId>
diff --git a/spring-registry-commons/src/main/java/org/apache/archiva/redback/components/registry/commons/CommonsConfigurationRegistry.java b/spring-registry-commons/src/main/java/org/apache/archiva/redback/components/registry/commons/CommonsConfigurationRegistry.java
index a93935a..f5c25b7 100644
--- a/spring-registry-commons/src/main/java/org/apache/archiva/redback/components/registry/commons/CommonsConfigurationRegistry.java
+++ b/spring-registry-commons/src/main/java/org/apache/archiva/redback/components/registry/commons/CommonsConfigurationRegistry.java
@@ -32,10 +32,10 @@
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.configuration.event.EventSource;
 import org.apache.commons.configuration.tree.DefaultExpressionEngine;
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.plexus.interpolation.InterpolationException;
-import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
-import org.codehaus.plexus.interpolation.StringSearchInterpolator;
+import org.apache.commons.lang3.StringUtils;
+
+import org.apache.commons.text.StringSubstitutor;
+import org.apache.commons.text.lookup.StringLookupFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -70,7 +70,7 @@
      */
     private Configuration configuration;
 
-    private Logger logger = LoggerFactory.getLogger( getClass() );
+    private Logger logger = LoggerFactory.getLogger( getClass( ) );
 
     private String propertyDelimiter = ".";
 
@@ -83,7 +83,7 @@
     private String properties;
 
 
-    public CommonsConfigurationRegistry()
+    public CommonsConfigurationRegistry( )
     {
         // default constructor
         logger.debug( "empty constructor" );
@@ -99,22 +99,22 @@
         this.configuration = configuration;
     }
 
-    public String dump()
+    public String dump( )
     {
-        StringBuilder buffer = new StringBuilder();
+        StringBuilder buffer = new StringBuilder( );
         buffer.append( "Configuration Dump." );
-        for ( Iterator i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator i = configuration.getKeys( ); i.hasNext( ); )
         {
-            String key = (String) i.next();
+            String key = (String) i.next( );
             Object value = configuration.getProperty( key );
             buffer.append( "\n\"" ).append( key ).append( "\" = \"" ).append( value ).append( "\"" );
         }
-        return buffer.toString();
+        return buffer.toString( );
     }
 
-    public boolean isEmpty()
+    public boolean isEmpty( )
     {
-        return configuration.isEmpty();
+        return configuration.isEmpty( );
     }
 
     public Registry getSubset( String key )
@@ -129,13 +129,13 @@
 
     public List<Registry> getSubsetList( String key )
     {
-        List<Registry> subsets = new ArrayList<>();
+        List<Registry> subsets = new ArrayList<>( );
 
         boolean done = false;
         do
         {
-            Registry registry = getSubset( key + "(" + subsets.size() + ")" );
-            if ( !registry.isEmpty() )
+            Registry registry = getSubset( key + "(" + subsets.size( ) + ")" );
+            if ( !registry.isEmpty( ) )
             {
                 subsets.add( registry );
             }
@@ -153,27 +153,27 @@
     {
         Configuration configuration = this.configuration.subset( key );
 
-        Properties properties = new Properties();
-        for ( Iterator i = configuration.getKeys(); i.hasNext(); )
+        Properties properties = new Properties( );
+        for ( Iterator i = configuration.getKeys( ); i.hasNext( ); )
         {
-            String property = (String) i.next();
+            String property = (String) i.next( );
             List l = configuration.getList( property );
-            StringBuilder sb = new StringBuilder();
+            StringBuilder sb = new StringBuilder( );
             for ( Object element : l )
             {
                 sb.append( (String) element );
                 sb.append( "," );
             }
-            if ( sb.length() > 0 )
+            if ( sb.length( ) > 0 )
             {
-                sb.deleteCharAt( sb.length() - 1 );
+                sb.deleteCharAt( sb.length( ) - 1 );
             }
-            properties.setProperty( property, sb.toString() );
+            properties.setProperty( property, sb.toString( ) );
         }
         return properties;
     }
 
-    public void save()
+    public void save( )
         throws RegistryException
     {
         if ( configuration instanceof FileConfiguration )
@@ -181,11 +181,11 @@
             FileConfiguration fileConfiguration = (FileConfiguration) configuration;
             try
             {
-                fileConfiguration.save();
+                fileConfiguration.save( );
             }
             catch ( ConfigurationException e )
             {
-                throw new RegistryException( e.getMessage(), e );
+                throw new RegistryException( e.getMessage( ), e );
             }
         }
         else
@@ -213,18 +213,18 @@
     }
 
 
-    public int getChangeListenersSize()
+    public int getChangeListenersSize( )
     {
-        return EventSource.class.cast( this.configuration ).getConfigurationListeners().size();
+        return EventSource.class.cast( this.configuration ).getConfigurationListeners( ).size( );
     }
 
-    public Collection<String> getKeys()
+    public Collection<String> getKeys( )
     {
-        Set<String> keys = new HashSet<String>();
+        Set<String> keys = new HashSet<String>( );
 
-        for ( Iterator<String> i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator<String> i = configuration.getKeys( ); i.hasNext( ); )
         {
-            String key = i.next();
+            String key = i.next( );
 
             int index = key.indexOf( '.' );
             if ( index < 0 )
@@ -240,13 +240,13 @@
         return keys;
     }
 
-    public Collection getFullKeys()
+    public Collection getFullKeys( )
     {
-        Set<String> keys = new HashSet<String>();
+        Set<String> keys = new HashSet<String>( );
 
-        for ( Iterator<String> i = configuration.getKeys(); i.hasNext(); )
+        for ( Iterator<String> i = configuration.getKeys( ); i.hasNext( ); )
         {
-            keys.add( i.next() );
+            keys.add( i.next( ) );
         }
 
         return keys;
@@ -260,15 +260,15 @@
     public void removeSubset( String key )
     {
         // create temporary list since removing a key will modify the iterator from configuration
-        List keys = new ArrayList();
-        for ( Iterator i = configuration.getKeys( key ); i.hasNext(); )
+        List keys = new ArrayList( );
+        for ( Iterator i = configuration.getKeys( key ); i.hasNext( ); )
         {
-            keys.add( i.next() );
+            keys.add( i.next( ) );
         }
 
-        for ( Iterator i = keys.iterator(); i.hasNext(); )
+        for ( Iterator i = keys.iterator( ); i.hasNext( ); )
         {
-            configuration.clearProperty( (String) i.next() );
+            configuration.clearProperty( (String) i.next( ) );
         }
     }
 
@@ -337,7 +337,7 @@
             catch ( ConfigurationException e )
             {
                 throw new RegistryException(
-                    "Unable to add configuration from resource '" + resource + "': " + e.getMessage(), e );
+                    "Unable to add configuration from resource '" + resource + "': " + e.getMessage( ), e );
             }
         }
         else if ( resource.endsWith( ".xml" ) )
@@ -350,7 +350,7 @@
             catch ( ConfigurationException e )
             {
                 throw new RegistryException(
-                    "Unable to add configuration from resource '" + resource + "': " + e.getMessage(), e );
+                    "Unable to add configuration from resource '" + resource + "': " + e.getMessage( ), e );
             }
         }
         else
@@ -370,7 +370,7 @@
         throws RegistryException
     {
         CombinedConfiguration configuration = (CombinedConfiguration) this.configuration;
-        if ( file.getName().endsWith( ".properties" ) )
+        if ( file.getName( ).endsWith( ".properties" ) )
         {
             try
             {
@@ -380,10 +380,10 @@
             catch ( ConfigurationException e )
             {
                 throw new RegistryException(
-                    "Unable to add configuration from file '" + file.getName() + "': " + e.getMessage(), e );
+                    "Unable to add configuration from file '" + file.getName( ) + "': " + e.getMessage( ), e );
             }
         }
-        else if ( file.getName().endsWith( ".xml" ) )
+        else if ( file.getName( ).endsWith( ".xml" ) )
         {
             try
             {
@@ -393,18 +393,18 @@
             catch ( ConfigurationException e )
             {
                 throw new RegistryException(
-                    "Unable to add configuration from file '" + file.getName() + "': " + e.getMessage(), e );
+                    "Unable to add configuration from file '" + file.getName( ) + "': " + e.getMessage( ), e );
             }
         }
         else
         {
             throw new RegistryException(
-                "Unable to add configuration from file '" + file.getName() + "': unrecognised type" );
+                "Unable to add configuration from file '" + file.getName( ) + "': unrecognised type" );
         }
     }
 
     @PostConstruct
-    public void initialize()
+    public void initialize( )
         throws RegistryException
     {
         try
@@ -412,43 +412,34 @@
             CombinedConfiguration configuration;
             if ( StringUtils.isNotBlank( properties ) )
             {
-                try
-                {
-                    DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-                    DefaultExpressionEngine expressionEngine = new DefaultExpressionEngine();
-                    expressionEngine.setPropertyDelimiter( propertyDelimiter );
-                    builder.setExpressionEngine( expressionEngine );
+                DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder( );
+                DefaultExpressionEngine expressionEngine = new DefaultExpressionEngine( );
+                expressionEngine.setPropertyDelimiter( propertyDelimiter );
+                builder.setExpressionEngine( expressionEngine );
 
-                    StringSearchInterpolator interpolator = new StringSearchInterpolator( "${", "}" );
-                    // interpolation as plexus did it before
-                    interpolator.addValueSource( new PropertiesBasedValueSource( System.getProperties() ) );
+                StringSubstitutor substitutor = new StringSubstitutor( StringLookupFactory.INSTANCE.systemPropertyStringLookup( ) );
 
-                    String interpolatedProps = interpolator.interpolate( properties );
+                String interpolatedProps = substitutor.replace( properties );
 
-                    logger.debug( "Loading configuration into commons-configuration, xml {}", interpolatedProps );
-                    builder.load( new StringReader( interpolatedProps ) );
-                    configuration = builder.getConfiguration( false );
-                    configuration.setExpressionEngine( expressionEngine );
-                    //configuration.set
-                }
-                catch ( InterpolationException e )
-                {
-                    throw new RuntimeException( e.getMessage(), e );
-                }
+                logger.debug( "Loading configuration into commons-configuration, xml {}", interpolatedProps );
+                builder.load( new StringReader( interpolatedProps ) );
+                configuration = builder.getConfiguration( false );
+                configuration.setExpressionEngine( expressionEngine );
+                //configuration.set
             }
             else
             {
                 logger.debug( "Creating a default configuration - no configuration was provided" );
-                configuration = new CombinedConfiguration();
+                configuration = new CombinedConfiguration( );
             }
 
-            configuration.addConfiguration( new SystemConfiguration() );
+            configuration.addConfiguration( new SystemConfiguration( ) );
 
             this.configuration = configuration;
         }
         catch ( ConfigurationException e )
         {
-            throw new RuntimeException( e.getMessage(), e );
+            throw new RuntimeException( e.getMessage( ), e );
         }
     }
 
@@ -464,7 +455,7 @@
         return configuration == null ? null : new CommonsConfigurationRegistry( configuration );
     }
 
-    public String getPropertyDelimiter()
+    public String getPropertyDelimiter( )
     {
         return propertyDelimiter;
     }
diff --git a/spring-registry-commons/src/test/java/org/apache/archiva/redback/components/registry/CommonsConfigurationRegistryTest.java b/spring-registry-commons/src/test/java/org/apache/archiva/redback/components/registry/CommonsConfigurationRegistryTest.java
index 8a5e473..d096c89 100644
--- a/spring-registry-commons/src/test/java/org/apache/archiva/redback/components/registry/CommonsConfigurationRegistryTest.java
+++ b/spring-registry-commons/src/test/java/org/apache/archiva/redback/components/registry/CommonsConfigurationRegistryTest.java
@@ -21,10 +21,10 @@
 
 import org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry;
 import org.apache.commons.configuration.XMLConfiguration;
-import org.codehaus.plexus.util.FileUtils;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.util.FileCopyUtils;
 
 import java.io.File;
 import java.util.Arrays;
@@ -346,7 +346,7 @@
     {
         File src = new File( "./src/test/resources/test-save.xml" );
         File dest = new File( "./target/test-classes/test-save.xml" );
-        FileUtils.copyFile( src, dest );
+        FileCopyUtils.copy( src, dest );
 
         registry = getRegistry( "test-save" );
 
