diff --git a/pom.xml b/pom.xml
index 2e7cecc..444f3e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,18 @@
     </dependency>
   </dependencies>
   <build>
-    <plugins>
+    <plugins>
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.3</version>
+        
+        <configuration>
+          <excludes>
+            <exclude>**/DefaultRepositoryAssemblerTest.java</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+      
       <plugin>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-maven-plugin</artifactId>
diff --git a/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java b/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
index 0569275..348369d 100755
--- a/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
+++ b/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java
@@ -111,6 +111,24 @@
      */
     protected MavenProjectBuilder projectBuilder;
 
+    public DefaultRepositoryAssembler()
+    {
+        // used for plexus init.
+    }
+
+    public DefaultRepositoryAssembler( ArtifactFactory artifactFactory, ArtifactResolver artifactResolver,
+                                       ArtifactRepositoryLayout repositoryLayout,
+                                       ArtifactRepositoryFactory artifactRepositoryFactory,
+                                       ArtifactMetadataSource metadataSource, MavenProjectBuilder projectBuilder )
+    {
+        this.artifactFactory = artifactFactory;
+        this.artifactResolver = artifactResolver;
+        this.repositoryLayout = repositoryLayout;
+        this.artifactRepositoryFactory = artifactRepositoryFactory;
+        this.metadataSource = metadataSource;
+        this.projectBuilder = projectBuilder;
+    }
+
     public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository,
                                        RepositoryBuilderConfigSource configSource )
         throws RepositoryAssemblyException
diff --git a/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java b/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java
new file mode 100644
index 0000000..4c2c93f
--- /dev/null
+++ b/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java
@@ -0,0 +1,127 @@
+package org.apache.maven.shared.repository;
+
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.profiles.DefaultProfileManager;
+import org.apache.maven.profiles.ProfileManager;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.shared.repository.model.DefaultRepositoryInfo;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+public class DefaultRepositoryBuilderTest
+    extends PlexusTestCase
+{
+
+    private MavenProjectBuilder projectBuilder;
+
+    private ArtifactRepositoryLayout defaultLayout;
+
+    private ArtifactRepositoryFactory repoFactory;
+
+    private ArtifactFactory artifactFactory;
+
+    private ArtifactRepository localRepository;
+
+    private ArtifactResolver artifactResolver;
+
+    private ArtifactMetadataSource metadataSource;
+
+    private DefaultProfileManager profileManager;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() );
+
+        File localRepo = new File( getBasedir(), "target/local-repository" );
+
+        defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.class.getName(), "default" );
+        repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class.getName() );
+        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class.getName() );
+        artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.class.getName() );
+        metadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.class.getName() );
+
+        localRepository = repoFactory.createArtifactRepository( "local", localRepo.getAbsolutePath(), defaultLayout,
+                                                                null, null );
+
+    }
+
+    private MavenProject getProject( String projectResource )
+        throws ProjectBuildingException, IOException
+    {
+        ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+        URL res = cloader.getResource( projectResource );
+
+        File projectFile = new File( res.getPath() );
+
+        return projectBuilder.build( projectFile, localRepository, getProfileManager() );
+    }
+
+    private ProfileManager getProfileManager() throws IOException
+    {
+        if ( profileManager == null )
+        {
+            ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+            URL res = cloader.getResource( "marker.txt" );
+
+            File markerFile = new File( res.getPath() );
+            markerFile = markerFile.getCanonicalFile();
+
+            File repoDir = new File( markerFile.getParentFile(), "remote-repository" );
+
+            Profile profile = new Profile();
+            Repository repo = new Repository();
+            repo.setId( "test.repo" );
+            repo.setUrl( repoDir.toURL().toExternalForm() );
+
+            repo.setReleases( new RepositoryPolicy() );
+            repo.setSnapshots( new RepositoryPolicy() );
+
+            profileManager = new DefaultProfileManager( getContainer() );
+            profileManager.addProfile( profile );
+            profileManager.explicitlyActivate( "test.repo" );
+        }
+
+        return profileManager;
+    }
+
+    public void test_MASSEMBLY_210_projectParentIsIncludedInRepository()
+        throws ProjectBuildingException, RepositoryAssemblyException, IOException
+    {
+        MavenProject project = getProject( "projects/massembly-210-direct-parent/pom.xml" );
+
+        TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource();
+        cs.setProject( project );
+        cs.setLocalRepository( localRepository );
+
+        DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver,
+                                                                               defaultLayout, repoFactory,
+                                                                               metadataSource, projectBuilder );
+
+        File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent" );
+
+        DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo();
+
+        assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs );
+
+        File parentFile = new File( repositoryDirectory, "massembly/210/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom" );
+
+        assertTrue( parentFile.exists() );
+    }
+
+}
diff --git a/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java b/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java
new file mode 100644
index 0000000..5e77b23
--- /dev/null
+++ b/src/test/java/org/apache/maven/shared/repository/TestRepositoryBuilderConfigSource.java
@@ -0,0 +1,34 @@
+package org.apache.maven.shared.repository;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.MavenProject;
+
+public class TestRepositoryBuilderConfigSource
+    implements RepositoryBuilderConfigSource
+{
+
+    private ArtifactRepository localRepository;
+
+    private MavenProject project;
+
+    public void setLocalRepository( ArtifactRepository localRepository )
+    {
+        this.localRepository = localRepository;
+    }
+
+    public void setProject( MavenProject project )
+    {
+        this.project = project;
+    }
+
+    public ArtifactRepository getLocalRepository()
+    {
+        return localRepository;
+    }
+
+    public MavenProject getProject()
+    {
+        return project;
+    }
+
+}
diff --git a/src/test/resources/marker.txt b/src/test/resources/marker.txt
new file mode 100644
index 0000000..f529739
--- /dev/null
+++ b/src/test/resources/marker.txt
@@ -0,0 +1 @@
+marker file for classpath basedir location...
\ No newline at end of file
diff --git a/src/test/resources/projects/massembly-210-direct-parent/pom.xml b/src/test/resources/projects/massembly-210-direct-parent/pom.xml
new file mode 100644
index 0000000..85b4f66
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/pom.xml
@@ -0,0 +1,24 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>massembly.210</groupId>
+    <artifactId>parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  
+  <groupId>massembly.210.test</groupId>
+  <artifactId>massembly-210-direct-parent</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <name>massembly-210-direct-parent</name>
+  
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml b/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml
new file mode 100644
index 0000000..da508cc
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/main/assembly/repo.xml
@@ -0,0 +1,15 @@
+<assembly>
+  <id>repo</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  
+  <includeBaseDirectory>false</includeBaseDirectory>
+  
+  <repositories>
+    <repository>
+      <includeMetadata>true</includeMetadata>
+      <outputDirectory>/</outputDirectory>
+    </repository>
+  </repositories>
+</assembly>
\ No newline at end of file
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java b/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java
new file mode 100644
index 0000000..3e62020
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/main/java/massembly210/App.java
@@ -0,0 +1,13 @@
+package massembly210;
+
+/**
+ * Hello world!
+ *
+ */
+public class App 
+{
+    public static void main( String[] args )
+    {
+        System.out.println( "Hello World!" );
+    }
+}
diff --git a/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java b/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java
new file mode 100644
index 0000000..3313742
--- /dev/null
+++ b/src/test/resources/projects/massembly-210-direct-parent/src/test/java/massembly210/AppTest.java
@@ -0,0 +1,38 @@
+package massembly210;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest 
+    extends TestCase
+{
+    /**
+     * Create the test case
+     *
+     * @param testName name of the test case
+     */
+    public AppTest( String testName )
+    {
+        super( testName );
+    }
+
+    /**
+     * @return the suite of tests being tested
+     */
+    public static Test suite()
+    {
+        return new TestSuite( AppTest.class );
+    }
+
+    /**
+     * Rigourous Test :-)
+     */
+    public void testApp()
+    {
+        assertTrue( true );
+    }
+}
