diff --git a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
index 6d44ca3..3d4eed8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/BundleComponentActivator.java
@@ -29,6 +29,14 @@
 import java.util.List;
 import java.util.StringTokenizer;
 
+import org.apache.felix.scr.impl.helper.Logger;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
+import org.apache.felix.scr.impl.manager.ComponentFactoryImpl;
+import org.apache.felix.scr.impl.manager.DelayedComponentManager;
+import org.apache.felix.scr.impl.manager.ImmediateComponentManager;
+import org.apache.felix.scr.impl.manager.ServiceFactoryComponentManager;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.apache.felix.scr.impl.parser.KXml2SAXParser;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.cm.ConfigurationAdmin;
@@ -42,7 +50,7 @@
  * a single bundle. It will read information from the metadata.xml file
  * descriptors and create the corresponding managers.
  */
-class BundleComponentActivator implements Logger
+public class BundleComponentActivator implements Logger
 {
     // global component registration
     private ComponentRegistry m_componentRegistry;
@@ -315,7 +323,7 @@
      *
      * @return the list of instance references
      */
-    protected List getInstanceReferences()
+    public List getInstanceReferences()
     {
         return m_managers;
     }
@@ -326,7 +334,7 @@
     *
     * @return the BundleContext
     */
-    protected BundleContext getBundleContext()
+    public BundleContext getBundleContext()
     {
         return m_context;
     }
@@ -355,7 +363,7 @@
      * @param name The name of the component to enable or <code>null</code> to
      *      enable all components.
      */
-    void enableComponent( String name )
+    public void enableComponent( String name )
     {
         final AbstractComponentManager[] cm = getSelectedComponents( name );
         if ( cm == null )
@@ -388,7 +396,7 @@
      * @param name The name of the component to disable or <code>null</code> to
      *      disable all components.
      */
-    void disableComponent( String name )
+    public void disableComponent( String name )
     {
         final AbstractComponentManager[] cm = getSelectedComponents( name );
         if ( cm == null )
@@ -431,7 +439,7 @@
         // if all components are selected
         if ( name == null )
         {
-            return ( AbstractComponentManager[] ) m_managers.toArray( new AbstractComponentManager[m_managers.size()] );
+            return (org.apache.felix.scr.impl.manager.AbstractComponentManager[] ) m_managers.toArray( new AbstractComponentManager[m_managers.size()] );
         }
 
         if ( m_componentRegistry.getComponent( name ) != null )
@@ -463,7 +471,7 @@
      *
      * @param task The component task to execute
      */
-    void schedule( ComponentActivatorTask task )
+    public void schedule( ComponentActivatorTask task )
     {
         if ( isActive() )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
index bf51715..9cce9ec 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentActivatorTask.java
@@ -20,6 +20,7 @@
 
 
 import org.apache.felix.scr.Component;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
 import org.osgi.framework.Bundle;
 import org.osgi.service.log.LogService;
 
@@ -30,7 +31,7 @@
  * implementation. This is mainly used when logging something around the task
  * being run or scheduled.
  */
-abstract class ComponentActivatorTask implements Runnable
+public abstract class ComponentActivatorTask implements Runnable
 {
 
     private final String taskName;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
index 148a0ff..03cee8f 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
@@ -29,6 +29,9 @@
 
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.ScrService;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
+import org.apache.felix.scr.impl.manager.ComponentFactoryImpl;
+import org.apache.felix.scr.impl.manager.ImmediateComponentManager;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -220,7 +223,7 @@
     }
 
 
-    Configuration getConfiguration( final BundleContext ctx, final String pid )
+    public Configuration getConfiguration( final BundleContext ctx, final String pid )
     {
         final String filter = "(service.pid=" + pid + ")";
         Configuration[] cfg = getConfigurationInternal( ctx, filter );
@@ -228,7 +231,7 @@
     }
 
 
-    Configuration[] getConfigurations( final BundleContext ctx, final String factoryPid )
+    public Configuration[] getConfigurations( final BundleContext ctx, final String factoryPid )
     {
         final String filter = "(service.factoryPid=" + factoryPid + ")";
         return getConfigurationInternal( ctx, filter );
@@ -265,14 +268,14 @@
 
     //---------- ComponentManager registration support
 
-    long createComponentId()
+    public long createComponentId()
     {
         m_componentCounter++;
         return m_componentCounter;
     }
 
 
-    void checkComponentName( String name )
+    public void checkComponentName( String name )
     {
         if ( m_componentsByName.containsKey( name ) )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/Logger.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
similarity index 92%
rename from scr/src/main/java/org/apache/felix/scr/impl/Logger.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
index a5c9143..51a9435 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/Logger.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/Logger.java
@@ -16,7 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
+
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 
 
 /**
@@ -24,12 +26,12 @@
  * in the XML Parser and ComponentMetadata handling classes and at the same
  * time not be too intrusive for the unit tests.
  */
-interface Logger
+public interface Logger
 {
 
     /**
      * Writes a messages for the given <code>ComponentMetadata</code>.
-     * 
+     *
      * @param level The log level of the messages. This corresponds to the log
      *          levels defined by the OSGi LogService.
      * @param message The message to print
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
similarity index 95%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
index 260b76f..634d7a2 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReadOnlyDictionary.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReadOnlyDictionary.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.util.Dictionary;
@@ -25,7 +25,7 @@
 
 /**
  * The <code>ReadOnlyDictionary</code> is a <code>Dictionary</code> whose
- * {@link #put(Object, Object)} and {@link #remove(Object)} methods have 
+ * {@link #put(Object, Object)} and {@link #remove(Object)} methods have
  * no effect and always return <code>null</code>.
  *
  * @author fmeschbe
@@ -36,7 +36,7 @@
     private Dictionary delegatee;
 
 
-    ReadOnlyDictionary( Dictionary delegatee )
+    public ReadOnlyDictionary( Dictionary delegatee )
     {
         this.delegatee = delegatee;
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
similarity index 91%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java
rename to scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
index 5f31c1b..745bb09 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReflectionHelper.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/ReflectionHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -35,25 +35,25 @@
  * The <code>ReflectionHelper</code> class provides utility methods to find out
  * about binding and activation methods in components.
  */
-final class ReflectionHelper
+public final class ReflectionHelper
 {
 
     // Method instance to implement tristate behaviour on method fields:
     // unchecked (SENTINEL), no method (null), valid method (method object)
-    static final Method SENTINEL;
+    public static final Method SENTINEL;
 
     // class references to simplify parameter checking
-    static final Class COMPONENT_CONTEXT_CLASS = ComponentContext.class;
-    static final Class BUNDLE_CONTEXT_CLASS = BundleContext.class;
-    static final Class MAP_CLASS = Map.class;
-    static final Class INTEGER_CLASS = Integer.class;
+    public static final Class COMPONENT_CONTEXT_CLASS = ComponentContext.class;
+    public static final Class BUNDLE_CONTEXT_CLASS = BundleContext.class;
+    public static final Class MAP_CLASS = Map.class;
+    public static final Class INTEGER_CLASS = Integer.class;
 
     // Helper used to find the best matching activate and modified methods
-    static final ActivatorMethodTester ACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
+    public static final ActivatorMethodTester ACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
         { COMPONENT_CONTEXT_CLASS, BUNDLE_CONTEXT_CLASS, MAP_CLASS } );
 
     // Helper used to find the best matching deactivate method
-    static final ActivatorMethodTester DEACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
+    public static final ActivatorMethodTester DEACTIVATE_ACCEPTED_PARAMETERS = new ActivatorMethodTester( new Class[]
         { COMPONENT_CONTEXT_CLASS, BUNDLE_CONTEXT_CLASS, MAP_CLASS, Integer.TYPE, INTEGER_CLASS } );
 
     static
@@ -101,7 +101,7 @@
      * @throws InvocationTargetException If an unexpected Throwable is caught
      *      trying to access the desired method.
      */
-    static Method getMethod( final Class objectClass, final String name, final MethodTester tester )
+    public static Method getMethod( final Class objectClass, final String name, final MethodTester tester )
         throws NoSuchMethodException, InvocationTargetException
     {
         // whether we accept package private methods
@@ -196,7 +196,7 @@
      * @throws InvocationTargetException If an unexpected Throwable is caught
      *      trying to access the desired method.
      */
-    static Method getMethod( Class clazz, String name, Class[] parameterTypes, boolean acceptPrivate,
+    public static Method getMethod( Class clazz, String name, Class[] parameterTypes, boolean acceptPrivate,
         boolean acceptPackage ) throws NoSuchMethodException, InvocationTargetException
     {
         try
@@ -250,7 +250,7 @@
      * @param acceptPackage Whether a package private method is acceptable
      * @return
      */
-    static boolean accept( Method method, boolean acceptPrivate, boolean acceptPackage )
+    public static boolean accept( Method method, boolean acceptPrivate, boolean acceptPackage )
     {
         // method must be void
         if ( Void.TYPE != method.getReturnType() )
@@ -302,7 +302,7 @@
      * Returns the name of the package to which the class belongs or an
      * empty string if the class is in the default package.
      */
-    static String getPackageName( Class clazz )
+    public static String getPackageName( Class clazz )
     {
         String name = clazz.getName();
         int dot = name.lastIndexOf( '.' );
@@ -311,7 +311,7 @@
 
     //---------- inner classes
 
-    static interface MethodTester
+    public static interface MethodTester
     {
 
         /**
@@ -334,7 +334,7 @@
         Class[] getParameterLists();
     }
 
-    static final class ActivatorMethodTester implements ReflectionHelper.MethodTester
+    public static final class ActivatorMethodTester implements ReflectionHelper.MethodTester
     {
         private final Class[] parameterLists;
         private final Set methods;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index 444b9a9..5ade813 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 import java.util.ArrayList;
 import java.util.Dictionary;
@@ -27,6 +27,11 @@
 
 import org.apache.felix.scr.Component;
 import org.apache.felix.scr.Reference;
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentActivatorTask;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -40,7 +45,7 @@
  * implementation object's lifecycle.
  *
  */
-abstract class AbstractComponentManager implements Component, ComponentInstance
+public abstract class AbstractComponentManager implements Component, ComponentInstance
 {
     // the ID of this component
     private long m_componentId;
@@ -738,7 +743,7 @@
     }
 
     //**********************************************************************************************************
-    BundleComponentActivator getActivator()
+    public BundleComponentActivator getActivator()
     {
         return m_activator;
     }
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
index ee65e7f..4806cb8 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentContextImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentContextImpl.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.util.Dictionary;
 
+import org.apache.felix.scr.impl.helper.ReadOnlyDictionary;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -32,7 +33,7 @@
  * Implementation for the ComponentContext interface
  *
  */
-class ComponentContextImpl implements ComponentContext
+public class ComponentContextImpl implements ComponentContext
 {
 
     private AbstractComponentManager m_componentManager;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
index 3c79515..f2ac918 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentFactoryImpl.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ComponentFactoryImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 import java.util.Dictionary;
 import java.util.HashMap;
@@ -24,6 +24,9 @@
 import java.util.IdentityHashMap;
 import java.util.Map;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.Configuration;
@@ -35,7 +38,7 @@
 /**
  * The <code>ComponentFactoryImpl</code> TODO
  */
-class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory
+public class ComponentFactoryImpl extends AbstractComponentManager implements ComponentFactory
 {
 
     // The component registry used to retrieve component IDs
@@ -51,7 +54,7 @@
     private final Map m_createdComponents;
 
 
-    ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata,
+    public ComponentFactoryImpl( BundleComponentActivator activator, ComponentMetadata metadata,
         ComponentRegistry componentRegistry )
     {
         super( activator, metadata, componentRegistry );
@@ -142,7 +145,7 @@
 
     //---------- ManagedServiceFactory interface ------------------------------
 
-    void updated( String pid, Dictionary configuration )
+    public void updated( String pid, Dictionary configuration )
     {
         if ( getState() == STATE_FACTORY )
         {
@@ -173,7 +176,7 @@
         }
     }
 
-    void deleted( String pid )
+    public void deleted( String pid )
     {
         if ( getState() == STATE_FACTORY && m_configuredServices != null )
         {
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
similarity index 87%
rename from scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
index f959fa5..b5462db 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DelayedComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DelayedComponentManager.java
@@ -16,9 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
@@ -27,7 +30,7 @@
 /**
  * The <code>DelayedComponentManager</code> TODO
  */
-class DelayedComponentManager extends ImmediateComponentManager implements ServiceFactory
+public class DelayedComponentManager extends ImmediateComponentManager implements ServiceFactory
 {
 
     /**
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
index 6033e6a..d0d2ec2 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/DependencyManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -30,6 +30,8 @@
 import java.util.Map;
 
 import org.apache.felix.scr.Reference;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Filter;
@@ -46,7 +48,7 @@
  * declared by a single <code>&lt;reference&gt;</code element in component
  * descriptor.
  */
-class DependencyManager implements ServiceListener, Reference
+public class DependencyManager implements ServiceListener, Reference
 {
     // mask of states ok to send events
     private static final int STATE_MASK = AbstractComponentManager.STATE_UNSATISFIED
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
similarity index 97%
rename from scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
index 10bc7b1..b7aa80b 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ImmediateComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ImmediateComponentManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -25,6 +25,11 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.component.ComponentConstants;
 import org.osgi.service.component.ComponentContext;
@@ -35,7 +40,7 @@
  * The default ComponentManager. Objects of this class are responsible for managing
  * implementation object's lifecycle.
  */
-class ImmediateComponentManager extends AbstractComponentManager
+public class ImmediateComponentManager extends AbstractComponentManager
 {
 
     // The object that implements the service and that is bound to other services
@@ -67,7 +72,7 @@
      * @param activator
      * @param metadata
      */
-    ImmediateComponentManager( BundleComponentActivator activator, ComponentMetadata metadata,
+    public ImmediateComponentManager( BundleComponentActivator activator, ComponentMetadata metadata,
         ComponentRegistry componentRegistry )
     {
         super( activator, metadata, componentRegistry );
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
similarity index 94%
rename from scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
rename to scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
index 60204d7..3ea4b7a 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ServiceFactoryComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/ServiceFactoryComponentManager.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.manager;
 
 
 import java.util.IdentityHashMap;
 
+import org.apache.felix.scr.impl.BundleComponentActivator;
+import org.apache.felix.scr.impl.ComponentRegistry;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
@@ -33,7 +36,7 @@
 /**
  * The <code>ServiceFactoryComponentManager</code> TODO
  */
-class ServiceFactoryComponentManager extends ImmediateComponentManager implements ServiceFactory
+public class ServiceFactoryComponentManager extends ImmediateComponentManager implements ServiceFactory
 {
 
     // maintain the map of ComponentContext objects created for the
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
index 7c3c6b5..9d4b11c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ComponentMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.util.ArrayList;
@@ -28,6 +28,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 
+import org.apache.felix.scr.impl.helper.Logger;
 import org.osgi.service.component.ComponentException;
 import org.osgi.service.log.LogService;
 
@@ -495,7 +496,7 @@
     /**
      * Method used to verify if the semantics of this metadata are correct
      */
-    void validate( Logger logger )
+    public void validate( Logger logger )
     {
         // nothing to do if already validated
         if ( m_validated )
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
index 0c6e54f..c1e7d7c 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/PropertyMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/PropertyMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
similarity index 99%
rename from scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
index 2e158a2..a32e06d 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ReferenceMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ReferenceMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.Set;
 import java.util.TreeSet;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
index ce955b1..a047d77 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/ServiceMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ServiceMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
similarity index 98%
rename from scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java
rename to scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
index ce8febf..02953e4 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/XmlHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.io.IOException;
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.felix.scr.impl.helper.Logger;
 import org.apache.felix.scr.impl.parser.KXml2SAXHandler;
 import org.apache.felix.scr.impl.parser.ParseException;
 import org.osgi.framework.Bundle;
@@ -101,7 +102,7 @@
 
     // creates an instance with the bundle owning the component descriptor
     // file parsed by this instance
-    XmlHandler( Bundle bundle, Logger logger )
+    public XmlHandler( Bundle bundle, Logger logger )
     {
         m_bundle = bundle;
         m_logger = logger;
@@ -109,6 +110,17 @@
 
 
     /**
+    * Called to retrieve the service descriptors
+    *
+    * @return   A list of service descriptors
+    */
+    public List getComponentMetadataList()
+    {
+        return m_components;
+    }
+
+
+    /**
      * Method called when a tag opens
      *
      * @param   uri
@@ -358,17 +370,6 @@
 
 
     /**
-    * Called to retrieve the service descriptors
-    *
-    * @return   A list of service descriptors
-    */
-    List getComponentMetadataList()
-    {
-        return m_components;
-    }
-
-
-    /**
      * @see org.apache.felix.scr.impl.parser.KXml2SAXHandler#characters(java.lang.String)
      */
     public void characters( String text )
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java b/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
index 3bf9061..3a7d8a5 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/MockLogger.java
@@ -18,6 +18,9 @@
  */
 package org.apache.felix.scr.impl;
 
+import org.apache.felix.scr.impl.helper.Logger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+
 
 public class MockLogger implements Logger
 {
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java b/scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
similarity index 93%
rename from scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
index 7f88f6e..5b22b5e 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/ReflectionHelperTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/helper/ReflectionHelperTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.helper;
 
 
 import java.lang.reflect.InvocationTargetException;
@@ -24,12 +24,13 @@
 
 import junit.framework.TestCase;
 
-import org.apache.felix.scr.impl.instances.AcceptMethod;
-import org.apache.felix.scr.impl.instances.BaseObject;
-import org.apache.felix.scr.impl.instances.Level1Object;
-import org.apache.felix.scr.impl.instances.Level3Object;
-import org.apache.felix.scr.impl.instances.MethodNameException;
-import org.apache.felix.scr.impl.instances2.Level2Object;
+import org.apache.felix.scr.impl.helper.ReflectionHelper;
+import org.apache.felix.scr.impl.metadata.instances.AcceptMethod;
+import org.apache.felix.scr.impl.metadata.instances.BaseObject;
+import org.apache.felix.scr.impl.metadata.instances.Level1Object;
+import org.apache.felix.scr.impl.metadata.instances.Level3Object;
+import org.apache.felix.scr.impl.metadata.instances.MethodNameException;
+import org.apache.felix.scr.impl.metadata.instances2.Level2Object;
 
 
 public class ReflectionHelperTest extends TestCase
@@ -139,7 +140,7 @@
         Class dpc = getClass().getClassLoader().loadClass( "DefaultPackageClass" );
         assertEquals( "", ReflectionHelper.getPackageName( dpc ) );
 
-        assertEquals( "org.apache.felix.scr.impl.instances", ReflectionHelper.getPackageName( base.getClass() ) );
+        assertEquals( "org.apache.felix.scr.impl.metadata.instances", ReflectionHelper.getPackageName( base.getClass() ) );
     }
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
similarity index 98%
rename from scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
index e41ef22..57f56d7 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/ComponentMetadataTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/ComponentMetadataTest.java
@@ -16,11 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import junit.framework.TestCase;
 
+import org.apache.felix.scr.impl.MockLogger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
+import org.apache.felix.scr.impl.metadata.ServiceMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.osgi.service.component.ComponentException;
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
similarity index 95%
rename from scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
index 8cc0438..a206790 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/XmlHandlerTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/XmlHandlerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl;
+package org.apache.felix.scr.impl.metadata;
 
 
 import java.io.BufferedReader;
@@ -27,6 +27,13 @@
 
 import junit.framework.TestCase;
 
+import org.apache.felix.scr.impl.MockBundle;
+import org.apache.felix.scr.impl.MockLogger;
+import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.PropertyMetadata;
+import org.apache.felix.scr.impl.metadata.ReferenceMetadata;
+import org.apache.felix.scr.impl.metadata.ServiceMetadata;
+import org.apache.felix.scr.impl.metadata.XmlHandler;
 import org.apache.felix.scr.impl.parser.KXml2SAXParser;
 import org.osgi.service.component.ComponentException;
 import org.xmlpull.v1.XmlPullParserException;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
similarity index 96%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
index e31c601..c7485a8 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/AcceptMethod.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/AcceptMethod.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 /**
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
similarity index 96%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
index a30c84f..08ad1c7 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/BaseObject.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/BaseObject.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import org.osgi.framework.BundleContext;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
similarity index 95%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
index fbac013..4082b3e 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level1Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level1Object.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import java.util.Map;
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
similarity index 91%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
index 732b030..72c3236 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/Level3Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/Level3Object.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 import java.util.Map;
 
-import org.apache.felix.scr.impl.instances2.Level2Object;
+import org.apache.felix.scr.impl.metadata.instances2.Level2Object;
 import org.osgi.service.component.ComponentContext;
 
 
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
similarity index 94%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
index 3bfb7bb..8745490 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances/MethodNameException.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances/MethodNameException.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances;
+package org.apache.felix.scr.impl.metadata.instances;
 
 
 public final class MethodNameException extends RuntimeException
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
similarity index 87%
rename from scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java
rename to scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
index 456f35e..0e4c8e0 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/instances2/Level2Object.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/metadata/instances2/Level2Object.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.scr.impl.instances2;
+package org.apache.felix.scr.impl.metadata.instances2;
 
 
 import java.util.Map;
 
-import org.apache.felix.scr.impl.instances.Level1Object;
-import org.apache.felix.scr.impl.instances.MethodNameException;
+import org.apache.felix.scr.impl.metadata.instances.Level1Object;
+import org.apache.felix.scr.impl.metadata.instances.MethodNameException;
 import org.osgi.service.component.ComponentContext;
 
 
