diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/ArrayConstantTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/ArrayConstantTest.java
index 461d271..a596474 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/ArrayConstantTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/ArrayConstantTest.java
@@ -41,9 +41,10 @@
             {
                 bind( "Empty", "<items/>" );
 
-                bind( "Custom", "<items><item implementation='java.lang.Boolean'>true</item>"
-                    + "<item implementation='java.net.URI'>file:temp</item>"
-                    + "<item implementation='java.lang.Float'>8.1</item></items>" );
+                bind( "Custom",
+                      "<items><item implementation='java.lang.Boolean'>true</item>"
+                          + "<item implementation='java.net.URI'>file:temp</item>"
+                          + "<item implementation='java.lang.Float'>8.1</item></items>" );
 
                 bind( "Text", "<items><item>1</item><item>2</item><item>3</item></items>" );
 
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/BeanConstantTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/BeanConstantTest.java
index a15053f..39283f0 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/BeanConstantTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/BeanConstantTest.java
@@ -196,7 +196,8 @@
 
     public void testSimpleUrlBean()
     {
-        assertEquals( "www.sonatype.org", injector.getInstance( Key.get( URL.class, Names.named( "SITE" ) ) ).getHost() );
+        assertEquals( "www.sonatype.org",
+                      injector.getInstance( Key.get( URL.class, Names.named( "SITE" ) ) ).getHost() );
     }
 
     public void testNonBean()
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/CollectionConstantTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/CollectionConstantTest.java
index 6e000af..20aa51c 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/CollectionConstantTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/CollectionConstantTest.java
@@ -49,7 +49,8 @@
                 bind( "Custom", "<items implementation='java.util.LinkedHashSet'>"
                     + "<item implementation='java.io.File'>FOO</item><item>BAR</item></items>" );
 
-                bind( "Animals", "<animals><animal>cat</animal><animal>dog</animal><animal>aardvark</animal></animals>" );
+                bind( "Animals",
+                      "<animals><animal>cat</animal><animal>dog</animal><animal>aardvark</animal></animals>" );
 
                 bind( "Numbers", "<as><a><b>1</b><b>2</b></a><a><b>3</b><b>4</b></a><a><b>5</b><b>6</b></a></as>" );
 
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/MapConstantTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/MapConstantTest.java
index d14ee82..da404a4 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/MapConstantTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/MapConstantTest.java
@@ -44,9 +44,10 @@
             {
                 bind( "Empty", "<items/>" );
 
-                bind( "Custom", "<items implementation='java.util.LinkedHashMap'>"
-                    + "<builder implementation='java.lang.StringBuilder'>TEST</builder>"
-                    + "<file implementation='java.io.File'>TEST</file>" + "</items>" );
+                bind( "Custom",
+                      "<items implementation='java.util.LinkedHashMap'>"
+                          + "<builder implementation='java.lang.StringBuilder'>TEST</builder>"
+                          + "<file implementation='java.io.File'>TEST</file>" + "</items>" );
 
                 bind( "Map", "<items><key1>value1</key1><key2>value2</key2></items>" );
 
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusBeanLocatorTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusBeanLocatorTest.java
index e61b916..19c7dd3 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusBeanLocatorTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusBeanLocatorTest.java
@@ -456,7 +456,8 @@
         } ), 9 );
 
         final Iterable<? extends Entry<String, Bean>> beans =
-            new DefaultPlexusBeanLocator( locator, new RealmManager( locator ), "realm" ).locate( TypeLiteral.get( Bean.class ) );
+            new DefaultPlexusBeanLocator( locator, new RealmManager( locator ),
+                                          "realm" ).locate( TypeLiteral.get( Bean.class ) );
 
         Iterator<? extends Entry<String, Bean>> i;
 
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java
index cec8fc8..816e1b6 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusConfigurationTest.java
@@ -80,7 +80,8 @@
                 bind( PlexusBeanLocator.class ).to( DefaultPlexusBeanLocator.class );
                 bind( PlexusBeanConverter.class ).to( PlexusXmlBeanConverter.class );
 
-                install( new PlexusBindingModule( new ComponentManager(), new PlexusAnnotatedBeanModule( null, null ) ) );
+                install( new PlexusBindingModule( new ComponentManager(),
+                                                  new PlexusAnnotatedBeanModule( null, null ) ) );
 
                 requestInjection( PlexusConfigurationTest.this );
             }
diff --git a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusXmlScannerTest.java b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusXmlScannerTest.java
index 945522f..4b9609f 100644
--- a/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusXmlScannerTest.java
+++ b/org.eclipse.sisu.plexus.tests/src/org/eclipse/sisu/plexus/PlexusXmlScannerTest.java
@@ -148,7 +148,8 @@
             new ComponentImpl( DefaultBean.class, Hints.DEFAULT_HINT, Strategies.LOAD_ON_START, "" );
         assertEquals( DefaultBean.class, componentMap.get( component1 ).load() );
 
-        final Component component2 = new ComponentImpl( Bean.class, "debug", Strategies.LOAD_ON_START, "For debugging" );
+        final Component component2 =
+            new ComponentImpl( Bean.class, "debug", Strategies.LOAD_ON_START, "For debugging" );
         assertEquals( DebugBean.class, componentMap.get( component2 ).load() );
     }
 
@@ -198,7 +199,8 @@
 
         assertFalse( metadata1.isEmpty() );
 
-        assertEquals( new ConfigurationImpl( "someFieldName", "<some-field-name><item>PRIMARY</item></some-field-name>" ),
+        assertEquals( new ConfigurationImpl( "someFieldName",
+                                             "<some-field-name><item>PRIMARY</item></some-field-name>" ),
                       metadata1.getConfiguration( new NamedProperty( "someFieldName" ) ) );
 
         assertEquals( new ConfigurationImpl( "simple", "value" ),
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
index 3016e8d..b63fb83 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/DefaultPlexusContainer.java
@@ -386,7 +386,8 @@
         return getComponentDescriptor( null, role, hint );
     }
 
-    public <T> ComponentDescriptor<T> getComponentDescriptor( final Class<T> type, final String role, final String hint )
+    public <T> ComponentDescriptor<T> getComponentDescriptor( final Class<T> type, final String role,
+                                                              final String hint )
     {
         final Iterator<PlexusBean<T>> i = locate( role, type, hint ).iterator();
         if ( i.hasNext() )
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/AbstractComponentConfigurator.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/AbstractComponentConfigurator.java
index 84a8b7f..7184351 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/AbstractComponentConfigurator.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/AbstractComponentConfigurator.java
@@ -58,14 +58,15 @@
             try
             {
                 configureMethod = clazz.getMethod( "configureComponent", Object.class, PlexusConfiguration.class,
-                                 ExpressionEvaluator.class, org.codehaus.classworlds.ClassRealm.class,
-                                 ConfigurationListener.class );
+                                                   ExpressionEvaluator.class, org.codehaus.classworlds.ClassRealm.class,
+                                                   ConfigurationListener.class );
                 configureMethod.invoke( this, component, configuration, evaluator, legacyRealm, listener );
             }
             catch ( final NoSuchMethodException ignore )
             {
-                configureMethod = clazz.getMethod( "configureComponent", Object.class, PlexusConfiguration.class,
-                                 ExpressionEvaluator.class, org.codehaus.classworlds.ClassRealm.class );
+                configureMethod =
+                    clazz.getMethod( "configureComponent", Object.class, PlexusConfiguration.class,
+                                     ExpressionEvaluator.class, org.codehaus.classworlds.ClassRealm.class );
                 configureMethod.invoke( this, component, configuration, evaluator, legacyRealm );
             }
         }
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/MapOrientedComponentConfigurator.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/MapOrientedComponentConfigurator.java
index ecf4174..fb29e10 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/MapOrientedComponentConfigurator.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/MapOrientedComponentConfigurator.java
@@ -32,8 +32,7 @@
         if ( component instanceof MapOrientedComponent )
         {
             Object map = new MapConverter().fromConfiguration( converterLookup, configuration, Map.class,
-                                                                        component.getClass(), realm, evaluator,
-                                                                        listener );
+                                                               component.getClass(), realm, evaluator, listener );
             ( (MapOrientedComponent) component ).setComponentConfiguration( (Map<?, ?>) map );
         }
         else
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/AbstractConfigurationConverter.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/AbstractConfigurationConverter.java
index c77434d..ee32d50 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/AbstractConfigurationConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/AbstractConfigurationConverter.java
@@ -60,9 +60,8 @@
         }
         catch ( final ExpressionEvaluationException e )
         {
-            final String reason =
-                String.format( "Cannot evaluate expression '%s' for configuration entry '%s'", value,
-                               configuration.getName() );
+            final String reason = String.format( "Cannot evaluate expression '%s' for configuration entry '%s'", value,
+                                                 configuration.getName() );
 
             throw new ComponentConfigurationException( configuration, reason, e );
         }
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/AbstractBasicConverter.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/AbstractBasicConverter.java
index a22dfe2..a327ecd 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/AbstractBasicConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/AbstractBasicConverter.java
@@ -66,8 +66,8 @@
     // ----------------------------------------------------------------------
 
     @Override
-    protected final Object fromExpression( final PlexusConfiguration configuration,
-                                           final ExpressionEvaluator evaluator, final Class<?> type )
+    protected final Object fromExpression( final PlexusConfiguration configuration, final ExpressionEvaluator evaluator,
+                                           final Class<?> type )
         throws ComponentConfigurationException
     {
         String value = configuration.getValue();
@@ -104,9 +104,8 @@
         }
         catch ( final ExpressionEvaluationException e )
         {
-            final String reason =
-                String.format( "Cannot evaluate expression '%s' for configuration entry '%s'", value,
-                               configuration.getName() );
+            final String reason = String.format( "Cannot evaluate expression '%s' for configuration entry '%s'", value,
+                                                 configuration.getName() );
 
             throw new ComponentConfigurationException( configuration, reason, e );
         }
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/DateConverter.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/DateConverter.java
index e883e9f..46793da 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/DateConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/basic/DateConverter.java
@@ -35,7 +35,7 @@
     {
         try
         {
-            return DATE_CONVERTER.convert( value, null /* unused */);
+            return DATE_CONVERTER.convert( value, null /* unused */ );
         }
         catch ( final RuntimeException e )
         {
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/ArrayConverter.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/ArrayConverter.java
index 5c18dd8..49be987 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/ArrayConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/ArrayConverter.java
@@ -48,8 +48,8 @@
             final Class<?> elementType = type.getComponentType();
             if ( null == value )
             {
-                elements =
-                    fromChildren( lookup, configuration, type, enclosingType, loader, evaluator, listener, elementType );
+                elements = fromChildren( lookup, configuration, type, enclosingType, loader, evaluator, listener,
+                                         elementType );
             }
             else if ( value instanceof String )
             {
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/CollectionConverter.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/CollectionConverter.java
index c244b21..eba6819 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/CollectionConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/configurator/converters/composite/CollectionConverter.java
@@ -64,8 +64,8 @@
             final Class<?> elementType = findElementType( typeArguments );
             if ( null == value )
             {
-                elements =
-                    fromChildren( lookup, configuration, type, enclosingType, loader, evaluator, listener, elementType );
+                elements = fromChildren( lookup, configuration, type, enclosingType, loader, evaluator, listener,
+                                         elementType );
             }
             else if ( value instanceof String )
             {
diff --git a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/repository/ComponentDescriptor.java b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/repository/ComponentDescriptor.java
index e8ef696..d1f89f2 100644
--- a/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/repository/ComponentDescriptor.java
+++ b/org.eclipse.sisu.plexus/src/org/codehaus/plexus/component/repository/ComponentDescriptor.java
@@ -322,8 +322,8 @@
     @Override
     public final String toString()
     {
-        return getClass().getName() + " [role: '" + getRole() + "', hint: '" + getRoleHint() + "', realm: "
-            + classRealm + "]";
+        return getClass().getName() + " [role: '" + getRole() + "', hint: '" + getRoleHint() + "', realm: " + classRealm
+            + "]";
     }
 
     @Override
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/ComponentImpl.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/ComponentImpl.java
index 569a38d..7233ecb 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/ComponentImpl.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/ComponentImpl.java
@@ -43,7 +43,8 @@
     // Constructors
     // ----------------------------------------------------------------------
 
-    public ComponentImpl( final Class<?> role, final String hint, final String instantiationStrategy, final String description )
+    public ComponentImpl( final Class<?> role, final String hint, final String instantiationStrategy,
+                          final String description )
     {
         if ( null == role || null == hint || null == instantiationStrategy || null == description )
         {
@@ -146,9 +147,8 @@
                 && description.equals( cmp.description() ) )
             {
                 // optimization: we hard-code all these attributes to be empty
-                final String hardCodedAttributes =
-                    cmp.alias() + cmp.composer() + cmp.configurator() + cmp.factory() + cmp.lifecycleHandler()
-                        + cmp.profile() + cmp.type() + cmp.version();
+                final String hardCodedAttributes = cmp.alias() + cmp.composer() + cmp.configurator() + cmp.factory()
+                    + cmp.lifecycleHandler() + cmp.profile() + cmp.type() + cmp.version();
 
                 return hardCodedAttributes.length() == 0 && !cmp.isolatedRealm();
             }
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/DefaultPlexusBeanLocator.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/DefaultPlexusBeanLocator.java
index aeb4674..71c4a7f 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/DefaultPlexusBeanLocator.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/DefaultPlexusBeanLocator.java
@@ -50,8 +50,7 @@
         this( beanLocator, null, null );
     }
 
-    public DefaultPlexusBeanLocator( final BeanLocator beanLocator,
-                                     final RealmManager realmManager,
+    public DefaultPlexusBeanLocator( final BeanLocator beanLocator, final RealmManager realmManager,
                                      final String visibility )
     {
         this.beanLocator = beanLocator;
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusDateTypeConverter.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusDateTypeConverter.java
index eb64c86..0f904f9 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusDateTypeConverter.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusDateTypeConverter.java
@@ -33,11 +33,11 @@
     // Constants
     // ----------------------------------------------------------------------
 
-    private static final DateFormat[] PLEXUS_DATE_FORMATS = {
-        new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss.S a", Locale.US ),
-        new SimpleDateFormat( "yyyy-MM-dd hh:mm:ssa", Locale.US ),
-        new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S", Locale.US ),
-        new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.US ) };
+    private static final DateFormat[] PLEXUS_DATE_FORMATS =
+        { new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss.S a", Locale.US ),
+            new SimpleDateFormat( "yyyy-MM-dd hh:mm:ssa", Locale.US ),
+            new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S", Locale.US ),
+            new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.US ) };
 
     private static final String CONVERSION_ERROR = "Cannot convert: \"%s\" to: %s";
 
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
index 6c7546d..2105c5f 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusLifecycleManager.java
@@ -45,8 +45,8 @@
     // Constants
     // ----------------------------------------------------------------------
 
-    private static final Class<?>[] LIFECYCLE_TYPES = { LogEnabled.class, Contextualizable.class, Initializable.class,
-        Startable.class, Disposable.class };
+    private static final Class<?>[] LIFECYCLE_TYPES =
+        { LogEnabled.class, Contextualizable.class, Initializable.class, Startable.class, Disposable.class };
 
     // ----------------------------------------------------------------------
     // Implementation fields
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusPropertyBinder.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusPropertyBinder.java
index ed98264..315c15b 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusPropertyBinder.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusPropertyBinder.java
@@ -72,7 +72,8 @@
     // Constructors
     // ----------------------------------------------------------------------
 
-    PlexusPropertyBinder( final BeanManager manager, final TypeEncounter<?> encounter, final PlexusBeanMetadata metadata )
+    PlexusPropertyBinder( final BeanManager manager, final TypeEncounter<?> encounter,
+                          final PlexusBeanMetadata metadata )
     {
         this.manager = manager;
         this.metadata = metadata;
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
index 56472fa..04a28c3 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusSpaceModule.java
@@ -80,9 +80,10 @@
 
         final BeanManager manager =
             delegate instanceof PlexusLifecycleManager ? delegate
-                            : new PlexusLifecycleManager( binder.getProvider( Context.class ),
-                                                          binder.getProvider( LoggerManager.class ),
-                                                          slf4jLoggerFactoryProvider, delegate );
+                                                       : new PlexusLifecycleManager( binder.getProvider( Context.class ),
+                                                                                     binder.getProvider( LoggerManager.class ),
+                                                                                     slf4jLoggerFactoryProvider,
+                                                                                     delegate );
 
         binder.bind( BeanManager.class ).toInstance( manager );
 
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusTypeRegistry.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusTypeRegistry.java
index 759f762..52dedd3 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusTypeRegistry.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusTypeRegistry.java
@@ -31,8 +31,8 @@
     // Constants
     // ----------------------------------------------------------------------
 
-    private static final Component LOAD_ON_START_PLACEHOLDER = new ComponentImpl( Object.class, "",
-                                                                                  Strategies.LOAD_ON_START, "" );
+    private static final Component LOAD_ON_START_PLACEHOLDER =
+        new ComponentImpl( Object.class, "", Strategies.LOAD_ON_START, "" );
 
     // ----------------------------------------------------------------------
     // Implementation fields
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlMetadata.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlMetadata.java
index 5c1062a..862ab2b 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlMetadata.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlMetadata.java
@@ -36,7 +36,8 @@
     // Constructors
     // ----------------------------------------------------------------------
 
-    PlexusXmlMetadata( final Map<String, Configuration> configurationMap, final Map<String, Requirement> requirementMap )
+    PlexusXmlMetadata( final Map<String, Configuration> configurationMap,
+                       final Map<String, Requirement> requirementMap )
     {
         merge( configurationMap, requirementMap );
     }
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlScanner.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlScanner.java
index 463ad67..26605a9 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlScanner.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PlexusXmlScanner.java
@@ -417,9 +417,8 @@
             fieldName = role; // use fully-qualified role as the field name (see PlexusXmlMetadata)
         }
 
-        requirementMap.put( fieldName,
-                            new RequirementImpl( space.deferLoadClass( role ), optional,
-                                                 Hints.canonicalHints( hintList ) ) );
+        requirementMap.put( fieldName, new RequirementImpl( space.deferLoadClass( role ), optional,
+                                                            Hints.canonicalHints( hintList ) ) );
     }
 
     /**
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PseudoPlexusContainer.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PseudoPlexusContainer.java
index ad8354d..7d8281e 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PseudoPlexusContainer.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/PseudoPlexusContainer.java
@@ -186,7 +186,8 @@
         throw new UnsupportedOperationException();
     }
 
-    public <T> ComponentDescriptor<T> getComponentDescriptor( final Class<T> type, final String role, final String hint )
+    public <T> ComponentDescriptor<T> getComponentDescriptor( final Class<T> type, final String role,
+                                                              final String hint )
     {
         throw new UnsupportedOperationException();
     }
diff --git a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/package-info.java b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/package-info.java
index 6c2981d..c021bfd 100644
--- a/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/package-info.java
+++ b/org.eclipse.sisu.plexus/src/org/eclipse/sisu/plexus/package-info.java
@@ -12,4 +12,3 @@
  * Sisu-Plexus backend implementation.
  */
 package org.eclipse.sisu.plexus;
-
