Index: impl-base/src/test/java/org/jboss/declarchive/impl/base/test/ArchiveTestBase.java
===================================================================
--- impl-base/src/test/java/org/jboss/declarchive/impl/base/test/ArchiveTestBase.java	(revision 3505)
+++ impl-base/src/test/java/org/jboss/declarchive/impl/base/test/ArchiveTestBase.java	(working copy)
@@ -26,6 +26,7 @@
 import org.jboss.declarchive.api.Path;
 import org.jboss.declarchive.impl.base.MemoryMapArchiveImpl;
 import org.jboss.declarchive.impl.base.Validate;
+import org.jboss.declarchive.impl.base.asset.ArchiveAsset;
 import org.jboss.declarchive.impl.base.asset.ClassLoaderAsset;
 import org.jboss.declarchive.impl.base.io.IOUtil;
 import org.jboss.declarchive.impl.base.path.BasicPath;
@@ -267,9 +268,7 @@
 
       Asset fetchedAsset = archive.get(location);
 
-      Assert.assertTrue(
-            "Asset should be returned from path: " + location.get(), 
-            compareAssets(asset, fetchedAsset));
+      Assert.assertTrue("Asset should be returned from path: " + location.get(), compareAssets(asset, fetchedAsset));
    }
 
    /**
@@ -452,24 +451,22 @@
    {
       Archive<T> archive = getArchive();
       Archive<T> sourceArchive = createNewArchive();
-      Path location = new BasicPath("/", "test.properties");
-      Path locationTwo = new BasicPath("/", "test2.properties");
-      Asset asset = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test.properties");
-      Asset assetTwo = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test2.properties");
-      sourceArchive.add(location, asset).add(locationTwo, assetTwo);
 
       Path baseLocation = new BasicPath("somewhere");
 
       archive.add(baseLocation, sourceArchive);
 
-      Path expectedPath = new BasicPath(new BasicPath(baseLocation, sourceArchive.getName()), location);
-      Path expectedPathTwo = new BasicPath(new BasicPath(baseLocation, sourceArchive.getName()), locationTwo);
+      Path expectedPath = new BasicPath(baseLocation, sourceArchive.getName());
 
-      Assert.assertTrue("Asset should have been added to path: " + expectedPath.get(), this.compareAssets(archive
-            .get(expectedPath), asset));
+      Asset asset = archive.get(expectedPath);
+      Assert.assertNotNull("Asset should have been added to path: " + expectedPath.get(), asset);
+      Assert.assertTrue("An instance of ArchiveAsset should have been added to path: " + expectedPath.get(),
+            asset instanceof ArchiveAsset);
+      ArchiveAsset archiveAsset = ArchiveAsset.class.cast(asset);
 
-      Assert.assertTrue("Asset should have been added to path: " + expectedPathTwo.get(), this.compareAssets(archive
-            .get(expectedPathTwo), assetTwo));
+      Archive<?> nestedArchive = archiveAsset.getArchive();
+      Assert.assertEquals("Nested Archive should be same archive that was added", sourceArchive, nestedArchive);
+
    }
 
    //-------------------------------------------------------------------------------------||
Index: impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ZipExporterTestCase.java
===================================================================
--- impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ZipExporterTestCase.java	(revision 3505)
+++ impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ZipExporterTestCase.java	(working copy)
@@ -25,6 +25,7 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import org.jboss.declarchive.api.Archive;
 import org.jboss.declarchive.api.Asset;
 import org.jboss.declarchive.api.Path;
 import org.jboss.declarchive.api.export.ZipExporter;
@@ -70,7 +71,7 @@
 
       // Get a temp directory for the test
       File tempDirectory = createTempDirectory("testExportZip");
-      
+
       // Get an archive instance
       MemoryMapArchive archive = new MemoryMapArchiveImpl("testArchive.jar");
 
@@ -81,7 +82,42 @@
       Asset assetTwo = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test2.properties");
       Path pathTwo = new BasicPath("nested", "test2.properties");
       archive.add(pathTwo, assetTwo);
-      
+
+      // Export as Zip InputStream
+      InputStream zipStream = ZipExporter.exportZip(archive);
+
+      // Write zip content to temporary file 
+      ZipFile expectedZip = getExportedZipFile(archive, zipStream, tempDirectory);
+
+      // Validate entries were written out
+      assertAssetInZip(expectedZip, pathOne, assetOne);
+      assertAssetInZip(expectedZip, pathTwo, assetTwo);
+
+   }
+
+   /**
+    * Test to make sue an archive can be exported to Zip and nested archives are also in exported as nested Zip.
+    * @throws Exception
+    */
+   @Test
+   public void testExportNestedZip() throws Exception
+   {
+      log.info("testExportNestedZip");
+
+      // Get a temp directory for the test
+      File tempDirectory = createTempDirectory("testExportNestedZip");
+
+      // Get an archive instance
+      MemoryMapArchive archive = new MemoryMapArchiveImpl("testArchive.jar");
+
+      // Add some content
+      Asset assetOne = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test.properties");
+      Path pathOne = new BasicPath("test.properties");
+      archive.add(pathOne, assetOne);
+      Asset assetTwo = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test2.properties");
+      Path pathTwo = new BasicPath("nested", "test2.properties");
+      archive.add(pathTwo, assetTwo);
+
       // Add a nested archive for good measure
       MemoryMapArchive nestedArchive = new MemoryMapArchiveImpl("nestedArchive.jar");
       nestedArchive.add(pathOne, assetOne);
@@ -91,33 +127,29 @@
       // Export as Zip InputStream
       InputStream zipStream = ZipExporter.exportZip(archive);
 
-      // Validate the InputStream was created 
-      Assert.assertNotNull(zipStream);
+      // Write out and retrieve Zip 
+      ZipFile expectedZip = getExportedZipFile(archive, zipStream, tempDirectory);
 
-      // Create a temp file
-      File outFile = new File(tempDirectory, archive.getName());
-      
-      // Write Zip contents to file
-      writeOutFile(outFile, zipStream);
-
-      // Use standard ZipFile library to read in written Zip file
-      ZipFile expectedZip = new ZipFile(outFile);
-
       // Validate entries were written out
       assertAssetInZip(expectedZip, pathOne, assetOne);
       assertAssetInZip(expectedZip, pathTwo, assetTwo);
-      
+
       // Validate nested archive entries were written out
       Path nestedArchivePath = new BasicPath(nestedArchive.getName());
 
-      assertAssetInZip(expectedZip, new BasicPath(nestedArchivePath, pathOne), assetOne);
-      assertAssetInZip(expectedZip, new BasicPath(nestedArchivePath, pathTwo), assetTwo);
+      // Get nested archive entry from exported zip
+      ZipEntry nestedArchiveEntry = expectedZip.getEntry(nestedArchivePath.get());
+      
+      // Get inputstream for entry 
+      InputStream nesterArchiveStream = expectedZip.getInputStream(nestedArchiveEntry);
+
+      // Write out and retrieve Zip
+      ZipFile nestedZip = getExportedZipFile(nestedArchive, nesterArchiveStream, tempDirectory);
+
+      assertAssetInZip(nestedZip, pathOne, assetOne);
+      assertAssetInZip(nestedZip, pathTwo, assetTwo);
    }
 
-   //-------------------------------------------------------------------------------------||
-   // Internal Helper Methods ------------------------------------------------------------||
-   //-------------------------------------------------------------------------------------||
-
    /**
     * Ensure an archive is required to export.
     * 
@@ -137,6 +169,28 @@
       }
    }
 
+   //-------------------------------------------------------------------------------------||
+   // Internal Helper Methods ------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   private ZipFile getExportedZipFile(Archive<?> archive, InputStream zipStream, File tempDirectory) throws Exception
+   {
+
+      // Validate the InputStream was created 
+      Assert.assertNotNull(zipStream);
+
+      // Create a temp file
+      File outFile = new File(tempDirectory, archive.getName());
+
+      // Write Zip contents to file
+      writeOutFile(outFile, zipStream);
+
+      // Use standard ZipFile library to read in written Zip file
+      ZipFile expectedZip = new ZipFile(outFile);
+
+      return expectedZip;
+   }
+
    /**
     * Assert an asset is actually in the Zip file
     * @throws IOException 
Index: impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ExplodedExporterTestCase.java
===================================================================
--- impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ExplodedExporterTestCase.java	(revision 3505)
+++ impl-base/src/test/java/org/jboss/declarchive/impl/base/export/ExplodedExporterTestCase.java	(working copy)
@@ -82,12 +82,61 @@
       Path pathTwo = new BasicPath("nested", "test2.properties");
       archive.add(pathTwo, assetTwo);
 
-      // Add a nested archive for good measure
+      // Export as Exploded directory
+      File explodedDirectory = ExplodedExporter.exportExploded(archive, tempDirectory);
+
+      // Validate the exploded directory was created 
+      Assert.assertNotNull(explodedDirectory);
+
+      // Assert the directory has the correct name
+      File expectedDirectory = new File(tempDirectory, archive.getName());
+      Assert.assertEquals(expectedDirectory, explodedDirectory);
+
+      // Validate entries were written out
+      assertAssetInExploded(explodedDirectory, pathOne, assetOne);
+      assertAssetInExploded(explodedDirectory, pathTwo, assetTwo);
+
+   }
+
+   /**
+    * Ensure an archive exported to an exploded directory properly explodes nested archives.
+    * 
+    * @throws Exception
+    */
+   @Test
+   public void testExportNestedExploded() throws Exception
+   {
+      log.info("testExportNestedExploded");
+
+      // Get a temp directory
+      File tempDirectory = createTempDirectory("testExportNestedExploded");
+
+      // Get an archive instance
+      MemoryMapArchive archive = new MemoryMapArchiveImpl("testArchive.jar");
+
+      // Add a nested archive
       MemoryMapArchive nestedArchive = new MemoryMapArchiveImpl("nestedArchive.jar");
+
+      // Add some content
+      Asset assetOne = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test.properties");
+      Path pathOne = new BasicPath("test.properties");
       nestedArchive.add(pathOne, assetOne);
+      Asset assetTwo = new ClassLoaderAsset("org/jboss/declarchive/impl/base/asset/Test2.properties");
+      Path pathTwo = new BasicPath("nested", "test2.properties");
       nestedArchive.add(pathTwo, assetTwo);
+      
       archive.add(new BasicPath(), nestedArchive);
 
+      // Add an archive nested in a directory
+      MemoryMapArchive nestedArchiveTwo = new MemoryMapArchiveImpl("nestedArchive.jar");
+      Path nestedPath = new BasicPath("nested");
+
+      // Add some content
+      nestedArchiveTwo.add(pathOne, assetOne);
+      nestedArchiveTwo.add(pathTwo, assetTwo);
+
+      archive.add(nestedPath, nestedArchiveTwo);
+
       // Export as Exploded directory
       File explodedDirectory = ExplodedExporter.exportExploded(archive, tempDirectory);
 
@@ -98,16 +147,16 @@
       File expectedDirectory = new File(tempDirectory, archive.getName());
       Assert.assertEquals(expectedDirectory, explodedDirectory);
 
-      // Validate entries were written out
-      assertAssetInExploded(explodedDirectory, pathOne, assetOne);
-      assertAssetInExploded(explodedDirectory, pathTwo, assetTwo);
-
       // Validate nested archive entries were written out
       Path nestedArchivePath = new BasicPath(nestedArchive.getName());
 
       assertAssetInExploded(explodedDirectory, new BasicPath(nestedArchivePath, pathOne), assetOne);
       assertAssetInExploded(explodedDirectory, new BasicPath(nestedArchivePath, pathTwo), assetTwo);
+      
+      Path nestedArchivePathTwo = new BasicPath(nestedPath, nestedArchiveTwo.getName());
 
+      assertAssetInExploded(explodedDirectory, new BasicPath(nestedArchivePathTwo, pathOne), assetOne);
+      assertAssetInExploded(explodedDirectory, new BasicPath(nestedArchivePathTwo, pathTwo), assetTwo);
    }
 
    /**
Index: impl-base/src/main/java/org/jboss/declarchive/impl/base/asset/ArchiveAsset.java
===================================================================
--- impl-base/src/main/java/org/jboss/declarchive/impl/base/asset/ArchiveAsset.java	(revision 0)
+++ impl-base/src/main/java/org/jboss/declarchive/impl/base/asset/ArchiveAsset.java	(revision 0)
@@ -0,0 +1,34 @@
+package org.jboss.declarchive.impl.base.asset;
+
+import java.io.InputStream;
+
+import org.jboss.declarchive.api.Archive;
+import org.jboss.declarchive.api.Asset;
+import org.jboss.declarchive.api.export.ZipExporter;
+
+public class ArchiveAsset implements Asset
+{
+   private final Archive<?> archive;
+
+   public ArchiveAsset(Archive<?> archive)
+   {
+      this.archive = archive;
+   }
+
+   @Override
+   public InputStream getStream()
+   {
+      // Get archive
+      Archive<?> archive = getArchive();
+      // Export archive as Zip inputstream
+      InputStream inputStream = ZipExporter.exportZip(archive);
+      // Return input strea
+      return inputStream;
+   }
+
+   public Archive<?> getArchive()
+   {
+      return archive;
+   }
+
+}
Index: impl-base/src/main/java/org/jboss/declarchive/impl/base/export/AbstractExporterDelegate.java
===================================================================
--- impl-base/src/main/java/org/jboss/declarchive/impl/base/export/AbstractExporterDelegate.java	(revision 3505)
+++ impl-base/src/main/java/org/jboss/declarchive/impl/base/export/AbstractExporterDelegate.java	(working copy)
@@ -90,7 +90,8 @@
          // Get Asset information
          final Path path = contentEntry.getKey();
          final Asset asset = contentEntry.getValue();
-         // Write asset content to file
+
+         // Process the asset 
          processAsset(path, asset);
       }
 
Index: impl-base/src/main/java/org/jboss/declarchive/impl/base/export/ExplodedExporterDelegate.java
===================================================================
--- impl-base/src/main/java/org/jboss/declarchive/impl/base/export/ExplodedExporterDelegate.java	(revision 3505)
+++ impl-base/src/main/java/org/jboss/declarchive/impl/base/export/ExplodedExporterDelegate.java	(working copy)
@@ -26,6 +26,8 @@
 import org.jboss.declarchive.api.Asset;
 import org.jboss.declarchive.api.Path;
 import org.jboss.declarchive.api.export.ArchiveExportException;
+import org.jboss.declarchive.api.export.ExplodedExporter;
+import org.jboss.declarchive.impl.base.asset.ArchiveAsset;
 import org.jboss.declarchive.impl.base.io.IOUtil;
 
 /**
@@ -96,6 +98,14 @@
          }
       }
 
+      // Handle Archive assets separately 
+      if (asset instanceof ArchiveAsset)
+      {
+         ArchiveAsset nesteArchiveAsset = ArchiveAsset.class.cast(asset);
+         processArchiveAsset(assetParent, nesteArchiveAsset);
+         return;
+      }
+
       try
       {
          if (log.isLoggable(Level.FINE))
@@ -130,6 +140,19 @@
    //-------------------------------------------------------------------------------------||
 
    /**
+    * Processes a nested archive by delegating to the ExplodedArchiveExporter
+    * @param parentDirectory
+    * @param nestedArchiveAsset
+    */
+   private void processArchiveAsset(File parentDirectory, ArchiveAsset nestedArchiveAsset)
+   {
+      // Get the nested archive
+      Archive<?> nestedArchive = nestedArchiveAsset.getArchive();
+
+      ExplodedExporter.exportExploded(nestedArchive, parentDirectory);
+   }
+
+   /**
     * Initializes the output directory
     * 
     * @param baseDirectory
Index: impl-base/src/main/java/org/jboss/declarchive/impl/base/ArchiveBase.java
===================================================================
--- impl-base/src/main/java/org/jboss/declarchive/impl/base/ArchiveBase.java	(revision 3505)
+++ impl-base/src/main/java/org/jboss/declarchive/impl/base/ArchiveBase.java	(working copy)
@@ -25,6 +25,7 @@
 import org.jboss.declarchive.api.Asset;
 import org.jboss.declarchive.api.AssetNotFoundException;
 import org.jboss.declarchive.api.Path;
+import org.jboss.declarchive.impl.base.asset.ArchiveAsset;
 import org.jboss.declarchive.impl.base.path.BasicPath;
 
 /**
@@ -154,8 +155,11 @@
       final String archiveName = archive.getName();
       final Path contentPath = new BasicPath(path, archiveName);
 
+      // Create ArchiveAsset 
+      ArchiveAsset archiveAsset = new ArchiveAsset(archive);
+
       // Delegate
-      return addContents(contentPath, archive);
+      return add(contentPath, archiveAsset);
    }
 
    /**
