Index: src/org/fao/geonet/constants/Geonet.java
===================================================================
--- src/org/fao/geonet/constants/Geonet.java	(revision 5829)
+++ src/org/fao/geonet/constants/Geonet.java	(working copy)
@@ -45,6 +45,7 @@
 		public static final String SEARCH_Z3950_CLIENT = "z3950Client.xsl";
 		public static final String SEARCH_Z3950_SERVER = "z3950Server.xsl";
 		public static final String UPDATE_FIXED_INFO   = "update-fixed-info.xsl";
+		public static final String UPDATE_CHILD_FROM_PARENT_INFO = "update-child-from-parent-info.xsl";
 		public static final String EXTRACT_UUID        = "extract-uuid.xsl";
 		public static final String SET_UUID            = "set-uuid.xsl";
 		public static final String EXTRACT_THUMBNAILS  = "extract-thumbnails.xsl";
Index: src/org/fao/geonet/kernel/DataManager.java
===================================================================
--- src/org/fao/geonet/kernel/DataManager.java	(revision 5829)
+++ src/org/fao/geonet/kernel/DataManager.java	(working copy)
@@ -52,6 +52,7 @@
 
 import org.fao.geonet.constants.Edit;
 import org.fao.geonet.constants.Geonet;
+import org.fao.geonet.constants.Params;
 import org.fao.geonet.csw.common.Csw;
 import org.fao.geonet.kernel.harvest.HarvestManager;
 import org.fao.geonet.kernel.schema.MetadataSchema;
@@ -827,7 +828,8 @@
 	  */
 
 	public String createMetadata(Dbms dbms, String templateId, String groupOwner,
-										  SerialFactory sf, String source, int owner) throws Exception
+										  SerialFactory sf, String source, int owner,
+										  String parentUuid) throws Exception
 	{
 		String query = "SELECT schemaId, data FROM Metadata WHERE id="+ templateId;
 
@@ -845,7 +847,7 @@
 		//--- generate a new metadata id
 		int serial = sf.getSerial(dbms, "Metadata");
 
-		Element xml = updateFixedInfoNew(schema, Integer.toString(serial), Xml.loadString(data, false), uuid);
+		Element xml = updateFixedInfoNew(schema, Integer.toString(serial), Xml.loadString(data, false), uuid, parentUuid);
 
 		//--- store metadata
 
@@ -2170,7 +2172,7 @@
 
 	//--------------------------------------------------------------------------
 
-	public Element updateFixedInfoNew(String schema, String id, Element md, String uuid) throws Exception
+	public Element updateFixedInfoNew(String schema, String id, Element md, String uuid, String parentUuid) throws Exception
 	{
 		//--- setup environment - for new records
 
@@ -2178,7 +2180,8 @@
 
 		env.addContent(new Element("id")        			.setText(id));
 		env.addContent(new Element("uuid")      			.setText(uuid));
-		env.addContent(new Element("updateDateStamp")	.setText("yes"));
+		env.addContent(new Element("parentUuid")			.setText(parentUuid));
+		env.addContent(new Element("updateDateStamp")		.setText("yes"));
 		return updateFixedInfo(schema, md, env);
 	}
 
@@ -2206,7 +2209,100 @@
 	}
 
 	//--------------------------------------------------------------------------
+	
+	/**
+	 * Update all children of the selected parent. Some elements are protected
+	 * in the children according to the stylesheet used in
+	 * xml/schemas/[SCHEMA]/update-child-from-parent-info.xsl.
+	 * 
+	 * Children MUST be editable and also in the same schema of the parent. 
+	 * If not, child is not updated. 
+	 * 
+	 * @param srvContext
+	 *            service context
+	 * @param parentUuid
+	 *            parent uuid
+	 * @param params
+	 *            parameters
+	 * @param children
+	 *            children
+	 * @return
+	 * @throws Exception
+	 */
+	public Set<String> updateChildren(ServiceContext srvContext,
+			String parentUuid, String[] children, Map<String, String> params)
+			throws Exception {
+		Dbms dbms = (Dbms) srvContext.getResourceManager().open(
+				Geonet.Res.MAIN_DB);
 
+		String parentId = params.get(Params.ID);
+		String parentSchema = params.get(Params.SCHEMA);
+
+		// --- get parent metadata in read/only mode
+		Element parent = getMetadata(srvContext, parentId, false);
+
+		Element env = new Element("update");
+		env.addContent(new Element("parentUuid").setText(parentUuid));
+		env.addContent(new Element("siteURL").setText(getSiteURL()));
+		env.addContent(new Element("parent").addContent(parent));
+
+		// Set of untreated children (out of privileges, different schemas)
+		Set<String> untreatedChildSet = new HashSet<String>();
+
+		// only get iso19139 records
+		for (String childId : children) {
+
+			// Check privileges
+			if (!accessMan.canEdit(srvContext, childId)) {
+				untreatedChildSet.add(childId);
+				Log.debug(Geonet.DATA_MANAGER, "Could not update child ("
+						+ childId + ") because of privileges.");
+				continue;
+			}
+
+			Element child = getMetadata(srvContext, childId, false);
+			String childSchema = child.getChild(Edit.RootChild.INFO,
+					Edit.NAMESPACE).getChildText(Edit.Info.Elem.SCHEMA);
+
+			// Check schema matching. CHECKME : this suppose that parent and
+			// child are in the same schema (even not profil different)
+			if (!childSchema.equals(parentSchema)) {
+				untreatedChildSet.add(childId);
+				Log.debug(Geonet.DATA_MANAGER, "Could not update child ("
+						+ childId + ") because schema (" + childSchema
+						+ ") is different from the parent one (" + parentSchema
+						+ ").");
+				continue;
+			}
+
+			Log.debug(Geonet.DATA_MANAGER, "Updating child (" + childId +") ...");
+
+			// --- setup xml element to be processed by XSLT
+
+			Element rootEl = new Element("root");
+			Element childEl = new Element("child").addContent(child.detach());
+			rootEl.addContent(childEl);
+			rootEl.addContent(env.detach());
+
+			// --- do an XSL transformation
+
+			String styleSheet = editLib.getSchemaDir(parentSchema)
+					+ Geonet.File.UPDATE_CHILD_FROM_PARENT_INFO;
+			Element childForUpdate = new Element("root");
+			childForUpdate = Xml.transform(rootEl, styleSheet, params);
+			
+			XmlSerializer.update(dbms, childId, childForUpdate, new ISODate()
+					.toString());
+
+			rootEl = null;
+		}
+
+		return untreatedChildSet;
+	}
+
+	
+	//--------------------------------------------------------------------------
+
 	private Element buildInfoElem(ServiceContext context, String id, String version) throws Exception
 	{
 		Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB);
Index: src/org/fao/geonet/kernel/harvest/harvester/ogcwxs/Harvester.java
===================================================================
--- src/org/fao/geonet/kernel/harvest/harvester/ogcwxs/Harvester.java	(revision 5829)
+++ src/org/fao/geonet/kernel/harvest/harvester/ogcwxs/Harvester.java	(working copy)
@@ -584,7 +584,7 @@
 														 params.uuid, date, date, 
 														 reg.uuid, 1, null);
 			
-			xml = dataMan.updateFixedInfoNew(schema, reg.id, xml, params.uuid);
+			xml = dataMan.updateFixedInfoNew(schema, reg.id, xml, params.uuid, null);
 			
 			int iId = Integer.parseInt(reg.id);
 			log.debug("    - Layer loaded in DB.");
Index: src/org/fao/geonet/services/metadata/Create.java
===================================================================
--- src/org/fao/geonet/services/metadata/Create.java	(revision 5829)
+++ src/org/fao/geonet/services/metadata/Create.java	(working copy)
@@ -24,6 +24,7 @@
 package org.fao.geonet.services.metadata;
 
 import jeeves.constants.Jeeves;
+import jeeves.exceptions.BadInputEx;
 import jeeves.interfaces.Service;
 import jeeves.resources.dbms.Dbms;
 import jeeves.server.ServiceConfig;
@@ -54,21 +55,41 @@
 	public Element exec(Element params, ServiceContext context) throws Exception
 	{
 		GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
-
-		String template  = Util.getParam(params, Params.ID);
+		DataManager   dm = gc.getDataManager();
+		Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB);
+		
+		String child = Util.getParam(params, Params.CHILD, "n");
+		String id = "";
+		String uuid = "";
+		
+		// does the request contain a UUID ?
+		try {
+			uuid = Util.getParam(params, Params.UUID);
+			// lookup ID by UUID
+			id = dm.getMetadataId(context, uuid);	
+		}
+		catch(BadInputEx x) {
+			try {
+				id = Util.getParam(params, Params.ID);
+				uuid = dm.getMetadataUuid(dbms, id);
+			}
+			// request does not contain ID
+			catch(BadInputEx xx) {
+				// give up
+				throw new Exception("Request must contain a UUID or an ID");
+			}		
+		}
+		
 		String groupOwner= Util.getParam(params, Params.GROUP);
 
 		//--- query the data manager
 
-		Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB);
+		String newId = dm.createMetadata(dbms, id, groupOwner, context.getSerialFactory(),
+												  gc.getSiteId(), context.getUserSession().getUserIdAsInt(), 
+												  (child.equals("n")?null:uuid));
 
-		DataManager dm = gc.getDataManager();
-
-		String id = dm.createMetadata(dbms, template, groupOwner, context.getSerialFactory(),
-												  gc.getSiteId(), context.getUserSession().getUserIdAsInt());
-
 		return new Element(Jeeves.Elem.RESPONSE)
-							.addContent(new Element(Geonet.Elem.ID).setText(id));
+							.addContent(new Element(Geonet.Elem.ID).setText(newId));
 	}
 }
 
Index: src/org/fao/geonet/services/metadata/UpdateChildren.java
===================================================================
--- src/org/fao/geonet/services/metadata/UpdateChildren.java	(revision 0)
+++ src/org/fao/geonet/services/metadata/UpdateChildren.java	(revision 0)
@@ -0,0 +1,107 @@
+//=============================================================================
+//===	Copyright (C) 2001-2007 Food and Agriculture Organization of the
+//===	United Nations (FAO-UN), United Nations World Food Programme (WFP)
+//===	and United Nations Environment Programme (UNEP)
+//===
+//===	This program is free software; you can redistribute it and/or modify
+//===	it under the terms of the GNU General Public License as published by
+//===	the Free Software Foundation; either version 2 of the License, or (at
+//===	your option) any later version.
+//===
+//===	This program is distributed in the hope that it will be useful, but
+//===	WITHOUT ANY WARRANTY; without even the implied warranty of
+//===	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+//===	General Public License for more details.
+//===
+//===	You should have received a copy of the GNU General Public License
+//===	along with this program; if not, write to the Free Software
+//===	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+//===
+//===	Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
+//===	Rome - Italy. email: geonetwork@osgeo.org
+//==============================================================================
+
+package org.fao.geonet.services.metadata;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import jeeves.constants.Jeeves;
+import jeeves.interfaces.Service;
+import jeeves.server.ServiceConfig;
+import jeeves.server.context.ServiceContext;
+import jeeves.utils.Util;
+
+import org.fao.geonet.GeonetContext;
+import org.fao.geonet.constants.Geonet;
+import org.fao.geonet.kernel.DataManager;
+import org.jdom.Element;
+
+
+//=============================================================================
+
+/** 
+* A simple service that returns all metadata find by the searcher that can be added
+* This simple search are not stored in session and doesn't alter other search 
+* (using paging, ...)
+* 
+* @see search parameters
+*/
+
+public class UpdateChildren implements Service
+{
+	//--------------------------------------------------------------------------
+	//---
+	//--- Init
+	//---
+	//--------------------------------------------------------------------------
+
+	public void init(String appPath, ServiceConfig params) throws Exception
+	{}
+
+	//--------------------------------------------------------------------------
+	//---
+	//--- API
+	//---
+	//--------------------------------------------------------------------------
+
+	public Element exec(Element params, ServiceContext context) throws Exception
+	{
+		String parentUuid = Util.getParam(params,"parentUuid");
+		String childrenIds = Util.getParam(params, "childrenIds");
+		
+		// Transform params element into Map<String, String> for xsl transformation
+		List<Element> lstParams = params.getChildren();
+		Map<String, String> parameters = new HashMap<String, String>();
+		for (Element param : lstParams) {
+			parameters.put(param.getName(), param.getTextTrim());
+		}
+		
+		// Handle children IDs.
+		String[] children = childrenIds.split(",");
+		
+		// Update children
+		GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);
+		DataManager   dm = gc.getDataManager();
+
+		Set<String> untreatedChildren = dm.updateChildren(context, parentUuid, children, parameters);
+		
+		Element response = new Element(Jeeves.Elem.RESPONSE);
+		int treatedChildren = children.length;
+		String untreatedReport = "";
+		if (untreatedChildren.size() != 0) {
+			treatedChildren = children.length - untreatedChildren.size();
+			untreatedReport = untreatedChildren.size() +" child/children not updated";
+			for (String id : untreatedChildren)
+				untreatedReport += ", "+id;
+		}
+		
+		String report = treatedChildren + " child/children updated for metadata " + parentUuid + ". " + untreatedReport;
+		
+		return response.setText(report); 
+	}
+}
+
+//=============================================================================
\ No newline at end of file
Index: web/geonetwork/geonetwork.css
===================================================================
--- web/geonetwork/geonetwork.css	(revision 5897)
+++ web/geonetwork/geonetwork.css	(working copy)
@@ -8,7 +8,7 @@
 	font-size: 100%; /* without this font sizes are not inherited correctly */
 }
 
-body {
+body, div {
 	font-family: Verdana, Arial, Helvetica, sans-serif;
 	font-size: 9pt;
 	margin: 0px;
@@ -463,6 +463,7 @@
     opacity: .9;
     filter: alpha(opacity=90);
     -moz-opacity: 0.9;
+    z-index:1;
 }
 
 .oAcEle button {
@@ -875,3 +876,20 @@
 .validationReportIcon { background-image: url('images/schematron.gif') !important; }
 .shortcutHelpIcon { background-image: url('images/schematron.gif') !important; }
 .linkIcon { background-image: url('images/link.png') !important; }
+
+
+div.modalbox{
+    padding: 3px;
+}
+
+div.modalbox * label {
+    padding-left: 5px;
+}
+
+div.modalbox * li {
+    font-size: small
+}
+
+div.modalbox * li * li {
+    font-size: smaller
+}
\ No newline at end of file
Index: web/geonetwork/WEB-INF/config-metadata.xml
===================================================================
--- web/geonetwork/WEB-INF/config-metadata.xml	(revision 5829)
+++ web/geonetwork/WEB-INF/config-metadata.xml	(working copy)
@@ -311,6 +311,17 @@
 				<xml name="info" file="xml/metadata-massiveUpdatePrivileges.xml" />
 			</output>
 		</service>
+		
+		<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+		<!-- Update child -->
+		
+		<service name="metadata.massive.children.form">
+			<output sheet="metadata-children.xsl"/>
+		</service>
+		
+		<service name="metadata.massive.update.children">
+			<class name=".services.metadata.UpdateChildren"/>
+		</service>
 
 		<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
 
Index: web/geonetwork/WEB-INF/user-profiles.xml
===================================================================
--- web/geonetwork/WEB-INF/user-profiles.xml	(revision 5829)
+++ web/geonetwork/WEB-INF/user-profiles.xml	(working copy)
@@ -156,6 +156,8 @@
 		<allow service="metadata.update.finish"/>
 		<allow service="metadata.update.forget"/>
 		<allow service="metadata.update.forgetandfinish"/>
+		<allow service="metadata.massive.children.form"/>
+		<allow service="metadata.massive.update.children"/>
 		<allow service="metadata.validate"/>
 		<allow service="metadata.processing"/>
 		<allow service="xml.metadata.processing"/>
Index: web/geonetwork/loc/en/xml/strings.xml
===================================================================
--- web/geonetwork/loc/en/xml/strings.xml	(revision 5829)
+++ web/geonetwork/loc/en/xml/strings.xml	(working copy)
@@ -10,6 +10,37 @@
 	<ru>Русский</ru> <!-- Do not translate! -->
     <pt>Рortuguês</pt> <!-- Do not translate! -->
     
+	<otherActions>Other actions</otherActions>
+	<createChild>Create child</createChild>
+	<updateChildren>Update children</updateChildren>
+	<updateChildrenOk>Children updated</updateChildrenOk>
+	<updateChildrenFailed>Children update failed</updateChildrenFailed>
+	<massiveUpdateChildrenTitle>Update children</massiveUpdateChildrenTitle>
+	<updateMode>Choose the strategy applied for children update from parent : </updateMode>
+	<addMode>Add sections</addMode>
+	<replaceMode>Replace sections</replaceMode>
+	<updateChildrenHelp>
+		<div>
+			<h2>More details</h2>
+			Update all children related to current metadata record. Select the
+			strategy to be applied on each main sections.
+			<br/>
+			<br/>
+			<b>Add</b> will preserve child section and add the parent equivalent
+			section after the child ones.
+			<b>Replace </b> will remove child section by parent equivalent section.
+			<br/>
+			<br/>
+			Children identifier, character set, language, parent identifier,
+			hierarchy level, dataset URI and identification section (excluding
+			extent and keywords) are always preserved.
+			Parent locales are always replaced.
+			<br/>
+			<b>Distribution and maintenance section</b> are always replaced (even
+			in add mode) because
+			ISO19115 does not allow to have more than one.
+		</div>
+	</updateChildrenHelp>
 	<shortcutHelp js="true">Help on shortcuts ?</shortcutHelp>
 	<helpShortcutsEditor>
 		<h2>Shortcuts in editing mode:</h2>
Index: web/geonetwork/loc/fr/xml/strings.xml
===================================================================
--- web/geonetwork/loc/fr/xml/strings.xml	(revision 5829)
+++ web/geonetwork/loc/fr/xml/strings.xml	(working copy)
@@ -10,6 +10,60 @@
 	<ru>Русский</ru> <!-- Do not translate! -->
 	<pt>Рortuguês</pt> <!-- Do not translate! -->
 
+	<updateChildrenHelp>
+		<div>
+		Mettre à jour les enfants associés à la métadonnée. Choisir la
+		stratégie à appliquer pour les principales sections.
+		<br/>
+		<br/>
+		<b>Ajout</b> conserve les sections de l'enfant et ajoute à la suite
+		les sections correspondantes du parent.
+		<b>Remplace </b> supprime les sections de l'enfant et les remplaces
+		par les sections correspondates issues du parent.
+		<br/>
+		<br/>
+		L'identifiant de l'enfant, le jeu de caractère, la langue,
+		l'identifiant du parent, l'URI et la section identification (à
+		l'exception de l'étendue et des mots clés) sont toujours conservés.
+		Les langues du parents sont toujours utilisées.
+		<br/>
+		Les sections <b>distribution et maintenance</b> sont toujours
+		remplacées (même en mode ajout) car l'
+		ISO19115 n'autorise pas d'avoir plus d'une de ces deux sections.
+		</div>
+	</updateChildrenHelp>
+	
+	<createChild>Créer un enfant</createChild>
+	<updateChildren>Mettre à jour les enfants</updateChildren>
+	<updateChildrenOk>Enfants mis à jour</updateChildrenOk>
+	<updateChildrenFailed>Echec de la mise à jour</updateChildrenFailed>
+	<massiveUpdateChildrenTitle>Mettre à jour les enfants</massiveUpdateChildrenTitle>
+	<updateMode>Choisir la stratégie de mise à jour : </updateMode>
+	<addMode>Ajouter les sections</addMode>
+	<replaceMode>Remplacer les sections</replaceMode>
+	<updateChildrenHelp>
+		<div>
+			<h2>Plus d'informations</h2>
+			Mettre à jour l'ensemble des enfants pour la métadonnée en cours. Choisir
+			la stratégie à appliquer pour l'ensemble des sections.
+			<br/>
+			<br/>
+			<b>Ajouter</b> conservera la section correspondante de l'enfant et ajoutera
+			celle du parent.
+			<b>Remplacer </b> supprimera la section correspondante de l'enfant
+			par celle du parent.
+			<br/>
+			<br/>
+			L'identifiant de l'enfant, le jeux de caractère, la langue, l'identifiant du
+			parent, le niveau de hiérarchie, l'URI et la section identification
+			(à l'exception de l'étendue et des mots clés) sont toujours conservés.
+			<br/>
+			Les sections <b>distribution et maintenance</b> sont toujours remplacées
+			(y compris en mode ajout) car l'ISO19115 impose la présence d'une seule
+			de ces sections.
+		</div>
+	</updateChildrenHelp>
+	
 	<shortcutHelp>Aide pour les raccourcis ?</shortcutHelp>
 	<helpShortcutsEditor> 
 		<h2>Raccourcis pour l'édition:</h2>
Index: web/geonetwork/scripts/editor/metadata-show.js
===================================================================
--- web/geonetwork/scripts/editor/metadata-show.js	(revision 5897)
+++ web/geonetwork/scripts/editor/metadata-show.js	(working copy)
@@ -128,4 +128,50 @@
 					}
 				);
 			}
+			
+			function massiveUpdateChildren(service, title, width) {
+				var url = getGNServiceURL(service);
+				Modalbox.show(url,{title: title, width: width});
+			}
+				
+			function updateChildren(div, url, onFailureMsg) {
+				
+				var pars = "&id="+$('id').value+"&parentUuid="+$('parentUuid').value+
+				"&schema="+$('schema').value+"&childrenIds="+$('childrenIds').value;
+				
+				// handle checkbox values
+				var boxes = $(div).getElementsBySelector('input[type="checkbox"]');
+				boxes.each( function(s) {
+					if (s.checked) {
+						pars += "&"+s.name+"=true";
+					}
+				});
+				
+				// handle radio value
+				var radios = $(div).getElementsBySelector('input[type="radio"]');
+				radios.each ( function(radio) {
+				    if(radio.checked) {
+				        pars += "&"+radio.name+"="+radio.value;
+				    }
+				});
+				
+				Ext.Ajax.request ({
+					url: Env.locService + "/" + url,
+					method: 'GET',
+					params: pars,
+					success: function(result, request) {
+						var xmlNode = result.responseXML;
+						if (xmlNode.childNodes.length != 0 &&
+								xmlNode.childNodes[0].localName == "response"){
+							var response = xmlNode.childNodes[0].childNodes[0].nodeValue;
+							alert(response);
+							window.Modalbox.hide();
+						} else 
+							alert(onFailureMsg);
+					},
+					failure: function (result, request) { 
+						alert(onFailureMsg)
+					}
+				});
+			}
 
Index: web/geonetwork/xml/schemas/iso19139/update-child-from-parent-info.xsl
===================================================================
--- web/geonetwork/xml/schemas/iso19139/update-child-from-parent-info.xsl	(revision 0)
+++ web/geonetwork/xml/schemas/iso19139/update-child-from-parent-info.xsl	(revision 0)
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:gml="http://www.opengis.net/gml" xmlns:srv="http://www.isotc211.org/2005/srv"
+    xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:gmd="http://www.isotc211.org/2005/gmd"
+    xmlns:geonet="http://www.fao.org/geonetwork" exclude-result-prefixes="gmd srv">
+
+
+    <!-- Parameters -->
+    <xsl:param name="updateMode" select="'replace'"/>
+    
+    <xsl:param name="gmd-contact"/>
+    <xsl:param name="gmd-spatialRepresentationInfo"/>
+    <xsl:param name="gmd-referenceSystemInfo"/>
+    <xsl:param name="gmd-metadataExtensionInfo"/>
+    <xsl:param name="gmd-pointOfContact"/>
+    <xsl:param name="gmd-descriptiveKeywords"/>
+    <xsl:param name="gmd-extent"/>
+    <xsl:param name="gmd-contentInfo"/>
+    <xsl:param name="gmd-distributionInfo"/>
+    <xsl:param name="gmd-dataQualityInfo"/>
+    <xsl:param name="gmd-portrayalCatalogueInfo"/>
+    <xsl:param name="gmd-metadataConstraints"/>
+    <xsl:param name="gmd-applicationSchemaInfo"/>
+    <xsl:param name="gmd-metadataMaintenance"/>
+    
+    <!-- ================================================================= -->
+
+    <xsl:template match="/">
+        <xsl:apply-templates select="/root/update/parent/gmd:MD_Metadata"/>
+    </xsl:template>
+
+    <!-- ================================================================= -->
+
+    <xsl:template match="/root/update/parent/gmd:MD_Metadata">
+        <xsl:copy>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:fileIdentifier"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:language|gmd:characterSet"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:parentIdentifier"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:hierarchyLevel"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:hierarchyLevelName"/>
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-contact"/>
+                <xsl:with-param name="name" select="gmd:contact"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <xsl:copy-of select="gmd:dateStamp"/>
+            <xsl:copy-of select="gmd:metadataStandardName"/>
+            <xsl:copy-of select="gmd:metadataStandardVersion"/>
+            
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:dataSetURI"/>
+            <xsl:copy-of select="gmd:locale"/>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-spatialRepresentationInfo"/>
+                <xsl:with-param name="name" select="gmd:spatialRepresentationInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-referenceSystemInfo"/>
+                <xsl:with-param name="name" select="gmd:referenceSystemInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-metadataExtensionInfo"/>
+                <xsl:with-param name="name" select="gmd:metadataExtensionInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+            <!-- Identification -->
+            <gmd:identificationInfo>
+                <xsl:for-each select="/root/child/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification|
+	            /root/child/gmd:MD_Metadata/gmd:identificationInfo/*[@gco:isoType='gmd:MD_DataIdentification']|
+	            /root/child/gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification|
+        		/root/child/gmd:MD_Metadata/gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']">
+	            	<xsl:copy>
+	            		<xsl:copy-of select="@*"/>
+		                <xsl:copy-of select="gmd:citation"/>
+	                    <xsl:copy-of select="gmd:abstract"/>
+	
+	                    <!-- FIXME / TO BE DISCUSS following sections are preserved -->
+	                    <xsl:copy-of select="gmd:purpose"/>
+	                    <xsl:copy-of select="gmd:credit"/>
+	                    <xsl:copy-of select="gmd:status"/>
+	
+	                    <xsl:call-template name="process">
+	                        <xsl:with-param name="update" select="$gmd-pointOfContact"/>
+	                        <xsl:with-param name="name" select="/root/update/parent/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:pointOfContact"/>
+	                        <xsl:with-param name="mode" select="$updateMode"/>
+	                        <xsl:with-param name="subLevel" select="true()"/>
+	                    </xsl:call-template>
+	                    
+	                    <xsl:copy-of select="gmd:resourceMaintenance"/>
+	                    <xsl:copy-of select="gmd:graphicOverview"/>
+	                    <xsl:copy-of select="gmd:resourceFormat"/>
+	                    
+	                    <xsl:call-template name="process">
+	                        <xsl:with-param name="update" select="$gmd-descriptiveKeywords"/>
+	                        <xsl:with-param name="name" select="/root/update/parent/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:descriptiveKeywords"/>
+	                        <xsl:with-param name="mode" select="$updateMode"/>
+	                        <xsl:with-param name="subLevel" select="true()"/>
+	                    </xsl:call-template>
+	                    
+	                    <!-- FIXME / TO BE DISCUSS following sections are replaced -->
+	                    <xsl:copy-of select="gmd:resourceSpecificUsage"/>
+	                    <xsl:copy-of select="gmd:resourceConstraints"/>
+	                    <xsl:copy-of select="gmd:aggregationInfo"/>
+	                    <xsl:copy-of select="gmd:spatialRepresentationType"/>
+	                    <xsl:copy-of select="gmd:spatialResolution"/>
+	                    <xsl:copy-of select="gmd:langage"/>
+	                    <xsl:copy-of select="gmd:characterSet"/>
+	                    <xsl:copy-of select="gmd:topicCategory"/>
+	                    <xsl:copy-of select="gmd:environmentDescription"/>
+	                    
+	                    <xsl:call-template name="process">
+	                        <xsl:with-param name="update" select="$gmd-extent"/>
+	                        <xsl:with-param name="name" select="/root/update/parent/gmd:MD_Metadata/gmd:identificationInfo/*/gmd:extent"/>
+	                        <xsl:with-param name="mode" select="$updateMode"/>
+	                        <xsl:with-param name="subLevel" select="true()"/>
+	                    </xsl:call-template>
+	                    
+	                    <xsl:copy-of select="gmd:supplementalInformation"/>
+		            	<xsl:copy-of select="srv:*"/>
+		            	
+		            	<!-- Note: When applying this stylesheet
+			                to an ISO profil having a new substitute for
+			                MD_Identification, profil specific element copy.
+			            -->
+			            <xsl:for-each select="*[namespace-uri()!='http://www.isotc211.org/2005/gmd' and namespace-uri()!='http://www.isotc211.org/2005/srv']">
+			                <xsl:copy-of select="."/>
+			            </xsl:for-each>
+	            	</xsl:copy>
+	            </xsl:for-each>
+	        </gmd:identificationInfo>
+               
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-contentInfo"/>
+                <xsl:with-param name="name" select="gmd:contentInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+            <!-- Distribution -->
+            
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-distributionInfo"/>
+                <xsl:with-param name="name" select="gmd:distributionInfo"/>
+                <!-- Force mode to replace element due to schema cardinality -->
+                <xsl:with-param name="mode" select="'replace'"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+            <!-- Quality -->
+            
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-dataQualityInfo"/>
+                <xsl:with-param name="name" select="gmd:dataQualityInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-portrayalCatalogueInfo"/>
+                <xsl:with-param name="name" select="gmd:portrayalCatalogueInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-metadataConstraints"/>
+                <xsl:with-param name="name" select="gmd:metadataConstraints"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+            
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-applicationSchemaInfo"/>
+                <xsl:with-param name="name" select="gmd:applicationSchemaInfo"/>
+                <xsl:with-param name="mode" select="$updateMode"/>
+            </xsl:call-template>
+
+            <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+
+            <xsl:call-template name="process">
+                <xsl:with-param name="update" select="$gmd-metadataMaintenance"/>
+                <xsl:with-param name="name" select="gmd:metadataMaintenance"/>
+                <!-- Force mode to replace element due to schema cardinality -->
+                <xsl:with-param name="mode" select="'replace'"/>
+            </xsl:call-template>
+            
+            <!-- FIXME / TO BE DISCUSS following sections are preserved -->
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:series"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:describes"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:propertyType"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:featureType"/>
+            <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:featureAttribute"/>
+
+        </xsl:copy>
+    </xsl:template>
+    
+    
+    <!-- Generic template for children update -->
+    <!-- Depending on the choosen strategy to be applied on each main sections (mode) -->
+    <xsl:template name="process">
+        <xsl:param name="update" select="false()"/>
+        <xsl:param name="name"/>
+        <xsl:param name="mode"/>
+        <xsl:param name="subLevel" select="false()"></xsl:param>
+        
+        <!--<xsl:message>Update:<xsl:value-of select="$update"/>/Mode:<xsl:value-of select="$mode"/>/Sublevel:<xsl:value-of select="$subLevel"/>/<xsl:value-of select="name($name)"/></xsl:message>
+        -->
+        
+        <xsl:variable name="childElement">
+            <xsl:choose>
+                <xsl:when test="$subLevel=true()">
+                    <xsl:copy-of select="/root/child/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/*[name(.)=name($name)]|
+                    /root/child/gmd:MD_Metadata/gmd:identificationInfo/*[@gco:isoType='gmd:MD_DataIdentification']/*[name(.)=name($name)]|
+		            /root/child/gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/*[name(.)=name($name)]|
+    	    		/root/child/gmd:MD_Metadata/gmd:identificationInfo/*[@gco:isoType='srv:SV_ServiceIdentification']/*[name(.)=name($name)]"/>        
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:copy-of select="/root/child/gmd:MD_Metadata/*[name(.)=name($name)]"/>
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:variable>
+		
+		<xsl:choose>
+            <!-- Replacing elements from parent -->
+            <xsl:when test="$mode='replace' and $update='true'">
+                <xsl:copy-of select="$name"/>
+            </xsl:when>
+            <!-- Adding elements -->
+            <xsl:when test="$mode='add' and $update='true'">
+                <xsl:copy-of select="$childElement"/>
+                <xsl:copy-of select="$name"/>
+            </xsl:when>
+            <!-- Elements preserved from child-->
+            <xsl:otherwise>
+                <xsl:copy-of select="$childElement"/>
+            </xsl:otherwise>
+        </xsl:choose>
+        
+    </xsl:template>
+
+
+</xsl:stylesheet>
Index: web/geonetwork/xml/schemas/iso19139/update-fixed-info.xsl
===================================================================
--- web/geonetwork/xml/schemas/iso19139/update-fixed-info.xsl	(revision 5829)
+++ web/geonetwork/xml/schemas/iso19139/update-fixed-info.xsl	(working copy)
@@ -1,51 +1,63 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
-						xmlns:gml="http://www.opengis.net/gml"
-						xmlns:srv="http://www.isotc211.org/2005/srv"
-						xmlns:gmx="http://www.isotc211.org/2005/gmx"						
-						xmlns:gco="http://www.isotc211.org/2005/gco"
-						xmlns:gmd="http://www.isotc211.org/2005/gmd" exclude-result-prefixes="gmd">
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
+	xmlns:gml="http://www.opengis.net/gml" xmlns:srv="http://www.isotc211.org/2005/srv"
+	xmlns:gmx="http://www.isotc211.org/2005/gmx" xmlns:gco="http://www.isotc211.org/2005/gco"
+	xmlns:gmd="http://www.isotc211.org/2005/gmd" exclude-result-prefixes="gmd">
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="/root">
-		 <xsl:apply-templates select="gmd:MD_Metadata"/>
+		<xsl:apply-templates select="gmd:MD_Metadata"/>
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="gmd:MD_Metadata">
-		 <xsl:copy>
-			 	<xsl:apply-templates select="@*"/>
-		 	
-		 		<xsl:if test="not(gmd:fileIdentifier)">
-		 			<gmd:fileIdentifier>
-						<gco:CharacterString><xsl:value-of select="/root/env/uuid"/></gco:CharacterString>
-					</gmd:fileIdentifier>
-		 		</xsl:if>
-		 		
-			  <xsl:apply-templates select="node()"/>
-		 </xsl:copy>
-	</xsl:template>
-
-	<!-- ================================================================= -->
-	
-	<xsl:template match="gmd:fileIdentifier" priority="10">
 		<xsl:copy>
-			<gco:CharacterString><xsl:value-of select="/root/env/uuid"/></gco:CharacterString>
+			<xsl:apply-templates select="@*"/>
+			
+			<gmd:fileIdentifier>
+				<gco:CharacterString>
+					<xsl:value-of select="/root/env/uuid"/>
+				</gco:CharacterString>
+			</gmd:fileIdentifier>
+			
+			<xsl:copy-of select="gmd:language|gmd:characterSet"/>
+			
+			<xsl:choose>
+				<xsl:when test="/root/env/parentUuid!=''">
+					<gmd:parentIdentifier>
+						<gco:CharacterString>
+							<xsl:value-of select="/root/env/parentUuid"/>
+						</gco:CharacterString>
+					</gmd:parentIdentifier>
+				</xsl:when>
+				<xsl:when test="gmd:parentIdentifier">
+					<xsl:copy-of select="gmd:parentIdentifier"/>
+				</xsl:when>
+			</xsl:choose>
+			<xsl:apply-templates select="node()"/>
 		</xsl:copy>
 	</xsl:template>
-	
+
+
 	<!-- ================================================================= -->
-	
+	<!-- Do not process MD_Metadata header generated by previous template  -->
+
+	<xsl:template match="gmd:MD_Metadata/gmd:fileIdentifier|gmd:MD_Metadata/gmd:language|gmd:MD_Metadata/gmd:characterSet|gmd:MD_Metadata/gmd:parentIdentifier" priority="10"/>
+
+	<!-- ================================================================= -->
+
 	<xsl:template match="gmd:dateStamp">
 		<xsl:copy>
-			<gco:DateTime><xsl:value-of select="/root/env/changeDate"/></gco:DateTime>
+			<gco:DateTime>
+				<xsl:value-of select="/root/env/changeDate"/>
+			</gco:DateTime>
 		</xsl:copy>
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="gmd:metadataStandardName" priority="10">
 		<xsl:copy>
 			<gco:CharacterString>ISO 19115:2003/19139</gco:CharacterString>
@@ -53,7 +65,7 @@
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="gmd:metadataStandardVersion" priority="10">
 		<xsl:copy>
 			<gco:CharacterString>1.0</gco:CharacterString>
@@ -61,7 +73,7 @@
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="@gml:id">
 		<xsl:choose>
 			<xsl:when test="normalize-space(.)=''">
@@ -76,17 +88,6 @@
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	<!-- Do not allow to expand operatesOn sub-elements 
-		and constrain users to use uuidref attribute to link
-		service metadata to datasets. This will avoid to have
-		error on XSD validation. -->
-	<xsl:template match="srv:operatesOn">
-		<xsl:copy>
-			<xsl:copy-of select="@*"/>
-		</xsl:copy>
-	</xsl:template>
-
-	<!-- ================================================================= -->
 	<!-- Fix srsName attribute and generate epsg:4326 entry by default -->
 
 	<xsl:template match="@srsName">
@@ -101,9 +102,9 @@
 			</xsl:otherwise>
 		</xsl:choose>
 	</xsl:template>
-	
+
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="*[gco:CharacterString]">
 		<xsl:copy>
 			<xsl:copy-of select="@*[not(name()='gco:nilReason')]"/>
@@ -120,12 +121,14 @@
 	<!-- ================================================================= -->
 	<!-- codelists: set @codeList path -->
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="gmd:*[@codeListValue]">
 		<xsl:copy>
 			<xsl:apply-templates select="@*"/>
 			<xsl:attribute name="codeList">
-				<xsl:value-of select="concat('http://www.isotc211.org/2005/resources/codeList.xml#',local-name(.))"/>
+				<xsl:value-of
+					select="concat('http://www.isotc211.org/2005/resources/codeList.xml#',local-name(.))"
+				/>
 			</xsl:attribute>
 		</xsl:copy>
 	</xsl:template>
@@ -136,7 +139,9 @@
 		<xsl:copy>
 			<xsl:apply-templates select="@*"/>
 			<xsl:attribute name="codeList">
-				<xsl:value-of select="concat('http://www.isotc211.org/2005/iso19119/resources/Codelist/gmxCodelists.xml#',local-name(.))"/>
+				<xsl:value-of
+					select="concat('http://www.isotc211.org/2005/iso19119/resources/Codelist/gmxCodelists.xml#',local-name(.))"
+				/>
 			</xsl:attribute>
 		</xsl:copy>
 	</xsl:template>
@@ -145,20 +150,23 @@
 	<!-- online resources: download -->
 	<!-- ================================================================= -->
 
-	<xsl:template match="gmd:linkage[starts-with(following-sibling::gmd:protocol/gco:CharacterString,'WWW:DOWNLOAD-') and contains(following-sibling::gmd:protocol/gco:CharacterString,'http--download') and following-sibling::gmd:name]">
+	<xsl:template
+		match="gmd:linkage[starts-with(following-sibling::gmd:protocol/gco:CharacterString,'WWW:DOWNLOAD-') and contains(following-sibling::gmd:protocol/gco:CharacterString,'http--download') and following-sibling::gmd:name]">
 		<gmd:linkage>
 			<gmd:URL>
-				<xsl:value-of select="concat(/root/env/siteURL,'/resources.get?id=',/root/env/id,'&amp;fname=',following-sibling::gmd:name/gco:CharacterString,'&amp;access=private')"/>
+				<xsl:value-of
+					select="concat(/root/env/siteURL,'/resources.get?id=',/root/env/id,'&amp;fname=',following-sibling::gmd:name/gco:CharacterString,'&amp;access=private')"
+				/>
 			</gmd:URL>
 		</gmd:linkage>
 	</xsl:template>
 
 	<!-- ================================================================= -->
-	
+
 	<xsl:template match="@*|node()">
-		 <xsl:copy>
-			  <xsl:apply-templates select="@*|node()"/>
-		 </xsl:copy>
+		<xsl:copy>
+			<xsl:apply-templates select="@*|node()"/>
+		</xsl:copy>
 	</xsl:template>
 
 	<!-- ================================================================= -->
@@ -172,23 +180,26 @@
 			<xsl:copy-of select="@*"/>
 		</xsl:copy>
 	</xsl:template>
-	
-	
+
+
 	<!-- ================================================================= -->
 	<!-- Set local identifier to the first 2 letters of iso code. Locale ids
 		are used for multilingual charcterString using #iso2code for referencing.
 	-->
 	<xsl:template match="gmd:PT_Locale">
-		<xsl:variable name="id" select="upper-case(
+		<xsl:variable name="id"
+			select="upper-case(
 			substring(gmd:languageCode/gmd:LanguageCode/@codeListValue, 1, 2))"/>
-		
+
 		<xsl:choose>
 			<xsl:when test="@id and (normalize-space(@id)!='' and normalize-space(@id)=$id)">
 				<xsl:copy-of select="."/>
 			</xsl:when>
 			<xsl:otherwise>
 				<gmd:PT_Locale>
-					<xsl:attribute name="id"><xsl:value-of select="$id"/></xsl:attribute>
+					<xsl:attribute name="id">
+						<xsl:value-of select="$id"/>
+					</xsl:attribute>
 					<xsl:copy-of select="./*"/>
 				</gmd:PT_Locale>
 			</xsl:otherwise>
Index: web/geonetwork/xsl/metadata-children.xsl
===================================================================
--- web/geonetwork/xsl/metadata-children.xsl	(revision 0)
+++ web/geonetwork/xsl/metadata-children.xsl	(revision 0)
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+	
+	<xsl:import href="modal.xsl"/>
+
+	<!--
+	page content
+	-->
+	<xsl:template name="content">
+		<xsl:call-template name="formLayout">
+			<xsl:with-param name="title" select="/root/gui/strings/children"/>
+			<xsl:with-param name="content">
+
+				<div id="children" class="modalbox content" style="float:left;width:50%">
+					<input type="hidden" id="parentUuid" name="parentUuid" value="{/root/request/parentUuid}"/>
+					<input type="hidden" id="id" name="id" value="{/root/response/id}"/>
+					<input type="hidden" id="schema" name="schema" value="{/root/request/schema}"/>
+					<input type="hidden" id="childrenIds" name="childrenIds" value="{/root/request/childrenIds}"/>
+						
+					<span>
+						<input type="radio" name="updateMode" id="replace" value="replace" checked="checked"/>
+						<label for="replace"><xsl:value-of select="/root/gui/strings/replaceMode"/></label>
+						&#160;
+						<input type="radio" name="updateMode" value="add" id="add"/>
+						<label for="add"><xsl:value-of select="/root/gui/strings/addMode"/></label>
+					</span>
+					<br/>
+					<br/>
+					
+					<ul>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-contact" id="contact" checked="checked"/>
+							<label for="contact">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:contact']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd:identificationInfo" id="identificationInfo" disabled="disabled"/>
+							<label for="identificationInfo"> <!-- class="identificationInfo" -->
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:identificationInfo']/label"/>
+							</label>
+							<ul>
+								<li class="arrow">
+									<input type="checkbox" name="gmd-pointOfContact" id="pointOfContact" checked="checked"/>
+									<label for="pointOfContact">
+										<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:pointOfContact']/label"/>
+									</label>
+								</li>
+								<li class="arrow">
+									<input type="checkbox" name="gmd-descriptiveKeywords" id="descriptiveKeywords" checked="checked"/>
+									<label for="descriptiveKeywords">
+										<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:descriptiveKeywords']/label"/>
+									</label>
+								</li>
+								<li class="arrow">
+									<input type="checkbox" name="gmd-extent" id="extent" checked="checked"/>
+									<label for="extent">
+										<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:extent']/label"/>
+									</label>
+								</li>
+							</ul>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-metadataMaintenance" id="metadataMaintenance" />
+							<label for="metadataMaintenance">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:metadataMaintenance']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-metadataConstraints" id="metadataConstraints" checked="checked"/>
+							<label for="metadataConstraints">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:metadataConstraints']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-spatialRepresentationInfo" id="spatialRepresentationInfo" checked="checked"/>
+							<label for="spatialRepresentationInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:spatialRepresentationInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-referenceSystemInfo" id="referenceSystemInfo" checked="checked"/>
+							<label for="referenceSystemInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:referenceSystemInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-distributionInfo" id="distributionInfo" />
+							<label for="distributionInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:distributionInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-dataQualityInfo" id="dataQualityInfo" checked="checked"/>
+							<label for="dataQualityInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:dataQualityInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-applicationSchemaInfo" id="applicationSchemaInfo" checked="checked"/>
+							<label for="applicationSchemaInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:applicationSchemaInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-portrayalCatalogueInfo" id="portrayalCatalogueInfo" checked="checked"/>
+							<label for="portrayalCatalogueInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:portrayalCatalogueInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-contentInfo" id="contentInfo" checked="checked"/>
+							<label for="contentInfo">
+								<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:contentInfo']/label"/>
+							</label>
+						</li>
+						<li class="arrow">
+							<input type="checkbox" name="gmd-metadataExtensionInfo" id="metadataExtensionInfo" checked="checked"/>
+							<label for="metadataExtensionInfo">
+                            	<xsl:value-of select="/root/gui/iso19139/element[@name='gmd:metadataExtensionInfo']/label"/>
+                            </label>
+                        </li>
+					</ul>
+					<br/>
+					<div align="center">
+						<button class="content" onclick="updateChildren('children','metadata.massive.update.children','{/root/gui/strings/updateChildrenFailed}')">
+							<xsl:value-of select="/root/gui/strings/updateChildren"/>
+						</button>
+					</div>
+				</div>
+				<div style="float:right;width:40%">
+					<xsl:copy-of select="/root/gui/strings/updateChildrenHelp"/>
+				</div>
+			</xsl:with-param>
+		</xsl:call-template>
+	</xsl:template>
+</xsl:stylesheet>
Index: web/geonetwork/xsl/metadata-duplicate.xsl
===================================================================
--- web/geonetwork/xsl/metadata-duplicate.xsl	(revision 5829)
+++ web/geonetwork/xsl/metadata-duplicate.xsl	(working copy)
@@ -26,6 +26,8 @@
 	<xsl:template name="form">
 		<form name="createform" accept-charset="UTF-8" action="metadata.create" method="post">
 			<input name="id" type="hidden" value="{/root/response/id}"/>
+			<input name="uuid" type="hidden" value="{/root/response/uuid}"/>
+			<input name="child" type="hidden" value="{/root/response/child}"/>
 			<table>
 				<tr>
 					<td colspan="2">
Index: web/geonetwork/xsl/metadata-iso19139-utils.xsl
===================================================================
--- web/geonetwork/xsl/metadata-iso19139-utils.xsl	(revision 5829)
+++ web/geonetwork/xsl/metadata-iso19139-utils.xsl	(working copy)
@@ -212,14 +212,36 @@
 		        			</ul>
 		        		</xsl:if>
 		        		
-		        		<xsl:if test="$edit">
-		        			<img src="{/root/gui/url}/images/plus.gif"
-		        				alt="{/root/gui/strings/linkedParentMetadataHelp}" title="{/root/gui/strings/linkedParentMetadataHelp}" align="absmiddle"/>
-		        			<xsl:text> </xsl:text>
-		        			<a alt="{/root/gui/strings/linkedParentMetadataHelp}"
-		        				title="{/root/gui/strings/linkedParentMetadataHelp}"
-		        				href="javascript:doTabAction('metadata.update', 'metadata');"><xsl:value-of select="/root/gui/strings/addParent"/></a>
-		        		</xsl:if>
+		        		<xsl:choose>
+		        			<xsl:when test="$edit">
+		        				<img src="{/root/gui/url}/images/plus.gif"
+		        					alt="{/root/gui/strings/linkedParentMetadataHelp}" title="{/root/gui/strings/linkedParentMetadataHelp}" align="absmiddle"/>
+		        				<xsl:text> </xsl:text>
+		        				<a alt="{/root/gui/strings/linkedParentMetadataHelp}"
+		        					title="{/root/gui/strings/linkedParentMetadataHelp}"
+		        					href="javascript:doTabAction('metadata.update', 'metadata');"><xsl:value-of select="/root/gui/strings/addParent"/></a>
+		        			</xsl:when>
+		        			<xsl:otherwise>
+		        				<!-- update child option only for iso19139 schema based metadata and admin user -->
+		        				<!-- FIXME : on edit mode, we don't know how many child are here -->
+		        				<xsl:variable name="profile"  select="/root/gui/session/profile"/>
+		        				<xsl:variable name="childCount"  select="/root/gui/relation/children/response/summary/@count"/>
+		        				<xsl:variable name="childrenIds">
+		        					<xsl:for-each select="/root/gui/relation/children/response/MD_Metadata">
+		        						<xsl:value-of select="concat(geonet:info/id,',')"/>
+		        					</xsl:for-each>
+		        				</xsl:variable>
+		        				<xsl:if test="($profile = 'Administrator' or $profile = 'Editor' or $profile = 'Reviewer' or $profile = 'UserAdmin') and $childCount &gt; 0">
+		        					<img src="{/root/gui/url}/images/plus.gif"
+		        						alt="{/root/gui/strings/updateChildren}" title="{/root/gui/strings/updateChildren}" align="absmiddle"/>
+		        					<xsl:text> </xsl:text>
+		        					<a alt="{/root/gui/strings/updateChildren}" title="{/root/gui/strings/updateChildren}"
+		        						href="#" onclick="javascript:massiveUpdateChildren('metadata.massive.children.form?id={$metadata/geonet:info/id}&amp;schema={$metadata/geonet:info/schema}&amp;parentUuid={$metadata/geonet:info/uuid}&amp;childrenIds={$childrenIds}','{/root/gui/strings/massiveUpdateChildrenTitle}',800);">
+		        						<xsl:value-of select="/root/gui/strings/updateChildren"/>
+		        					</a>
+		        				</xsl:if>
+		        			</xsl:otherwise>
+		        		</xsl:choose>
 		        		<br/>
 		        		<br/>
 	        		</xsl:if>
Index: web/geonetwork/xsl/metadata-utils.xsl
===================================================================
--- web/geonetwork/xsl/metadata-utils.xsl	(revision 5829)
+++ web/geonetwork/xsl/metadata-utils.xsl	(working copy)
@@ -186,19 +186,37 @@
 			<button class="content" onclick="return doConfirmDelete('{/root/gui/locService}/metadata.delete?id={$metadata/geonet:info/id}', '{/root/gui/strings/confirmDelete}','{$ltitle}','{$metadata/geonet:info/id}', '{/root/gui/strings/deleteConfirmationTitle}')"><xsl:value-of select="/root/gui/strings/delete"/></button>
 		</xsl:if>
 			
-		<!-- privileges button -->
-		<xsl:if test="/root/gui/services/service/@name='metadata.admin.form'">
+		<xsl:if test="geonet:info/edit='true'">
 			&#160;
-			<xsl:variable name="privileges" select="concat(/root/gui/strings/setshowprivileges,' ',$ltitle)"/>
-			<button class="content" onclick="doOtherButton('{/root/gui/locService}/metadata.admin.form?id={$metadata/geonet:info/id}','{$privileges}',600)"><xsl:value-of select="/root/gui/strings/privileges"/></button>
-		</xsl:if>
+			<!-- =========================  -->
+			<!-- Add other actions list     -->
+			<button id="oAc{$metadata/geonet:info/id}" name="oAc{$metadata/geonet:info/id}" class="content" onclick="oActions('oAc',{$metadata/geonet:info/id});" style="width:150px;" title="{/root/gui/strings/otherActions}">
+				<img id="oAcImg{$metadata/geonet:info/id}" name="oAcImg{$metadata/geonet:info/id}" src="{/root/gui/url}/images/plus.gif" style="padding-right:3px;"/>
+				<xsl:value-of select="/root/gui/strings/otherActions"/>
+			</button>
 			
-		<!-- categories button -->
-		<xsl:if test="/root/gui/services/service/@name='metadata.category.form'">
-			&#160;
-			<xsl:variable name="categories" select="concat(/root/gui/strings/setshowcategories,' ',$ltitle)"/>
-			<button class="content" onclick="doOtherButton('{/root/gui/locService}/metadata.category.form?id={$metadata/geonet:info/id}','{$categories}',300)"><xsl:value-of select="/root/gui/strings/categories"/></button>
+			<div id="oAcEle{$metadata/geonet:info/id}" class="oAcEle" style="display:none;width:250px" onClick="oActions('oAc',{$metadata/geonet:info/id});">
+				
+				<!-- privileges button -->
+				<xsl:if test="/root/gui/services/service/@name='metadata.admin.form'">
+					<xsl:variable name="privileges" select="concat(/root/gui/strings/setshowprivileges,' ',$ltitle)"/>
+					<button onclick="doOtherButton('{/root/gui/locService}/metadata.admin.form?id={$metadata/geonet:info/id}','{$privileges}',600)"><xsl:value-of select="/root/gui/strings/privileges"/></button>
+				</xsl:if>
+				
+				<!-- categories button -->
+				<xsl:if test="/root/gui/services/service/@name='metadata.category.form'">
+					<xsl:variable name="categories" select="concat(/root/gui/strings/setshowcategories,' ',$ltitle)"/>
+					<button onclick="doOtherButton('{/root/gui/locService}/metadata.category.form?id={$metadata/geonet:info/id}','{$categories}',300)"><xsl:value-of select="/root/gui/strings/categories"/></button>
+				</xsl:if>
+				
+				<!-- Create child option only for iso19139 schema based metadata -->
+				<xsl:if test="contains(geonet:info/schema, 'iso19139')">
+					<button onclick="load('{/root/gui/locService}/metadata.duplicate.form?uuid={$metadata/geonet:info/uuid}&amp;child=y')"><xsl:value-of select="/root/gui/strings/createChild"/></button>
+				</xsl:if>
+				
+			</div>
 		</xsl:if>
+		
 	</xsl:template>
 
 	<!--
