diff --git a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/IMetaDef.java b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/IMetaDef.java
index d5cfeaf..596681a 100644
--- a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/IMetaDef.java
+++ b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/IMetaDef.java
@@ -62,8 +62,11 @@
 	
 	public static final String attachment = "attachment"; 						//$NON-NLS-1$
 	
+	//Feature 48405 : Improvements to standards mapping
 	public static final String treeBrowser = "treeBrowser"; 						//$NON-NLS-1$
 	
+	public static final String generateTreebrowserFolder = "generateTreebrowserFolder"; 						//$NON-NLS-1$
+	
 	//APIs
 	public String getName();
 	
diff --git a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/internal/ExtendedReferenceImpl.java b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/internal/ExtendedReferenceImpl.java
index 1bba756..8973f4a 100644
--- a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/internal/ExtendedReferenceImpl.java
+++ b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/meta/internal/ExtendedReferenceImpl.java
@@ -28,6 +28,8 @@
 	
 	private boolean createUDTChild;
 	
+	private boolean generateTreebrowserFolder;
+	
 	private ExtendedOppositeImpl opposite;
 
 	public ExtendedReferenceImpl(MetaElement parent) {
@@ -76,6 +78,8 @@
 
 		createUDTChild = new Boolean(element.getAttribute(IMetaDef.treeBrowser));
 		
+		generateTreebrowserFolder = new Boolean(element.getAttribute(IMetaDef.generateTreebrowserFolder));
+		
 		qualifiedReferences = new ArrayList<QualifiedReference>();
 		List<Element> rqElements = XMLUtil.getChildElementsByTagName(element, IMetaDef.REFERENCE_QUALIFIERS);
 		if (rqElements == null || rqElements.isEmpty()) {
@@ -94,6 +98,10 @@
 	public boolean isCreateUDTChild() {
 		return createUDTChild;
 	}
+	
+	public boolean isGenerateTreebrowserFolder() {
+		return generateTreebrowserFolder;
+	}
 
 	public List<String> getValueTypes() {		
 		return valueTypes;
diff --git a/1.5/plugins/org.eclipse.epf.publish.layout/layout/xsl/resources.properties b/1.5/plugins/org.eclipse.epf.publish.layout/layout/xsl/resources.properties
index fe38cf6..5275106 100644
--- a/1.5/plugins/org.eclipse.epf.publish.layout/layout/xsl/resources.properties
+++ b/1.5/plugins/org.eclipse.epf.publish.layout/layout/xsl/resources.properties
@@ -258,7 +258,7 @@
 fulfilledSlotsText=Fulfilled Slots
 fulfillingWorkProductsText=Fulfilling Work Products
 deliverableParentsText=Parent Deliverables
-practicesText=Parent Practices
+practicesText=Parent
 
 
 modelInfo_mandatoryInputText=Mandatory Input
diff --git a/1.5/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java b/1.5/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
index 8070a61..6014d75 100644
--- a/1.5/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
+++ b/1.5/plugins/org.eclipse.epf.publishing/src/org/eclipse/epf/publishing/services/ConfigurationViewBuilder.java
@@ -264,9 +264,9 @@
 		if (profiling) {
 			startTime = System.currentTimeMillis();
 		}
-		if (! ConfigurationHelper.serverMode) {
+//		if (! ConfigurationHelper.serverMode) {
 			publishReferenceElements();
-		}		
+//		}		
 		if (profiling) {
 			DebugTrace.print(this, "publishReferenceElements", //$NON-NLS-1$
 					(System.currentTimeMillis() - startTime) + " ms"); //$NON-NLS-1$
@@ -655,20 +655,28 @@
 	 * @return
 	 */
 	private Collection<?> getUDTReference(Object obj) {
-		Collection<?> result = null;
+		Collection<?> references = null;
 		if(obj instanceof Practice && PracticePropUtil.getPracticePropUtil().isUdtType((Practice)obj)){
-			Practice practice = (Practice)obj;
-			UserDefinedTypeMeta udtMeta = PracticePropUtil.getPracticePropUtil().getUdtMeta(practice);
-			ModifiedTypeMeta modifiedTypeMeta = LibraryEditUtil.getInstance().getModifiedType(udtMeta.getId());
-			if(modifiedTypeMeta != null){
+			//Practice practice = (Practice)obj;
+			//UserDefinedTypeMeta udtMeta = PracticePropUtil.getPracticePropUtil().getUdtMeta(practice);
+			//ModifiedTypeMeta modifiedTypeMeta = LibraryEditUtil.getInstance().getModifiedType(udtMeta.getId());
+			
+			MethodElement element = (MethodElement) LibraryUtil.unwrap(obj);
+			ModifiedTypeMeta meta = TypeDefUtil.getMdtMeta(element);
+			references = meta.getReferences();
+			
+			return references;
+			
+			
+			/*if(modifiedTypeMeta != null){
 				List<ExtendedAttribute> attributes = modifiedTypeMeta.getAttributes();
 				String flag = null;
 				if(flag != null && !new Boolean(flag)){
 					result = practice.getContentReferences();
 				}
-			}
+			}*/
 		}
-		return result;
+		return references;
 	}
 
 	/**
@@ -773,10 +781,13 @@
 		for(ExtendedReference reference:references){
 			ExtendedReferenceImpl referenceimpl = (ExtendedReferenceImpl)reference;
 			boolean createUDTChild = referenceimpl.isCreateUDTChild();
+			boolean generateTreebrowserFolder = referenceimpl.isGenerateTreebrowserFolder();
 			List<MethodElement> items = PropUtil.getPropUtil().getExtendedReferenceList(
 					element, referenceimpl, false);
-			if(createUDTChild){
+			if(createUDTChild && generateTreebrowserFolder){
 				createFolderBookmark(element, bm, referenceimpl.getName(), referenceimpl.getName(), items, true);
+			}else if (createUDTChild && !generateTreebrowserFolder) {
+				buildItems(items, bm);
 			}
 		}
 	}
