Index: main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java	(revision 24367)
@@ -1138,5 +1138,5 @@
 	  value_str = "";
 	  for (int k=0; k<=values.length-1; k++) {
-	    if(values[k].startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+	    if(values[k].startsWith (StaticStrings.EXTRACTED_NAMESPACE) && values[k].indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	      values[k] = values[k].substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
 	    }
@@ -1253,9 +1253,9 @@
 	if (name_str != null && name_str.equals (StaticStrings.METADATA_STR)) {
                     
-	  // The metadata argument is the fully qualified name of a metadata element, so if it contains a namespace, remove the extracted metadata namespace as the build process doesn't know about it.
+	  // The metadata argument is the fully qualified name of a metadata element, so if it contains a namespace, remove the extracted metadata namespace as the build process doesn't know about it, but ONLY if it is not embedded metadata (e.g. ex.dc.*)
 	  String[] values = value_str.split (StaticStrings.COMMA_CHARACTER);
 	  value_str = "";
 	  for (int k=0; k<=values.length-1; k++) {
-	    if(values[k].startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+	    if(values[k].startsWith (StaticStrings.EXTRACTED_NAMESPACE) && values[k].indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	      values[k] = values[k].substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
 	    }
@@ -1383,5 +1383,5 @@
       String name_str = content_element.getAttribute (StaticStrings.NAME_ATTRIBUTE);
             
-      if(name_str.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+      if(name_str.startsWith (StaticStrings.EXTRACTED_NAMESPACE) && name_str.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	name_str = name_str.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
       }
@@ -1435,5 +1435,5 @@
       }
             
-      if(content.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+      if(content.startsWith (StaticStrings.EXTRACTED_NAMESPACE) && content.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	content = content.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
       }
@@ -1584,5 +1584,5 @@
       String meta_name = language_metadata.getAttribute (StaticStrings.NAME_ATTRIBUTE);
       Element language_meta = to.createElement (StaticStrings.LANGUAGE_METADATA_ELEMENT_STR);
-      if(meta_name.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+      if(meta_name.startsWith (StaticStrings.EXTRACTED_NAMESPACE) && meta_name.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	meta_name = meta_name.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
       }
@@ -1664,5 +1664,5 @@
 	}
                 
-	if(name_str.startsWith (StaticStrings.EXTRACTED_NAMESPACE)) {
+	if(name_str.startsWith (StaticStrings.EXTRACTED_NAMESPACE) && name_str.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 	  name_str = name_str.substring (StaticStrings.EXTRACTED_NAMESPACE.length ());
 	}
Index: main/trunk/gli/src/org/greenstone/gatherer/cdm/Index.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/cdm/Index.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/cdm/Index.java	(revision 24367)
@@ -166,5 +166,5 @@
 		if (source_object instanceof MetadataElement) {
 		    String full_element_name = ((MetadataElement)source_object).getFullName();
-		    if(full_element_name.startsWith(StaticStrings.EXTRACTED_NAMESPACE)) {
+		    if(full_element_name.startsWith(StaticStrings.EXTRACTED_NAMESPACE) && full_element_name.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 		       id_buffer.append(full_element_name.substring(StaticStrings.EXTRACTED_NAMESPACE.length()));
 		    }
Index: main/trunk/gli/src/org/greenstone/gatherer/cdm/IndexManager.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/cdm/IndexManager.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/cdm/IndexManager.java	(revision 24367)
@@ -970,5 +970,5 @@
 			    // Determine the metadatum value
 			    String name = source.toString();
-			    if(name.startsWith(StaticStrings.EXTRACTED_NAMESPACE)) {
+			    if(name.startsWith(StaticStrings.EXTRACTED_NAMESPACE) && name.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
 				name = name.substring(StaticStrings.EXTRACTED_NAMESPACE.length());
 			    }
Index: main/trunk/gli/src/org/greenstone/gatherer/cdm/PluginManager.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/cdm/PluginManager.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/cdm/PluginManager.java	(revision 24367)
@@ -119,5 +119,6 @@
 	    if (!plugin.isAbstract()) {
 		String plugin_name = plugin.getName();
-		if (!plugin_name.equals(StaticStrings.ARCPLUG_STR) && !plugin_name.equals(StaticStrings.RECPLUG_STR) && !plugin_name.equals(StaticStrings.METADATAXMLPLUG_STR)) {
+		if (!plugin_name.equals(StaticStrings.ARCPLUG_STR) && !plugin_name.equals(StaticStrings.RECPLUG_STR) 
+		    && !plugin_name.equals(StaticStrings.METADATAXMLPLUG_STR) && !plugin_name.equals(StaticStrings.EMBEDMETAPLUG_STR)) {
 		  available.add(plugin);
 		}
@@ -725,5 +726,5 @@
               remove.setEnabled(false);
             } 
-            
+
             else {
               // don't let people remove special plugins such GreenstoneXMLPlug and GreenstoneMETSPlug,
Index: main/trunk/gli/src/org/greenstone/gatherer/collection/LegacyCollectionImporter.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/collection/LegacyCollectionImporter.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/collection/LegacyCollectionImporter.java	(revision 24367)
@@ -132,6 +132,8 @@
     static private String mapLegacyMetadataElementName(String metadata_element_name)
     {
- 	// Remove the extracted namespace if it has been added
- 	if (metadata_element_name.startsWith(StaticStrings.EXTRACTED_NAMESPACE)) {
+ 	// Remove the extracted namespace if it has been added, but only
+	// if there are no subsequent namespaces following it (like ex.dc.*)
+	// since we want to preserve embedded metadata names as is.
+ 	if (metadata_element_name.startsWith(StaticStrings.EXTRACTED_NAMESPACE) && metadata_element_name.indexOf(StaticStrings.NS_SEP, StaticStrings.EXTRACTED_NAMESPACE.length()) == -1) {
  	    metadata_element_name = metadata_element_name.substring(StaticStrings.EXTRACTED_NAMESPACE.length());
  	}
Index: main/trunk/gli/src/org/greenstone/gatherer/metadata/MetadataElement.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/metadata/MetadataElement.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/metadata/MetadataElement.java	(revision 24367)
@@ -196,8 +196,14 @@
 
 
+    public boolean isGSExtractedMetadataElement()
+    {
+	return getNamespace().equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
+    }
+
     public boolean isExtractedMetadataElement()
     {
-	return getNamespace().equals(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
-    }
+	return getNamespace().startsWith(MetadataSetManager.EXTRACTED_METADATA_NAMESPACE);
+    }
+
 
     public boolean isPredefined() {
Index: main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 24358)
+++ main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 24367)
@@ -96,4 +96,5 @@
     static final public String DOCUMENT_STR = "document";
     static final public String DOT_CHARACTER = ".";
+    static final public String EMBEDMETAPLUG_STR = "EmbeddedMetadataPlugin";
     static final public String EMPTY_STR = "";
     static final public String ENGLISH_LANGUAGE_STR = "en";
@@ -156,5 +157,5 @@
     static final public String INT_STR = "int";
     static final public String IMPORT_STR = "import";
-    static final public String[] KEEP_PLUG = { "GreenstoneXMLPlugin", "GreenstoneMETSPlugin" };
+    static final public String[] KEEP_PLUG = { "GreenstoneXMLPlugin", "GreenstoneMETSPlugin", "EmbeddedMetadataPlugin" };
     static final public String LANGUAGE_ARGUMENT = "l=";
     static final public String LANGUAGE_ATTRIBUTE = "language";
