diff -rupN original/core/src/main/java/org/eclipse/gemini/blueprint/compendium/internal/cm/ManagedServiceFactoryFactoryBean.java patched/core/src/main/java/org/eclipse/gemini/blueprint/compendium/internal/cm/ManagedServiceFactoryFactoryBean.java
--- original/core/src/main/java/org/eclipse/gemini/blueprint/compendium/internal/cm/ManagedServiceFactoryFactoryBean.java	2013-05-29 12:41:55.000000000 +0400
+++ patched/core/src/main/java/org/eclipse/gemini/blueprint/compendium/internal/cm/ManagedServiceFactoryFactoryBean.java	2013-06-06 11:15:49.911192197 +0400
@@ -19,6 +19,7 @@ import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -180,6 +181,7 @@ public class ManagedServiceFactoryFactor
 	private ClassLoader classLoader;
 	private boolean autowireOnUpdate = false;
 	private String updateMethod;
+	private boolean propagateProperties = false;
 	/** update callback */
 	private UpdateCallback updateCallback;
 
@@ -308,15 +310,15 @@ public class ManagedServiceFactoryFactor
 				return;
 
 			beanFactory.registerBeanDefinition(pid, templateDefinition);
-			initialInjectionProperties = props;
+			initialInjectionProperties = getProperties(props, false);
 			// create instance (causing the injection BPP to be applied)
 			Object bean = beanFactory.getBean(pid);
-			registerService(pid, bean);
+			registerService(pid, bean, props);
 		}
 	}
 
-	private void registerService(String pid, Object bean) {
-		OsgiServiceFactoryBean exporter = createExporter(pid, bean);
+	private void registerService(String pid, Object bean, Map props) {
+		OsgiServiceFactoryBean exporter = createExporter(pid, bean, props);
 		serviceExporters.put(pid, exporter);
 		try {
 			serviceRegistrations.add(exporter.getObject());
@@ -325,7 +327,7 @@ public class ManagedServiceFactoryFactor
 		}
 	}
 
-	private OsgiServiceFactoryBean createExporter(String beanName, Object bean) {
+	private OsgiServiceFactoryBean createExporter(String beanName, Object bean, Map props) {
 		OsgiServiceFactoryBean exporter = new OsgiServiceFactoryBean();
 		exporter.setInterfaceDetector(detector);
 		exporter.setBeanClassLoader(classLoader);
@@ -337,13 +339,7 @@ public class ManagedServiceFactoryFactor
 		exporter.setTarget(bean);
 
 		// add properties
-		Properties props = new Properties();
-		if (serviceProperties != null) {
-			props.putAll(serviceProperties);
-		}
-		// add the service pid (to be able to identify the bean instance)
-		props.put(Constants.SERVICE_PID, beanName);
-		exporter.setServiceProperties(props);
+		exporter.setServiceProperties(getServiceProperties(beanName, props));
 
 		try {
 			exporter.afterPropertiesSet();
@@ -353,10 +349,51 @@ public class ManagedServiceFactoryFactor
 		return exporter;
 	}
 
+	private Properties getServiceProperties(String pid, Map props) {
+		Properties result = new Properties();
+		if (serviceProperties != null) {
+			result.putAll(serviceProperties);
+		}
+		// add the service pid (to be able to identify the bean instance)
+		result.put(Constants.SERVICE_PID, pid);
+		result.putAll(getProperties(props, true));
+		return result;
+	}
+
+	private static Properties getProperties(Map props, boolean forPropagation) {
+		Properties result = new Properties();
+		for (Object entryObj : props.entrySet()) {
+			Entry entry = (Entry) entryObj;
+			String key = (String) entry.getKey();
+			if (key.startsWith(".")) {
+				// this is a private property
+				if (!forPropagation) {
+					result.put(key.substring(1), entry.getValue());
+				}
+			} else {
+				// this is a public property
+				if (forPropagation || !result.containsKey(key)) {
+					result.put(key, entry.getValue());
+				}
+			}
+		}
+		return result;
+	}
+
 	private void updateInstance(String pid, Map props) {
+		if (autowireOnUpdate) {
+			OsgiServiceFactoryBean exporter = serviceExporters.get(pid);
+			try {
+				ServiceRegistration registration = (ServiceRegistration) exporter.getObject();
+				registration.setProperties(getServiceProperties(pid, props));
+			} catch (Exception ex) {
+				// log the exception and continue
+				log.error("Could not update service properties for pid " + pid, ex);
+			}
+		}
 		if (updateCallback != null) {
 			Object instance = beanFactory.getBean(pid);
-			updateCallback.update(instance, props);
+			updateCallback.update(instance, getProperties(props, false));
 		}
 	}
 
@@ -494,6 +531,15 @@ public class ManagedServiceFactoryFactor
 	}
 
 	/**
+	 * Sets whether property propagation should be performed or not.
+	 * 
+	 * @param propagateProperties
+	 */
+	public void setPropagateProperties(boolean propagateProperties) {
+		this.propagateProperties = propagateProperties;
+	}
+
+	/**
 	 * Sets the properties used when exposing the target as an OSGi service. If the given argument implements (
 	 * {@link ServicePropertiesChangeListener}), any updates to the properties will be reflected by the service
 	 * registration.
diff -rupN original/core/src/main/resources/META-INF/spring.schemas patched/core/src/main/resources/META-INF/spring.schemas
--- original/core/src/main/resources/META-INF/spring.schemas	2013-05-29 12:41:55.000000000 +0400
+++ patched/core/src/main/resources/META-INF/spring.schemas	2013-06-06 07:35:01.897858408 +0400
@@ -13,6 +13,7 @@ http\://www.springframework.org/schema/o
 http\://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint-1.0.xsd=org/eclipse/gemini/blueprint/config/gemini-blueprint-1.0.xsd
 http\://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd=org/eclipse/gemini/blueprint/config/gemini-blueprint-1.0.xsd
 http\://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium-1.0.xsd=org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.0.xsd
-http\://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd=org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.0.xsd
+http\://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium-1.1.xsd=org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd
+http\://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd=org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd
 # Blueprint namespaces
 http\://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd=org/eclipse/gemini/blueprint/blueprint/config/blueprint-1.0.xsd
diff -rupN original/core/src/main/resources/org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd patched/core/src/main/resources/org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd
--- original/core/src/main/resources/org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd	1970-01-01 03:00:00.000000000 +0300
+++ patched/core/src/main/resources/org/eclipse/gemini/blueprint/compendium/config/gemini-blueprint-compendium-1.1.xsd	2013-06-06 07:33:46.149855268 +0400
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<xsd:schema xmlns="http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:beans="http://www.springframework.org/schema/beans"
+            xmlns:osgi="http://www.eclipse.org/gemini/blueprint/schema/blueprint"
+            xmlns:tool="http://www.springframework.org/schema/tool"
+            targetNamespace="http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.1.0">
+
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:import namespace="http://www.springframework.org/schema/beans"/>
+    <xsd:import namespace="http://www.springframework.org/schema/tool"/>
+    <xsd:import namespace="http://www.eclipse.org/gemini/blueprint/schema/blueprint" 
+    	schemaLocation="http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"/> 
+    
+
+    <xsd:annotation>
+        <xsd:documentation><![CDATA[
+    Namespace support for the compendium services provided by Eclipse Gemini Blueprint.
+        ]]></xsd:documentation>
+    </xsd:annotation>
+
+	<!-- internal reusable type -->
+	<xsd:attributeGroup name="updateAttributes">
+		<xsd:attribute name="autowire-on-update" use="optional" type="xsd:boolean" default="false">
+			<xsd:annotation>
+				<xsd:documentation><![CDATA[
+	Whether or not the container should autowire the target bean everytime an update occurs.
+	When 'true' is specified, the container will perform autowire (by name) the bean instance with the
+	newly set properties. In case 'update-method' attribute is used as well, the autowiring process will
+	take precedence.
+				]]></xsd:documentation>
+			</xsd:annotation>
+		</xsd:attribute>
+		<xsd:attribute name="update-method" type="xsd:string" use="optional">
+			<xsd:annotation>
+				<xsd:documentation><![CDATA[
+	The update-method to invoke whenever an update occurs in the configuration data. Allows the target
+	bean to process the update information itself. In case 'autowire-on-update' is also used, the 'update-method'
+	will be invoked after the autowiring takes place.
+				]]></xsd:documentation>
+			</xsd:annotation>
+		</xsd:attribute>
+	</xsd:attributeGroup>
+    
+    
+    <xsd:element name="managed-properties">
+    	<xsd:annotation>
+    		<xsd:documentation><![CDATA[
+    Defines a bean based on the given class name and configuration, with properties autowired-by-name 
+    based on the configuration stored under the given persistent id.
+    		]]></xsd:documentation>
+    	</xsd:annotation>
+    	<xsd:complexType>
+		    <xsd:attribute name="persistent-id" type="xsd:string" use="required">
+				<xsd:annotation>
+					<xsd:documentation><![CDATA[
+	The persistent-id under which the configuration for this bean is stored in 
+	the Configuration Admin service.
+					]]></xsd:documentation>
+				</xsd:annotation>
+			</xsd:attribute>
+	       	<xsd:attributeGroup ref="updateAttributes"/>
+		</xsd:complexType>
+	</xsd:element>
+	
+    <!--  managed-service-factory -->
+
+    <xsd:element name="managed-service-factory">
+       	<xsd:annotation>
+    		<xsd:documentation><![CDATA[
+    Defines a collection of beans based on the given class name, with properties autowired-by-name based
+    on the configuration sets stored under the given factory persistent id.
+    		]]></xsd:documentation>
+    	</xsd:annotation>
+        <xsd:complexType>
+        	<xsd:complexContent>
+	            <xsd:extension base="osgi:TbaseService">
+	            	<xsd:sequence>
+	                    <xsd:element name="interfaces" type="beans:listOrSetType" minOccurs="0" maxOccurs="1">
+	                    	<xsd:annotation>
+	                    		<xsd:documentation><![CDATA[
+    The set of service interfaces to advertise in the service registry.
+	                    		]]></xsd:documentation>
+	                    	</xsd:annotation>
+	                    </xsd:element>
+	                    <xsd:element name="registration-listener" type="osgi:TserviceRegistrationListener" minOccurs="0" maxOccurs="unbounded">
+	                    	<xsd:annotation>
+	                    		<xsd:documentation><![CDATA[
+    Defines a listener that will be notified when this service is registered or unregistered in the
+    OSGi service registry.
+	                    		]]></xsd:documentation>
+	                    	</xsd:annotation>
+	                	</xsd:element>
+	                    <xsd:element name="service-properties" type="osgi:TserviceProperties" minOccurs="0" maxOccurs="1"/>
+		            	<!-- the bean definition template -->
+	                    <xsd:any namespace="##other" minOccurs="1" maxOccurs="1" processContents="skip">
+	   				       	<xsd:annotation>
+	                    		<xsd:documentation><![CDATA[
+	Defines the service definition template.
+	                    		]]></xsd:documentation>
+	                    	</xsd:annotation>
+	                    </xsd:any>
+		           	</xsd:sequence>
+		           	<xsd:attribute name="factory-pid" type="xsd:string" use="required">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	The persistent-id under which the configuration for this bean is stored in 
+	the Configuration Admin service.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+				<xsd:attribute name="propagate-properties" use="optional" type="xsd:boolean" default="false">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	Whether or not the container should be aware of public/private properties and propagate the public ones as service properties.
+	When 'true' is specified, the container will be aware of public/private properties during both initial injection and subsequent
+	updates (given 'autowire-on-update' is 'true'). Public properties will be propagated as service properties. Both public and private
+	properties will be autowired by name. In case of name conflicts private property will take precedence.
+	Property is considered private if starts with '.' and public otherwise.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+					<xsd:attributeGroup ref="updateAttributes"/>
+				</xsd:extension>
+			</xsd:complexContent>
+		</xsd:complexType>
+	</xsd:element>
+	
+    
+    <!-- cm-properties -->
+    <xsd:element name="cm-properties">
+    	<xsd:annotation>
+    		<xsd:documentation source="java:org.eclipse.gemini.blueprint.compendium.cm.ConfigAdminPropertiesFactoryBean"><![CDATA[
+    Exposes the properties found in the Configuration Admin service under the given persistent id.
+    		]]></xsd:documentation>
+			<xsd:appinfo>
+				<tool:annotation>
+					<tool:exports type="java.util.Properties"/>
+				</tool:annotation>
+			</xsd:appinfo>
+    	</xsd:annotation>
+    	<xsd:complexType>
+	    	<xsd:complexContent>
+	    		<xsd:extension base="beans:propsType">
+	    			<xsd:attribute name="id" type="xsd:ID"/>
+	    		    <xsd:attribute name="persistent-id" type="xsd:string" use="required">
+			        	<xsd:annotation>
+	        				<xsd:documentation><![CDATA[
+	The persistent id under which the properties reside.
+	        				]]></xsd:documentation>
+	        			</xsd:annotation>
+	        		</xsd:attribute>
+					<xsd:attribute name="local-override" type="xsd:boolean" default="false">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	Specifies whether local properties override properties from the Configuration Admin service.
+	Default is "false": properties from Configuration Admin service override local defaults.
+	If set to "true", local properties will override properties from Configuration Admin service.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+					<xsd:attribute name="dynamic" type="xsd:boolean" default="false">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	Specifies whether changes to the Configuration Admin service will be reflected by the properties.
+	Default is "false": once resolved from the Configuration Admin, the properties will not change.
+	If set to "true", the properties object content will update accordingly (after initialization) to the changes in the Configuration Admin.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+					<xsd:attribute name="init-lazy" type="xsd:boolean" default="true">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	Specifies whether the properties reflecting the Configuration Admin service entry will be initialized lazy or not.
+	Default is "true": meaning the properties will be initialized just before being requested (from the factory) for the first time. This is
+	the common case as it allows the most recent entry to be used.
+	If set to "false", the properties object will be initialized at startup, along with the bean factory.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+					<xsd:attribute name="init-timeout" type="xsd:nonNegativeInteger" default="0">
+						<xsd:annotation>
+							<xsd:documentation><![CDATA[
+	Specifies the amount of time (in milliseconds) the bean factory will wait for the Configuration Admin entry to
+	be initialized (return a non-null value). If the entry is not null at startup, no waiting will be performed.
+	Similar to the other timeout options, a value of '0' means no waiting. By default, no waiting (0) is performed.
+							]]></xsd:documentation>
+						</xsd:annotation>
+					</xsd:attribute>
+	    		</xsd:extension>
+	    	</xsd:complexContent>
+    	</xsd:complexType>
+    </xsd:element>
+</xsd:schema>
\ Pas de fin de ligne à la fin du fichier
diff -rupN original/integration-tests/tests/pom.xml patched/integration-tests/tests/pom.xml
--- original/integration-tests/tests/pom.xml	2013-05-29 12:41:55.000000000 +0400
+++ patched/integration-tests/tests/pom.xml	2013-05-30 09:38:24.333481069 +0400
@@ -21,7 +21,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.configadmin</artifactId>
-            <version>1.2.4</version>
+            <version>1.2.8</version>
             <scope>provided</scope>
             <exclusions>
                 <exclusion>
diff -rupN original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertyplaceholder/PropertyPlaceholderTest.java patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertyplaceholder/PropertyPlaceholderTest.java
--- original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertyplaceholder/PropertyPlaceholderTest.java	2013-05-29 12:41:55.000000000 +0400
+++ patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertyplaceholder/PropertyPlaceholderTest.java	2013-05-30 07:52:48.153899060 +0400
@@ -72,7 +72,7 @@ public class PropertyPlaceholderTest ext
 	protected String[] getTestBundlesNames() {
 		return new String[] {
 		// required by cm_all for logging
-		"org.apache.felix, org.apache.felix.configadmin, 1.2.4" };
+		"org.apache.felix, org.apache.felix.configadmin, 1.2.8" };
 	}
 
 	protected void onSetUp() throws Exception {
diff -rupN original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyServiceImpl.java patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyServiceImpl.java
--- original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyServiceImpl.java	1970-01-01 03:00:00.000000000 +0300
+++ patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyServiceImpl.java	2013-05-29 20:41:36.494548135 +0400
@@ -0,0 +1,45 @@
+package org.eclipse.gemini.blueprint.iandt.propertypropagation;
+
+public class MyServiceImpl implements MyService {
+
+    private String property1;
+
+    private String property2;
+
+    private String property3;
+
+    private String property4;
+
+    public String getProperty1() {
+	return property1;
+    }
+
+    public void setProperty1(String property1) {
+	this.property1 = property1;
+    }
+
+    public String getProperty2() {
+	return property2;
+    }
+
+    public void setProperty2(String property2) {
+	this.property2 = property2;
+    }
+
+    public String getProperty3() {
+	return property3;
+    }
+
+    public void setProperty3(String property3) {
+	this.property3 = property3;
+    }
+
+    public String getProperty4() {
+	return property4;
+    }
+
+    public void setProperty4(String property4) {
+	this.property4 = property4;
+    }
+
+}
diff -rupN original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyService.java patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyService.java
--- original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyService.java	1970-01-01 03:00:00.000000000 +0300
+++ patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/MyService.java	2013-05-29 19:44:42.292435987 +0400
@@ -0,0 +1,13 @@
+package org.eclipse.gemini.blueprint.iandt.propertypropagation;
+
+public interface MyService {
+
+    String getProperty1();
+
+    String getProperty2();
+
+    String getProperty3();
+
+    String getProperty4();
+
+}
diff -rupN original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest.java patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest.java
--- original/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest.java	1970-01-01 03:00:00.000000000 +0300
+++ patched/integration-tests/tests/src/test/java/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest.java	2013-06-06 11:24:19.025992895 +0400
@@ -0,0 +1,140 @@
+package org.eclipse.gemini.blueprint.iandt.propertypropagation;
+
+import java.io.File;
+import java.io.FilePermission;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.PropertyPermission;
+
+import org.eclipse.gemini.blueprint.iandt.BaseIntegrationTest;
+import org.osgi.framework.AdminPermission;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.cm.ConfigurationPermission;
+import org.eclipse.gemini.blueprint.context.ConfigurableOsgiBundleApplicationContext;
+import org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext;
+import org.eclipse.gemini.blueprint.util.OsgiServiceReferenceUtils;
+
+/**
+ * Integration test for property propagation.
+ * 
+ * @author Alexander Shutyaev
+ */
+public class PropertyPropagationTest extends BaseIntegrationTest {
+
+	private final static String ID = "PropertyPropagationTest-123";
+
+	private final static Dictionary DICT = new Hashtable();
+
+	private Configuration config;
+
+	private ConfigurableOsgiBundleApplicationContext ctx;
+
+	private static String CONFIG_DIR = "test-config";
+
+	protected static void initializeDirectory(String dir) {
+		File directory = new File(dir);
+		remove(directory);
+		assertTrue(dir + " directory successfully created", directory.mkdirs());
+	}
+
+	private static void remove(File directory) {
+		if (directory.exists()) {
+			File[] files = directory.listFiles();
+			for (int i = 0; i < files.length; i++) {
+				File file = files[i];
+				if (file.isDirectory()) {
+					remove(file);
+				}
+				else {
+					assertTrue(file + " deleted", file.delete());
+				}
+			}
+			assertTrue(directory + " directory successfully cleared", directory.delete());
+		}
+	}
+
+	protected String[] getTestBundlesNames() {
+		return new String[] {
+		// required by cm_all for logging
+		"org.apache.felix, org.apache.felix.configadmin, 1.2.8" };
+	}
+
+	protected void onSetUp() throws Exception {
+		super.onSetUp();
+		DICT.put("property1", "value1");
+		DICT.put(".property2", "value2");
+		DICT.put("property3", "value3-public");
+		DICT.put(".property3", "value3-private");
+		System.setProperty("com.gatespace.bundle.cm.store", CONFIG_DIR);
+		System.setProperty("felix.cm.dir", CONFIG_DIR);
+		initializeDirectory(CONFIG_DIR);
+		prepareConfiguration();
+
+		String[] locations = new String[] { "org/eclipse/gemini/blueprint/iandt/propertypropagation/propagation.xml" };
+		ctx = new OsgiBundleXmlApplicationContext(locations);
+		ctx.setBundleContext(bundleContext);
+		ctx.refresh();
+	}
+
+	protected void onTearDown() throws Exception {
+		if (ctx != null)
+			ctx.close();
+	}
+
+	// add a default table into OSGi
+	private void prepareConfiguration() throws Exception {
+
+		ServiceReference ref = OsgiServiceReferenceUtils.getServiceReference(bundleContext,
+			ConfigurationAdmin.class.getName(), null);
+
+		ConfigurationAdmin admin = (ConfigurationAdmin) bundleContext.getService(ref);
+		config = admin.createFactoryConfiguration(ID, null);
+		config.update(DICT);
+	}
+
+	public void testPropertyPropagation() throws Exception {
+		Thread.sleep(1000L); // wait for service registration
+		ServiceReference ref = bundleContext.getServiceReference(MyService.class.getName());
+		MyService service = (MyService) bundleContext.getService(ref);
+		assertEquals("value1", ref.getProperty("property1"));
+		assertNull(ref.getProperty("property2"));
+		assertEquals("value3-public", ref.getProperty("property3"));
+		assertEquals("value4", ref.getProperty("property4"));
+		assertEquals("value1", service.getProperty1());
+		assertEquals("value2", service.getProperty2());
+		assertEquals("value3-private", service.getProperty3());
+		assertNull(service.getProperty4());
+		// update configuration
+		DICT.put("property1", "value1*");
+		DICT.put(".property2", "value2*");
+		DICT.put("property3", "value3-public*");
+		DICT.put(".property3", "value3-private*");
+		config.update(DICT);
+		Thread.sleep(1000L); // wait for update
+		assertEquals("value1*", ref.getProperty("property1"));
+		assertNull(ref.getProperty("property2"));
+		assertEquals("value3-public*", ref.getProperty("property3"));
+		assertEquals("value4", ref.getProperty("property4"));
+		assertEquals("value1*", service.getProperty1());
+		assertEquals("value2*", service.getProperty2());
+		assertEquals("value3-private*", service.getProperty3());
+		assertNull(service.getProperty4());
+	}
+
+	protected List getTestPermissions() {
+		List perms = super.getTestPermissions();
+		// export package
+		perms.add(new AdminPermission("*", AdminPermission.EXECUTE));
+		perms.add(new PropertyPermission("*", "write"));
+		perms.add(new PropertyPermission("*", "read"));
+		perms.add(new FilePermission("<<ALL FILES>>", "read"));
+		perms.add(new FilePermission("<<ALL FILES>>", "delete"));
+		perms.add(new FilePermission("<<ALL FILES>>", "write"));
+		perms.add(new ConfigurationPermission("*", ConfigurationPermission.CONFIGURE));
+		return perms;
+	}
+
+}
diff -rupN original/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/propagation.xml patched/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/propagation.xml
--- original/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/propagation.xml	1970-01-01 03:00:00.000000000 +0300
+++ patched/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/propagation.xml	2013-06-06 11:20:33.430523626 +0400
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:osgix="http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+		http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd">
+
+	<osgix:managed-service-factory factory-pid="PropertyPropagationTest-123"
+	    interface="org.eclipse.gemini.blueprint.iandt.propertypropagation.MyService"
+	    autowire-on-update="true"
+	    propagate-properties="true">
+	    <osgix:service-properties>
+		<entry key="property4" value="value4" />
+	    </osgix:service-properties>
+	    <bean class="org.eclipse.gemini.blueprint.iandt.propertypropagation.MyServiceImpl" />
+	</osgix:managed-service-factory>
+
+</beans>
diff -rupN original/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest-bundle.properties patched/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest-bundle.properties
--- original/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest-bundle.properties	1970-01-01 03:00:00.000000000 +0300
+++ patched/integration-tests/tests/src/test/resources/org/eclipse/gemini/blueprint/iandt/propertypropagation/PropertyPropagationTest-bundle.properties	2013-05-29 12:41:55.000000000 +0400
@@ -0,0 +1,3 @@
+root.dir=file:./target/test-classes
+include.patterns=/**/*.*
+libs=
