Index: src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java
===================================================================
--- src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java	(revision 543581)
+++ src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorUpdater.java	(working copy)
@@ -210,13 +210,13 @@
                                    _confMappingOverride = Boolean.valueOf(mappingOverride);
                                 }
                             } else if ("conf".equals(qName) && _insideConfigurations) {
-                                String confName = attributes.getValue("name");
+                                String confName = substitute(settings, attributes.getValue("name"));
                                 if (!confs.contains(confName)) {
                                 	buffer.setPrint(true);
 	                                if (_doIndent) {
 	                                	write("/>\n\t\t");
 	                                }
-                                	String extend = attributes.getValue("extends");
+                                	String extend = substitute(settings, attributes.getValue("extends"));
                                 	if (extend != null) {
                                 		for (StringTokenizer tok = new StringTokenizer(extend, ", "); tok.hasMoreTokens(); ) {
                                 			String current = tok.nextToken();
@@ -282,7 +282,7 @@
                     } else if ("branch".equals(attName)) {
                     	write(" branch=\""+systemMid.getBranch()+"\"");
                     } else if ("conf".equals(attName)) {
-                    	String oldMapping = attributes.getValue("conf");
+                    	String oldMapping = substitute(settings, attributes.getValue("conf"));
                     	if (oldMapping.length() > 0) {
                     		String newMapping = removeConfigurationsFromMapping(oldMapping, confs);
                     		if (newMapping.length() > 0) {
@@ -300,7 +300,8 @@
                 for (int i=0; i<attributes.getLength(); i++) {
                 	String attName = attributes.getQName(i);
                 	if ("defaultconfmapping".equals(attName)) {
-                		String newMapping = removeConfigurationsFromMapping(attributes.getValue("defaultconfmapping"), confs);
+                		String newMapping = removeConfigurationsFromMapping(
+                                substitute(settings, attributes.getValue("defaultconfmapping")), confs);
                 		if (newMapping.length() > 0) {
                 			write(" "+attributes.getQName(i)+"=\""+newMapping+"\"");
                 		}
@@ -321,10 +322,10 @@
                 }
             } else if ("ivy-module/configurations/conf".equals(getContext())) {
             	_buffers.push(new ExtendedBuffer(getContext()));
-            	String confName = attributes.getValue("name");
+            	String confName = substitute(settings, attributes.getValue("name"));
             	if (!confs.contains(confName)) {
         			((ExtendedBuffer) _buffers.peek()).setPrint(true);
-                	String extend = attributes.getValue("extends");
+                	String extend = substitute(settings, attributes.getValue("extends"));
                 	if (extend != null) {
                 		for (StringTokenizer tok = new StringTokenizer(extend, ", "); tok.hasMoreTokens(); ) {
                 			String current = tok.nextToken();
@@ -342,7 +343,7 @@
             } else if ("ivy-module/publications/artifact/conf".equals(getContext()) || "ivy-module/dependencies/dependency/conf".equals(getContext()) || "ivy-module/dependencies/dependency/artifact/conf".equals(getContext())) {
             	_buffers.push(new ExtendedBuffer(getContext()));
             	((ExtendedBuffer) _confAttributeBuffers.peek()).setDefaultPrint(false);
-            	String confName = attributes.getValue("name");
+            	String confName = substitute(settings, attributes.getValue("name"));
             	if (!confs.contains(confName)) {
             		((ExtendedBuffer) _confAttributeBuffers.peek()).setPrint(true);
         			((ExtendedBuffer) _buffers.peek()).setPrint(true);
@@ -360,7 +361,7 @@
                 for (int i=0; i<attributes.getLength(); i++) {
                 	String attName = attributes.getQName(i);
                 	if ("conf".equals(attName)) {
-                		String confName = attributes.getValue("conf");
+                		String confName = substitute(settings, attributes.getValue("conf"));
                 		String newConf = removeConfigurationsFromList(confName, confs);
                 		if (newConf.length() > 0) {
                 			write(" "+attributes.getQName(i)+"=\""+newConf+"\"");
@@ -403,7 +404,7 @@
         }
 
         private String substitute(IvySettings ivy, String value) {
-            return ivy == null ? value : ivy.substitute(value);
+            return value == null ? null : (ivy == null ? value : ivy.substitute(value));
         }
         
         private String removeConfigurationsFromMapping(String mapping, List confsToRemove) {
