diff --git a/scr/src/main/java/org/apache/felix/scr/XmlHandler.java b/scr/src/main/java/org/apache/felix/scr/XmlHandler.java
index 6c50234..16c5593 100644
--- a/scr/src/main/java/org/apache/felix/scr/XmlHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/XmlHandler.java
@@ -50,11 +50,10 @@
      *
      * @param   uri
      * @param   localName
-     * @param   qName
      * @param   attrib
      * @exception   ParseException
     **/
-    public void startElement(String uri, String localName, String qName, Properties attrib)
+    public void startElement(String uri, String localName, Properties attrib)
     throws ParseException {
         // we process elements in the default namespace and in the scr namespace only
         // TODO - To be 100% correct we should only listen to the scr namespace
@@ -172,10 +171,9 @@
     *
     * @param   uri
     * @param   localName
-    * @param   qName
     * @exception   ParseException
     */
-    public void endElement(String uri, String localName, String qName) throws ParseException
+    public void endElement(String uri, String localName) throws ParseException
     {
         // we process elements in the default namespace and in the scr namespace only
         // TODO - To be 100% correct we should only listen to the scr namespace
@@ -204,30 +202,39 @@
         return this.m_components;
     }
 
-	public void characters( char[] ch, int offset, int length ) throws Exception
+	/**
+	 * @see org.apache.felix.scr.parser.KXml2SAXHandler#characters(java.lang.String)
+	 */
+	public void characters( String text ) throws ParseException
     {
         // 112.4.5 If the value attribute is not specified, the body must contain one or more values
         if ( this.m_pendingProperty != null )
         {
-            this.m_pendingProperty.setValues( new String( ch, offset, length ) );
+            this.m_pendingProperty.setValues( text );
             this.m_currentComponent.addProperty( this.m_pendingProperty );
             this.m_pendingProperty = null;
         }
     }
 
-	public void processingInstruction(String target, String data) throws Exception {
+	/**
+	 * @see org.apache.felix.scr.parser.KXml2SAXHandler#processingInstruction(java.lang.String, java.lang.String)
+	 */
+	public void processingInstruction(String target, String data) throws ParseException {
 		// Not used
-
 	}
 
+	/**
+	 * @see org.apache.felix.scr.parser.KXml2SAXHandler#setLineNumber(int)
+	 */
 	public void setLineNumber(int lineNumber) {
 		// Not used
-
 	}
 
+	/**
+	 * @see org.apache.felix.scr.parser.KXml2SAXHandler#setColumnNumber(int)
+	 */
 	public void setColumnNumber(int columnNumber) {
 		// Not used
-
 	}
 }
 
diff --git a/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXHandler.java b/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXHandler.java
index fd851aa..59b14aa 100644
--- a/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXHandler.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -21,54 +21,49 @@
 import java.util.Properties;
 
 /**
- * Interface for SAX handler with kXML
+ * Interface for a SAX like handler with kXML
  */
 public interface KXml2SAXHandler {
 
-	/**
+   /**
 	* Method called when parsing text
 	*
-	* @param   ch
-	* @param   offset
-	* @param   length
-	* @exception   SAXException
+	* @param   text
+	* @exception   ParseException
 	*/
-	public void characters(char[] ch, int offset, int length) throws Exception;
+   void characters(String text) throws ParseException;
 
-	/**
+   /**
 	* Method called when a tag opens
 	*
 	* @param   uri
 	* @param   localName
-	* @param   qName
 	* @param   attrib
-	* @exception   SAXException
-	**/
-	public void startElement(
+	* @exception   ParseException
+	*/
+	void startElement(
 		String uri,
 		String localName,
-		String qName,
 		Properties attrib)
-		throws Exception;
-	/**
+		throws ParseException;
+
+   /**
 	* Method called when a tag closes
 	*
 	* @param   uri
 	* @param   localName
-	* @param   qName
-	* @exception   SAXException
+	* @exception   ParseException
 	*/
-	public void endElement(
-		java.lang.String uri,
-		java.lang.String localName,
-		java.lang.String qName)
-		throws Exception;
+    void endElement(
+		String uri,
+		String localName)
+		throws ParseException;
 
-	public void processingInstruction(String target,
+    void processingInstruction(String target,
 									  String data)
 							   throws Exception;
-		
-	public void setLineNumber(int lineNumber);
 
-	public void setColumnNumber(int columnNumber);
+	void setLineNumber(int lineNumber);
+
+	void setColumnNumber(int columnNumber);
 }
diff --git a/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXParser.java b/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXParser.java
index 3808eb8..0ad5ea2 100644
--- a/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXParser.java
+++ b/scr/src/main/java/org/apache/felix/scr/parser/KXml2SAXParser.java
@@ -43,6 +43,7 @@
 	public KXml2SAXParser(Reader reader) throws XmlPullParserException {
 		super();
 	    this.setInput(reader);
+	    this.setFeature(FEATURE_PROCESS_NAMESPACES, true);
 	}
 
 	/**
@@ -65,13 +66,12 @@
 				handler.startElement(
 					this.getNamespace(),
 					this.getName(),
-					this.getName(),
 					props);
 			} else if (this.getEventType() == XmlPullParser.END_TAG) {
-				handler.endElement(this.getNamespace(), this.getName(), this.getName());
+				handler.endElement(this.getNamespace(), this.getName());
 			} else if (this.getEventType() == XmlPullParser.TEXT) {
 				String text = this.getText();
-				handler.characters(text.toCharArray(),0,text.length());
+				handler.characters(text);
 			} else if (this.getEventType() == XmlPullParser.PROCESSING_INSTRUCTION) {
 				// TODO extract the target from the evt.getText()
 				handler.processingInstruction(null,this.getText());
