diff --git a/ipojo/arch/src/main/java/org/apache/felix/ipojo/arch/ArchCommandImpl.java b/ipojo/arch/src/main/java/org/apache/felix/ipojo/arch/ArchCommandImpl.java
index 75c2c07..4456cc8 100644
--- a/ipojo/arch/src/main/java/org/apache/felix/ipojo/arch/ArchCommandImpl.java
+++ b/ipojo/arch/src/main/java/org/apache/felix/ipojo/arch/ArchCommandImpl.java
@@ -21,9 +21,10 @@
 import java.io.PrintStream;
 
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
 import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.architecture.InstanceDescription;
-import org.ungoverned.osgi.service.shell.Command;
+import org.apache.felix.shell.Command;
 
 /**
  * Implementation of the arch command printing the actual architecture.
@@ -36,11 +37,16 @@
      * List of arch service.
      */
     private Architecture[] m_archs;
+    
+    /**
+     * Factory services. 
+     */
+    private Factory[] m_factories;
 
     /**
      * Get the command name.
      * @return the command name (arch)
-     * @see org.ungoverned.osgi.service.shell.Command#getName()
+     * @see org.apache.felix.shell.Command#getName()
      */
     public String getName() {
         return "arch";
@@ -49,16 +55,16 @@
     /**
      * Get help message.
      * @return the command usage.
-     * @see org.ungoverned.osgi.service.shell.Command#getUsage()
+     * @see org.apache.felix.shell.Command#getUsage()
      */
     public String getUsage() {
-        return "arch [instance name]";
+        return "arch [-factories] [-instances] [-factory factory_name] [-instance instance_name]";
     }
 
     /**
      * Get a small description.
      * @return get a description.
-     * @see org.ungoverned.osgi.service.shell.Command#getShortDescription()
+     * @see org.apache.felix.shell.Command#getShortDescription()
      */
     public String getShortDescription() {
         return "Architecture command : display the architecture";
@@ -69,35 +75,98 @@
      * @param line : command line
      * @param out : the default output stream
      * @param err : the error output stream
-     * @see org.ungoverned.osgi.service.shell.Command#execute(java.lang.String, java.io.PrintStream, java.io.PrintStream)
+     * @see org.apache.felix.shell.Command#execute(java.lang.String, java.io.PrintStream, java.io.PrintStream)
      */
     public void execute(String line, PrintStream out, PrintStream err) {
         synchronized (this) {
-            if (line.substring("arch".length()).trim().length() == 0) {
-                for (int i = 0; i < m_archs.length; i++) {
-                    InstanceDescription instance = m_archs[i].getInstanceDescription();
-                    if (instance.getState() == ComponentInstance.VALID) {
-                        out.println("Instance " + instance.getName() + " -> valid");
-                    }
-                    if (instance.getState() == ComponentInstance.INVALID) {
-                        out.println("Instance " + instance.getName() + " -> invalid");
-                    }
-                    if (instance.getState() == ComponentInstance.STOPPED) {
-                        out.println("Instance " + instance.getName() + " -> stopped");
-                    }
-                }
-            } else {
-                String line2 = line.substring("arch".length()).trim();
-                for (int i = 0; i < m_archs.length; i++) {
-                    InstanceDescription instance = m_archs[i].getInstanceDescription();
-                    if (instance.getName().equalsIgnoreCase(line2)) {
-                        out.println(instance.getDescription());
-                        return;
-                    }
-                }
-                err.println("Instance " + line2 + " not found");
+            String line2 = line.substring("arch".length()).trim();
+            
+            if (line2.equalsIgnoreCase("-instances") || line2.length() == 0) {
+                printInstances(out);
+                return;
             }
+            
+            if (line2.equalsIgnoreCase("-factories")) {
+                printFactories(out);
+                return;
+            }
+            
+            if (line2.startsWith("-factory")) {
+                String name = line2.substring("-factory".length()).trim();
+                printFactory(name, out, err);
+                return;
+            }
+            
+            if (line2.startsWith("-instance")) {
+                String name = line2.substring("-instance".length()).trim();
+                printInstance(name, out, err);
+                return;
+            }
+            
+            err.println(getUsage());
         }
 
     }
+    
+    /**
+     * Print instance list.
+     * @param out : default print stream
+     */
+    private void printInstances(PrintStream out) {
+        for (int i = 0; i < m_archs.length; i++) {
+            InstanceDescription instance = m_archs[i].getInstanceDescription();
+            if (instance.getState() == ComponentInstance.VALID) {
+                out.println("Instance " + instance.getName() + " -> valid");
+            }
+            if (instance.getState() == ComponentInstance.INVALID) {
+                out.println("Instance " + instance.getName() + " -> invalid");
+            }
+            if (instance.getState() == ComponentInstance.STOPPED) {
+                out.println("Instance " + instance.getName() + " -> stopped");
+            }
+        }
+    }
+    
+    /**
+     * Print instance description.
+     * @param name : instance name
+     * @param out : default print stream
+     * @param err : error print stream (if the instance is not found)
+     */
+    private void printInstance(String name, PrintStream out, PrintStream err) {
+        for (int i = 0; i < m_archs.length; i++) {
+            InstanceDescription instance = m_archs[i].getInstanceDescription();
+            if (instance.getName().equalsIgnoreCase(name)) {
+                out.println(instance.getDescription());
+                return;
+            }
+        }
+        err.println("Instance " + name + " not found");
+    }
+    
+    /**
+     * Print Factory information.
+     * @param out : output stream
+     */
+    private void printFactories(PrintStream out) {
+        for (int i = 0; i < m_factories.length; i++) {
+            out.println("Factory " + m_factories[i].getName());
+        }
+    }
+    
+    /**
+     * Print factory description.
+     * @param name : factory name
+     * @param out : default print stream
+     * @param err : error print stream (if the factory is not found)
+     */
+    private void printFactory(String name, PrintStream out, PrintStream err) {
+        for (int i = 0; i < m_factories.length; i++) {
+            if (m_factories[i].getName().equalsIgnoreCase(name)) {
+                out.println(m_factories[i].getDescription());
+                return;
+            }
+        }
+        err.println("Factory " + name + " not found");
+    }
 }
diff --git a/ipojo/arch/src/main/resources/metadata.xml b/ipojo/arch/src/main/resources/metadata.xml
index 335418a..7934090 100644
--- a/ipojo/arch/src/main/resources/metadata.xml
+++ b/ipojo/arch/src/main/resources/metadata.xml
@@ -3,6 +3,7 @@
 	<Component className="org.apache.felix.ipojo.arch.ArchCommandImpl">
 		  <Provides/>
 		  <Requires field="m_archs" optional="true"/>
+		  <Requires field="m_factories" optional="true"/>
 	</Component>
 	<instance component="org.apache.felix.ipojo.arch.ArchCommandImpl" name="ArchCommand"/>
 </iPOJO>
\ No newline at end of file
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index bb7f2a3..1f42b9a 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -412,10 +412,10 @@
      * Get the component type description attached to this factory.
      * 
      * @return : the component type description
-     * @see org.apache.felix.ipojo.Factory#getComponentDescription()
+     * @see org.apache.felix.ipojo.Factory#getDescription()
      */
-    public ComponentDescription getComponentDescription() {
-        return m_componentDesc;
+    public Element getDescription() {
+        return m_componentDesc.getDescription();
     }
 
     /**
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/Factory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/Factory.java
index 3354ac4..3df44b4 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/Factory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/Factory.java
@@ -20,7 +20,7 @@
 
 import java.util.Dictionary;
 
-import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.metadata.Element;
 
 /**
  * Component Type Factory Service. This service is exposed by a instance manager
@@ -56,7 +56,7 @@
      * 
      * @return the component type information.
      */
-    ComponentDescription getComponentDescription();
+    Element getDescription();
 
     /**
      * Check if the given configuration is acceptable as a configuration of a
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentDescription.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentDescription.java
index c6c629d..a519d0b 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentDescription.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentDescription.java
@@ -18,6 +18,9 @@
  */
 package org.apache.felix.ipojo.architecture;
 
+import org.apache.felix.ipojo.metadata.Attribute;
+import org.apache.felix.ipojo.metadata.Element;
+
 /**
  * Component Type information.
  * 
@@ -71,19 +74,7 @@
      * @see java.lang.Object#toString()
      */
     public String toString() {
-        String res = "";
-        if (m_className == null) {
-            res += "Component Type : " + m_name + " (Composition) \n";
-        } else {
-            res += "Component Type : " + m_name + " (" + m_className + ") \n";
-        }
-        for (int i = 0; i < m_providedServiceSpecification.length; i++) {
-            res += "\tProvides : " + m_providedServiceSpecification[i] + "\n";
-        }
-        for (int i = 0; i < m_properties.length; i++) {
-            res += "\tProperty : " + m_properties[i] + "\n";
-        }
-        return res;
+        return getDescription().toString();
     }
 
     /**
@@ -152,5 +143,41 @@
     public String getName() {
         return m_name;
     }
+    
+    /**
+     * Get the component type description.
+     * @return : the description
+     */
+    public Element getDescription() {
+        Element desc = new Element("Factory", "");
+        
+        desc.addAttribute(new Attribute("name", m_name));
+        
+        if (m_className != null) {
+            desc.addAttribute(new Attribute("Implementation-Class", m_className));
+        } else {
+            desc.addAttribute(new Attribute("Composite", "true"));
+        }
+        
+        for (int i = 0; i < m_providedServiceSpecification.length; i++) {
+            Element prov = new Element("provides", "");
+            prov.addAttribute(new Attribute("specification", m_providedServiceSpecification[i]));
+            desc.addElement(prov);
+        }
+        
+        for (int i = 0; i < m_properties.length; i++) {
+            Element prop = new Element("property", "");
+            prop.addAttribute(new Attribute("name", m_properties[i].getName()));
+            prop.addAttribute(new Attribute("type", m_properties[i].getType()));
+            if (m_properties[i].getValue() != null) {
+                prop.addAttribute(new Attribute("value", m_properties[i].getValue()));
+            } else {
+                prop.addAttribute(new Attribute("value", "REQUIRED"));
+            }
+            desc.addElement(prop);
+        }
+        
+        return desc;
+    }
 
 }
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/PropertyDescription.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/PropertyDescription.java
index 711c057..f3f63f4 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/PropertyDescription.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/PropertyDescription.java
@@ -77,17 +77,4 @@
         return m_value;
     }
 
-    /**
-     * Get a displayed form of the current property.
-     * @return : a String representing this property.
-     * @see java.lang.Object#toString()
-     */
-    public String toString() {
-        if (m_value != null) {
-            return getName() + " - " + getType() + " - " + getValue();
-        } else {
-            return getName() + " - " + getType() + " - REQUIRED";
-        }
-    }
-
 }
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/FactoryProxy.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/FactoryProxy.java
index 0a70961..6919306 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/FactoryProxy.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/FactoryProxy.java
@@ -24,7 +24,7 @@
 import org.apache.felix.ipojo.Factory;
 import org.apache.felix.ipojo.ServiceContext;
 import org.apache.felix.ipojo.UnacceptableConfiguration;
-import org.apache.felix.ipojo.architecture.ComponentDescription;
+import org.apache.felix.ipojo.metadata.Element;
 
 /**
  * Bridge representing a Factory inside a composition.
@@ -86,10 +86,10 @@
      * configuration properties ...
      * 
      * @return the component type information.
-     * @see org.apache.felix.ipojo.Factory#getComponentDescription()
+     * @see org.apache.felix.ipojo.Factory#getDescription()
      */
-    public ComponentDescription getComponentDescription() {
-        return m_delegate.getComponentDescription();
+    public Element getDescription() {
+        return m_delegate.getDescription();
     }
 
     /**
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/architecture/ArchitectureHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/architecture/ArchitectureHandler.java
index 069df27..d52bfdc 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/architecture/ArchitectureHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/architecture/ArchitectureHandler.java
@@ -110,7 +110,7 @@
     /**
      * Get the instance description.
      * @return the instance description
-     * @see org.apache.felix.ipojo.architecture.Architecture#getComponentDescription()
+     * @see org.apache.felix.ipojo.architecture.Architecture#getDescription()
      */
     public InstanceDescription getInstanceDescription() {
         return m_manager.getInstanceDescription();
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/SvcInstance.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/SvcInstance.java
index 9956520..a69dab6 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/SvcInstance.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/composite/service/instantiator/SvcInstance.java
@@ -29,7 +29,7 @@
 import org.apache.felix.ipojo.Factory;
 import org.apache.felix.ipojo.ServiceContext;
 import org.apache.felix.ipojo.UnacceptableConfiguration;
-import org.apache.felix.ipojo.architecture.PropertyDescription;
+import org.apache.felix.ipojo.metadata.Element;
 import org.apache.felix.ipojo.util.Logger;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceEvent;
@@ -274,8 +274,9 @@
      */
     private boolean match(Factory fact) {
         // Check if the factory can provide the spec
-        for (int i = 0; i < fact.getComponentDescription().getprovidedServiceSpecification().length; i++) {
-            if (fact.getComponentDescription().getprovidedServiceSpecification()[i].equals(m_specification)) {
+        Element[] provides = fact.getDescription().getElements("provides");
+        for (int i = 0; i < provides.length; i++) {
+            if (provides[i].getAttribute("specification").equals(m_specification)) {
 
                 // Check that the factory needs every properties contained in
                 // the configuration
@@ -310,9 +311,9 @@
      * @return true if the factory support this property
      */
     private boolean containsProperty(String name, Factory factory) {
-        PropertyDescription[] props = factory.getComponentDescription().getProperties();
+        Element[] props = factory.getDescription().getElements("property");
         for (int i = 0; i < props.length; i++) {
-            if (props[i].getName().equalsIgnoreCase(name)) {
+            if (props[i].getAttribute("name").equalsIgnoreCase(name)) {
                 return true;
             }
         }
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java
index 1c0a906..a6234db 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/architecture/ArchitectureHandler.java
@@ -111,7 +111,7 @@
     /**
      * Get the instance description.
      * @return the instance description
-     * @see org.apache.felix.ipojo.architecture.Architecture#getComponentDescription()
+     * @see org.apache.felix.ipojo.architecture.Architecture#getDescription()
      */
     public InstanceDescription getInstanceDescription() {
         return m_manager.getInstanceDescription();
