diff --git a/modules/extension/app-schema/app-schema/src/main/java/org/geotools/util/ComplexAttributeConverterFactory.java b/modules/extension/app-schema/app-schema/src/main/java/org/geotools/util/ComplexAttributeConverterFactory.java
index 9bf03f2..05e7edc 100644
--- a/modules/extension/app-schema/app-schema/src/main/java/org/geotools/util/ComplexAttributeConverterFactory.java
+++ b/modules/extension/app-schema/app-schema/src/main/java/org/geotools/util/ComplexAttributeConverterFactory.java
@@ -24,6 +24,7 @@ import org.geotools.feature.AttributeImpl;
 import org.geotools.filter.identity.FeatureIdImpl;
 import org.opengis.feature.Attribute;
 import org.opengis.feature.ComplexAttribute;
+import org.opengis.feature.GeometryAttribute;
 import org.opengis.feature.Property;
 import org.opengis.filter.identity.FeatureId;
 
@@ -59,6 +60,20 @@ public class ComplexAttributeConverterFactory implements ConverterFactory {
                 }
             };
         }
+        
+        //NC - GeometryAttribute unwrapper
+        if (GeometryAttribute.class.isAssignableFrom(source)) {
+            return new Converter() {
+                public Object convert(Object source, Class target) throws Exception {
+                    if (source instanceof GeometryAttribute) {
+                        return Converters.convert(((GeometryAttribute) source).getValue(), target);
+                            
+                    }
+                    return null;
+                }
+            };
+        }
+        
         // String to FeatureId comparison
         if (FeatureId.class.isAssignableFrom(target) && String.class.isAssignableFrom(source)) {
             return new Converter() {
diff --git a/modules/library/main/src/main/java/org/geotools/filter/ExpressionDOMParser.java b/modules/library/main/src/main/java/org/geotools/filter/ExpressionDOMParser.java
index dc5fb2d..edcf5ee 100644
--- a/modules/library/main/src/main/java/org/geotools/filter/ExpressionDOMParser.java
+++ b/modules/library/main/src/main/java/org/geotools/filter/ExpressionDOMParser.java
@@ -59,7 +59,7 @@ public final class ExpressionDOMParser {
     private FilterFactory2 ff;
     
     /** Namespace Context for creating expressions */
-    private NamespaceSupport namespaceContext = null;
+   // private NamespaceSupport namespaceContext = null;
 
     /** Factory for creating geometry objects */
     private static GeometryFactory gfac = new GeometryFactory();
@@ -96,8 +96,33 @@ public final class ExpressionDOMParser {
     }
     
     /** Namespace Support Setter */
-    public void setNamespaceContext( NamespaceSupport namespaceContext ){
+   /* public void setNamespaceContext( NamespaceSupport namespaceContext ){
         this.namespaceContext = namespaceContext;
+    }*/
+    
+    private static NamespaceSupport getNameSpaces(Node node)
+    {
+        NamespaceSupport namespaces = new NamespaceSupport();
+        while (node != null)
+        {
+            NamedNodeMap atts = node.getAttributes();
+            
+            if (atts != null) {
+                for (int i=0; i<atts.getLength(); i++){
+                    Node att = atts.item(i);
+                    
+                    if (att.getNamespaceURI() != null
+                            && att.getNamespaceURI().equals("http://www.w3.org/2000/xmlns/")
+                            && namespaces.getURI(att.getLocalName()) == null){
+                        namespaces.declarePrefix(att.getLocalName(), att.getNodeValue());
+                    }
+                }
+            }
+            
+            node = node.getParentNode();
+        }
+        
+        return namespaces;
     }
     
     /**
@@ -344,7 +369,7 @@ public final class ExpressionDOMParser {
             	//JD: trim whitespace here
             	String value = child.getFirstChild().getNodeValue();
             	value = value != null ? value.trim() : value;
-                PropertyName attribute = ff.property( value, namespaceContext );
+                PropertyName attribute = ff.property( value, getNameSpaces(root) );
 
                 //                attribute.setAttributePath(child.getFirstChild().getNodeValue());
                 return attribute;
diff --git a/modules/library/main/src/main/java/org/geotools/filter/FilterDOMParser.java b/modules/library/main/src/main/java/org/geotools/filter/FilterDOMParser.java
index e971a76..5654c11 100644
--- a/modules/library/main/src/main/java/org/geotools/filter/FilterDOMParser.java
+++ b/modules/library/main/src/main/java/org/geotools/filter/FilterDOMParser.java
@@ -116,31 +116,6 @@ public final class FilterDOMParser {
     private FilterDOMParser() {
     }
     
-    private static NamespaceSupport getNameSpaces(Node node)
-    {
-        NamespaceSupport namespaces = new NamespaceSupport();
-        while (node != null)
-        {
-            NamedNodeMap atts = node.getAttributes();
-            
-            if (atts != null) {
-                for (int i=0; i<atts.getLength(); i++){
-                    Node att = atts.item(i);
-                    
-                    if (att.getNamespaceURI() != null
-                            && att.getNamespaceURI().equals("http://www.w3.org/2000/xmlns/")
-                            && namespaces.getURI(att.getLocalName()) == null){
-                        namespaces.declarePrefix(att.getLocalName(), att.getNodeValue());
-                    }
-                }
-            }
-            
-            node = node.getParentNode();
-        }
-        
-        return namespaces;
-    }
-
     /**
      * Parses the filter using DOM.
      *
@@ -152,10 +127,10 @@ public final class FilterDOMParser {
      */
     public static org.opengis.filter.Filter parseFilter(Node root) {
         //NC - NameSpaceSupport
-        NamespaceSupport namespaces = getNameSpaces(root);
+        //NamespaceSupport namespaces = getNameSpaces(root);
         
         final ExpressionDOMParser expressionDOMParser = new ExpressionDOMParser(FILTER_FACT);
-        expressionDOMParser.setNamespaceContext(namespaces);
+        //expressionDOMParser.setNamespaceContext(namespaces);
         
         
         LOGGER.finer("parsingFilter " + root.getLocalName());
@@ -605,10 +580,10 @@ public final class FilterDOMParser {
         throws IllegalFilterException {
         
         //NC - NameSpaceSupport
-        NamespaceSupport namespaces = getNameSpaces(nullNode);
+        //NamespaceSupport namespaces = getNameSpaces(nullNode);
         
         final ExpressionDOMParser expressionDOMParser = new ExpressionDOMParser(FILTER_FACT);
-        expressionDOMParser.setNamespaceContext(namespaces);
+        //expressionDOMParser.setNamespaceContext(namespaces);
         
         LOGGER.finest("parsing null node: " + nullNode);
 
diff --git a/modules/library/main/src/test/java/org/geotools/styling/SLDParserNamespaceTest.java b/modules/library/main/src/test/java/org/geotools/styling/SLDParserNamespaceTest.java
index 661d4da..5f4aef7 100644
--- a/modules/library/main/src/test/java/org/geotools/styling/SLDParserNamespaceTest.java
+++ b/modules/library/main/src/test/java/org/geotools/styling/SLDParserNamespaceTest.java
@@ -31,9 +31,10 @@ import org.xml.sax.helpers.NamespaceSupport;
 import junit.framework.TestCase;
 
 /**
+ * Tests whether SLD Parser encodes Namespace in PropertyNames
  * 
- *
- * @source $URL$
+ * 
+ * @author Niels Charlier
  */
 public class SLDParserNamespaceTest extends TestCase {
 
@@ -52,7 +53,10 @@ public class SLDParserNamespaceTest extends TestCase {
         "      </ogc:PropertyIsEqualTo>"+
         "      </ogc:Filter>"+
         "      <PolygonSymbolizer>"+
-        "       <Fill>"+
+        "           <Geometry> " +
+        "              <ogc:PropertyName>gsml:shape</ogc:PropertyName>" +
+        "           </Geometry> " +
+        "        <Fill>"+
         "        <CssParameter name=\"fill\">#FF0000</CssParameter>"+
         "       </Fill>"+
         "      </PolygonSymbolizer>"+
@@ -84,6 +88,14 @@ public class SLDParserNamespaceTest extends TestCase {
         assertEquals(ns.getURI("gml"), "http://www.opengis.net/gml");
         assertEquals(ns.getURI("gsml"), "urn:cgi:xmlns:CGI:GeoSciML:2.0");
         
+        Symbolizer s = rule.getSymbolizers()[0];
+        expr = s.getGeometry();
+        assert(expr instanceof PropertyName);
+        ns = ((PropertyName) expr).getNamespaceContext();
+        assertEquals(ns.getURI("xlink"), null);
+        assertEquals(ns.getURI("gml"), "http://www.opengis.net/gml");
+        assertEquals(ns.getURI("gsml"), "urn:cgi:xmlns:CGI:GeoSciML:2.0");
+        
     }   
     
     
diff --git a/modules/library/render/src/main/java/org/geotools/renderer/lite/StreamingRenderer.java b/modules/library/render/src/main/java/org/geotools/renderer/lite/StreamingRenderer.java
index 98cdb55..81e1f51 100644
--- a/modules/library/render/src/main/java/org/geotools/renderer/lite/StreamingRenderer.java
+++ b/modules/library/render/src/main/java/org/geotools/renderer/lite/StreamingRenderer.java
@@ -2642,15 +2642,14 @@ public final class StreamingRenderer implements GTRenderer {
 
             String geomName = null;
             if(geometry instanceof PropertyName) {
-                geomName = ((PropertyName) geometry).getPropertyName();
-                return getAttributeCRS(geomName, schema);
+                return getAttributeCRS((PropertyName) geometry, schema);
             } else if(geometry == null) {
                 return getAttributeCRS(null, schema);
             } else {
                 StyleAttributeExtractor attExtractor = new StyleAttributeExtractor();
                 geometry.accept(attExtractor, null);
-                for(String name : attExtractor.getAttributeNameSet()) {
-                    if(schema.getDescriptor(name) instanceof GeometryDescriptor) {
+                for(PropertyName name : attExtractor.getAttributes()) {
+                    if(name.evaluate(schema) instanceof GeometryDescriptor) {
                         return getAttributeCRS(name, schema);
                     }
                 }
@@ -2670,13 +2669,13 @@ public final class StreamingRenderer implements GTRenderer {
      * @param schema
      * @return
      */
-    org.opengis.referencing.crs.CoordinateReferenceSystem getAttributeCRS(String geomName,
+    org.opengis.referencing.crs.CoordinateReferenceSystem getAttributeCRS(PropertyName geomName,
             FeatureType schema) {
-        if (geomName == null || "".equals(geomName)) {
+        if (geomName == null || geomName.getPropertyName().equals("")) {
             GeometryDescriptor geom = schema.getGeometryDescriptor();
             return geom.getType().getCoordinateReferenceSystem();
         } else {
-            GeometryDescriptor geom = (GeometryDescriptor) schema.getDescriptor( geomName );
+            GeometryDescriptor geom = (GeometryDescriptor) geomName.evaluate(schema);
             return geom.getType().getCoordinateReferenceSystem();
         }
     }
