diff --git a/src/main/java/org/apache/archiva/redback/components/scheduler/configuration/SchedulerConfiguration.java b/src/main/java/org/apache/archiva/redback/components/scheduler/configuration/SchedulerConfiguration.java
index 3874c15..00e7131 100644
--- a/src/main/java/org/apache/archiva/redback/components/scheduler/configuration/SchedulerConfiguration.java
+++ b/src/main/java/org/apache/archiva/redback/components/scheduler/configuration/SchedulerConfiguration.java
@@ -34,96 +34,96 @@
 public class SchedulerConfiguration
 {
     @Inject
-    private Scheduler plexusScheduler;
+    private Scheduler scheduler;
 
     public String getInstanceName()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_NAME );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_NAME );
     }
 
     public void setInstanceName( String instanceName )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_NAME, instanceName );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_NAME, instanceName );
     }
 
     public String getInstanceId()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_ID );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_ID );
     }
 
     public void setInstanceId( String InstanceId )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_ID, InstanceId );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_INSTANCE_ID, InstanceId );
     }
 
     public String getThreadName()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_THREAD_NAME );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_THREAD_NAME );
     }
 
     public void setThreadName( String threadName )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_THREAD_NAME, threadName );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_THREAD_NAME, threadName );
     }
 
     public String getIdleWaitTime()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_IDLE_WAIT_TIME );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_IDLE_WAIT_TIME );
     }
 
     public void setIdleWaitTime( String idleWaitTime )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_IDLE_WAIT_TIME, idleWaitTime );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_IDLE_WAIT_TIME, idleWaitTime );
     }
 
     public String getDbFailureRetryInterval()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_DB_FAILURE_RETRY_INTERVAL );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_DB_FAILURE_RETRY_INTERVAL );
     }
 
     public void setDbFailureRetryInterval( String dbFailureRetryInterval )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_DB_FAILURE_RETRY_INTERVAL, dbFailureRetryInterval );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_DB_FAILURE_RETRY_INTERVAL, dbFailureRetryInterval );
     }
 
     public String getClassLoadHelper()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_CLASS_LOAD_HELPER_CLASS );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_CLASS_LOAD_HELPER_CLASS );
     }
 
     public void setClassLoadHelper( String classLoadHelper )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_CLASS_LOAD_HELPER_CLASS, classLoadHelper );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_CLASS_LOAD_HELPER_CLASS, classLoadHelper );
     }
 
     public String getContextKey()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_CONTEXT_PREFIX );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_CONTEXT_PREFIX );
     }
 
     public void setContextKey( String contextKey )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_CONTEXT_PREFIX, contextKey );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_CONTEXT_PREFIX, contextKey );
     }
 
     public String getUserTransactionURL()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_USER_TX_URL );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_USER_TX_URL );
     }
 
     public void setUserTransactionURL( String userTransactionURL )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_USER_TX_URL, userTransactionURL );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_USER_TX_URL, userTransactionURL );
     }
 
     public String getWrapJobExecutionInUserTransaction()
     {
-        return plexusScheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_WRAP_JOB_IN_USER_TX );
+        return scheduler.getProperties().getProperty( StdSchedulerFactory.PROP_SCHED_WRAP_JOB_IN_USER_TX );
     }
 
     public void setWrapJobExecutionInUserTransaction( String wrapJobExecutionInUserTransaction )
     {
-        plexusScheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_WRAP_JOB_IN_USER_TX, wrapJobExecutionInUserTransaction );
+        scheduler.getProperties().setProperty( StdSchedulerFactory.PROP_SCHED_WRAP_JOB_IN_USER_TX, wrapJobExecutionInUserTransaction );
     }
 
 }
