Index: gli/trunk/src/org/greenstone/gatherer/collection/CollectionManager.java
===================================================================
--- gli/trunk/src/org/greenstone/gatherer/collection/CollectionManager.java	(revision 18593)
+++ gli/trunk/src/org/greenstone/gatherer/collection/CollectionManager.java	(revision 18606)
@@ -419,5 +419,6 @@
 
     /** When basing a new collection on an existing one, we need to copy 
-     *	over some extra directories: images and macros  
+     *	over some extra directories: all except import, archives, building, index 
+     * really we just want images, macros, perllib, but there may also be eg style, or other dirs.
      */
     private boolean copyExtraBaseCollStuff(File new_coll_dir, File base_coll_dir) {
@@ -425,38 +426,32 @@
 	    return false;
 	}
-	DebugStream.println("Copying images and macros dirs from the base collection");
-	try {
-	    // do the images dir
-	    File base_coll_images = new File(base_coll_dir, "images");
-	    if (base_coll_images.isDirectory()) {
-		// copy all the images over
-		File new_coll_images = new File(new_coll_dir, "images");
-		new_coll_images.mkdirs();
-		
-		// copy the contents over
-		Gatherer.f_man.getQueue().copyDirectoryContents(base_coll_images, new_coll_images);
-	    }
-	}
-	catch (Exception e) {
-	    DebugStream.println("Couldn't copy over the images dir from the base collection: "+e.toString());
-	}
-	try {
-	    // do the macros dir
-	    File base_coll_macros = new File(base_coll_dir, "macros");
-	    if (base_coll_macros.isDirectory()) {
-		// copy all the macros over
-		File new_coll_macros = new File(new_coll_dir, "macros");
-		new_coll_macros.mkdirs();
-		
-		// copy the contents over
-		Gatherer.f_man.getQueue().copyDirectoryContents(base_coll_macros, new_coll_macros);
-	    } 
-	}
-	catch (Exception e) {
-	    DebugStream.println("Couldn't copy over the macros dir from the base collection: "+e.toString());
-	}
+	DebugStream.println("Copying extra dirs from the base collection");
+	
+	
+	File subdirs[] = base_coll_dir.listFiles();
+	for (int i = 0; subdirs != null && i < subdirs.length; i++) {
+	  File subdir = subdirs[i];
+	  if (subdir.isDirectory()) {
+	    String dir_name = subdir.getName();
+	    // ignore those we don't need, (archives, buildng, index) and 
+	    // those we are handling in another place (import, etc, metadata)
+	    if (dir_name.startsWith ("import") || dir_name.startsWith("archives") || dir_name.startsWith("building") || dir_name.startsWith("index") || dir_name.startsWith("etc") || dir_name.startsWith("metadata") || dir_name.startsWith("log") || dir_name.startsWith("tmp")) {
+	      continue;
+	    }
+	    try {
+	      // copy the directory
+	      File new_coll_subdir = new File(new_coll_dir, dir_name);
+	      new_coll_subdir.mkdirs();
+	      Gatherer.f_man.getQueue().copyDirectoryContents(subdir, new_coll_subdir);
+	    }
+	    catch (Exception e) {
+	      DebugStream.println("Couldn't copy over the" + subdir+" dir from the base collection: "+e.toString());
+	    }
+	  }
+	}
+
 	return true;
     }
-
+  
     /** Used to set the current collection to the given collection. Note that this call should -always- be proceeded by a ready call, and if the collection is ready and the saved flag is unset then the user should be prompted to save. Also note that this method creates yet another GShell to run buildcol.pl.
      * @param description a description of the collection as a String
@@ -613,11 +608,13 @@
 		}
 	    }
-
-	    // Load the default metadata sets
-	    addDefaultMetadataSets();
-
-	    // Make sure we always have the extracted metadata set
-	    addRequiredMetadataSets();
-
+	    else {
+	      // only load metadata sets here if we have not based the collection on any other.
+	      // Load the default metadata sets
+	      addDefaultMetadataSets();
+	      
+	      // Make sure we always have the extracted metadata set
+	      addRequiredMetadataSets();
+	    }
+	    
 	    collection.cdm = new CollectionDesignManager(new File(getLoadedCollectionCfgFilePath()));
 
