diff --git a/ipojo/tests/core/external-handlers/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CheckServiceHandler.java b/ipojo/tests/core/external-handlers/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CheckServiceHandler.java
index ebb550b..a4a921a 100644
--- a/ipojo/tests/core/external-handlers/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CheckServiceHandler.java
+++ b/ipojo/tests/core/external-handlers/src/main/java/org/apache/felix/ipojo/test/scenarios/component/CheckServiceHandler.java
@@ -86,9 +86,11 @@
 	}
 	
 	public void stateChanged(int state) {
-		changes++;
-		props.put("changes", new Integer(changes));
-		sr.setProperties(props);
+		if (sr != null) {
+		    changes++;
+		    props.put("changes", new Integer(changes));
+		    sr.setProperties(props);
+		}
 	}
 
 	public String getName() {
diff --git a/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleType.java b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleType.java
new file mode 100644
index 0000000..6938eba
--- /dev/null
+++ b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/component/SimpleType.java
@@ -0,0 +1,7 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+public class SimpleType {
+    
+    private boolean m_controller;
+
+}
diff --git a/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/factories/ObedienceTest.java b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/factories/ObedienceTest.java
index 8ecdf56..b2b29ea 100644
--- a/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/factories/ObedienceTest.java
+++ b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/factories/ObedienceTest.java
@@ -22,9 +22,13 @@
 
 import org.apache.felix.ipojo.ComponentFactory;
 import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.HandlerManagerFactory;
+import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
 import org.apache.felix.ipojo.test.scenarios.factories.service.FooService;
 import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.ServiceReference;
 
 /**
  * Check that instances are disposed when the factory is stopped.
@@ -65,5 +69,48 @@
 		factory.start();
 		assertNull("Check no foo service", context.getServiceReference(FooService.class.getName()));
 	}
+	
+	public void testDisposeAfterFactoryInvalidation() {
+	    ComponentFactory cf = (ComponentFactory) Utils.getFactoryByName(context, "org.apache.felix.ipojo.test.scenarios.component.SimpleType");
+	    assertNotNull("Check factory availability -1", cf);
+	    assertEquals("Check factory state -1", Factory.VALID, cf.getState());
+	    
+	    ServiceReference ref_arch = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "SimpleInstance");
+	    assertNotNull("Check Architecture availability -1", ref_arch);
+	    
+        HandlerManagerFactory hf = (HandlerManagerFactory) Utils.getHandlerFactoryByName(context, "controller");
+        assertNotNull("Check handler availability -1", hf);
+        assertEquals("Check handler state -1", Factory.VALID, hf.getState());
+        
+        // Stop the handler
+        hf.stop();
+        HandlerManagerFactory hf2 = (HandlerManagerFactory) Utils.getHandlerFactoryByName(context, "controller");
+        assertNull("Check handler availability -2", hf2);
+        
+        // Check the factory invalidity
+        cf = (ComponentFactory) Utils.getFactoryByName(context, "org.apache.felix.ipojo.test.scenarios.component.SimpleType");
+        assertNotNull("Check factory availability -2", cf);
+        assertEquals("Check factory state -2", Factory.INVALID, cf.getState());
+        
+        // Check the instance disparition
+        ref_arch = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "SimpleInstance");
+        assertNull("Check Architecture availability -1", ref_arch);
+        
+        // Restart the handler
+        hf.start();
+        hf2 = (HandlerManagerFactory) Utils.getHandlerFactoryByName(context, "controller");
+        assertNotNull("Check handler availability -3", hf2);
+        
+        // Check the factory state
+        cf = (ComponentFactory) Utils.getFactoryByName(context, "org.apache.felix.ipojo.test.scenarios.component.SimpleType");
+        assertNotNull("Check factory availability -3", cf);
+        assertEquals("Check factory state -3", Factory.VALID, cf.getState());
+        
+        
+        // Check the instance re-creation
+        ref_arch = Utils.getServiceReferenceByName(context, Architecture.class.getName(), "SimpleInstance");
+        assertNotNull("Check Architecture availability -3", ref_arch);
+        
+	}
 
 }
diff --git a/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/util/Utils.java b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/util/Utils.java
index a684a6b..e4754a0 100644
--- a/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/util/Utils.java
+++ b/ipojo/tests/core/factories/src/main/java/org/apache/felix/ipojo/test/scenarios/util/Utils.java
@@ -26,9 +26,10 @@
 import org.apache.felix.ipojo.ComponentInstance;
 import org.apache.felix.ipojo.Factory;
 import org.apache.felix.ipojo.Handler;
+import org.apache.felix.ipojo.HandlerFactory;
 import org.apache.felix.ipojo.HandlerManagerFactory;
 import org.apache.felix.ipojo.ServiceContext;
-//import org.apache.felix.ipojo.composite.CompositeManager;
+import org.apache.felix.ipojo.architecture.Architecture;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -54,7 +55,7 @@
     public static HandlerManagerFactory getHandlerFactoryByName(BundleContext bc, String factoryName) {
         ServiceReference[] refs;
         try {
-            refs = bc.getServiceReferences(Factory.class.getName(), "(" + Handler.HANDLER_NAME_PROPERTY + "=" + factoryName + ")");
+            refs = bc.getServiceReferences(HandlerFactory.class.getName(), "(" + Handler.HANDLER_NAME_PROPERTY + "=" + factoryName + ")");
             if (refs == null) {
                 System.err.println("Cannot get the factory " + factoryName);
                 return null;
@@ -141,6 +142,8 @@
         String filter = null;
         if (itf.equals(Factory.class.getName()) || itf.equals(ManagedServiceFactory.class.getName())) {
             filter = "(" + "factory.name" + "=" + name + ")";
+        } else if (itf.equals(Architecture.class.getName())) {
+            filter = "(" + "architecture.instance" + "=" + name + ")";
         } else {
             filter = "(" + "instance.name" + "=" + name + ")";
         }
diff --git a/ipojo/tests/core/factories/src/main/resources/metadata.xml b/ipojo/tests/core/factories/src/main/resources/metadata.xml
index c6abfe7..026b95e 100644
--- a/ipojo/tests/core/factories/src/main/resources/metadata.xml
+++ b/ipojo/tests/core/factories/src/main/resources/metadata.xml
@@ -66,4 +66,10 @@
 			<property name="bar" field="m_bar" />
 		</properties>
 	</component>
+	
+	<!-- type & instance used to check instance lifecycle against factory validation & invalidation -->
+	<component classname="org.apache.felix.ipojo.test.scenarios.component.SimpleType" architecture="true">
+		<controller field="m_controller"/>
+	</component>
+	<instance component="org.apache.felix.ipojo.test.scenarios.component.SimpleType" name="SimpleInstance"/>
 </ipojo>
