diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java
new file mode 100644
index 0000000..f460048
--- /dev/null
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/component/ComplexConfiguration.java
@@ -0,0 +1,38 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.configuration.service.CheckService;
+
+public class ComplexConfiguration implements CheckService {
+    
+    private List m_list;
+    private Map m_map;
+    private Dictionary m_dict;
+    private String[] m_array;
+    
+    private List m_complexList;
+    private Map m_complexMap;
+    private Object[] m_complexArray;
+
+    public boolean check() {
+        return true;
+    }
+    
+
+    public Properties getProps() {
+        Properties props = new Properties();
+        props.put("list", m_list);
+        props.put("map", m_map);
+        props.put("dict", m_dict);
+        props.put("array", m_array);
+        props.put("complex-list", m_complexList);
+        props.put("complex-map", m_complexMap);
+        props.put("complex-array", m_complexArray);
+        return props;
+    }
+
+}
diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
index 60796bc..80c919d 100644
--- a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/ConfigurationTestSuite.java
@@ -34,7 +34,7 @@
 		ots.addTestSuite(TestBothProperties.class);
 		ots.addTestSuite(TestSuperMethodProperties.class);
 		ots.addTestSuite(ManagedServiceConfigurableProperties.class);
-		
+		ots.addTestSuite(TestComplexProperties.class);
 		return ots;
 	}
 
diff --git a/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java
new file mode 100644
index 0000000..f24cc59
--- /dev/null
+++ b/ipojo/tests/tests.core.configuration/src/main/java/org/apache/felix/ipojo/test/scenarios/configuration/TestComplexProperties.java
@@ -0,0 +1,189 @@
+package org.apache.felix.ipojo.test.scenarios.configuration;
+
+import java.util.Dictionary;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.test.scenarios.configuration.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.util.Utils;
+import org.osgi.framework.ServiceReference;
+
+public class TestComplexProperties extends OSGiTestCase {
+    
+    private ServiceReference m_ref;
+    private CheckService m_check;
+    
+    public void setUp() {
+       m_ref = Utils.getServiceReferenceByName(context, CheckService.class.getName(), "complex");
+       assertNotNull("Complex service availability", m_ref);
+       m_check = (CheckService) context.getService(m_ref);
+    }
+    
+    public void tearDown() {
+        m_check = null;
+        context.ungetService(m_ref);
+    }
+    
+    public void testArray() {
+        String[] array = (String[]) m_check.getProps().get("array");
+        assertEquals("Array size", 2, array.length);
+        assertEquals("Array[0]", "a", array[0]);
+        assertEquals("Array[1]", "b", array[1]);
+    }
+    
+    public void testList() {
+        List list = (List) m_check.getProps().get("list");
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+    }
+    
+    public void testMap() {
+        Map map = (Map) m_check.getProps().get("map");
+        assertEquals("Map size", 2, map.size());
+        assertEquals("Map[a]", "a", map.get("a"));
+        assertEquals("Map[b]", "b", map.get("b"));
+    }
+    
+    public void testDictionary() {
+        Dictionary dict = (Dictionary) m_check.getProps().get("dict");
+        assertEquals("Map size", 2, dict.size());
+        assertEquals("Map[a]", "a", dict.get("a"));
+        assertEquals("Map[b]", "b", dict.get("b"));
+    }
+    
+    public void testComplexArray() {
+        Object[] array = (Object[]) m_check.getProps().get("complex-array");
+        assertEquals("Array size", 2, array.length);
+        assertTrue("Array[0] type", array[0] instanceof List);
+        assertTrue("Array[1] type", array[1] instanceof List);
+        List list = (List) array[0];
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+        list = (List) array[1];
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testComplexList() {
+        List list = (List) m_check.getProps().get("complex-list");
+        assertEquals("List size", 2, list.size());
+        assertTrue("List[0] type", list.get(0) instanceof List);
+        assertTrue("List[1] type", list.get(1) instanceof List);
+        List list1 = (List) list.get(0);
+        assertEquals("List size - 1", 2, list1.size());
+        assertEquals("List[0] - 1", "a", list1.get(0));
+        assertEquals("List[1] - 1", "b", list1.get(1));
+        list1 = (List) list.get(1);
+        assertEquals("List size - 2", 2, list1.size());
+        assertEquals("List[0] - 2", "c", list1.get(0));
+        assertEquals("List[1] - 2", "d", list1.get(1));
+    }
+    
+    public void testComplexMap() {
+        Map map = (Map) m_check.getProps().get("complex-map");
+        assertEquals("List size", 2, map.size());
+        assertTrue("List[0] type", map.get("a") instanceof List);
+        assertTrue("List[1] type", map.get("b") instanceof List);
+        List list = (List) map.get("a");
+        assertEquals("List size - 1", 2, list.size());
+        assertEquals("List[0] - 1", "a", list.get(0));
+        assertEquals("List[1] - 1", "b", list.get(1));
+        list = (List) map.get("b");
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceArray() {
+        String[] array = (String[]) m_ref.getProperty("array");
+        assertEquals("Array size", 2, array.length);
+        assertEquals("Array[0]", "a", array[0]);
+        assertEquals("Array[1]", "b", array[1]);
+    }
+    
+    public void testServiceList() {
+        List list = (List) m_ref.getProperty("list");
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+    }
+    
+    public void testServiceMap() {
+        Map map = (Map) m_ref.getProperty("map");
+        assertEquals("Map size", 2, map.size());
+        assertEquals("Map[a]", "a", map.get("a"));
+        assertEquals("Map[b]", "b", map.get("b"));
+    }
+    
+    public void testServiceDictionary() {
+        Dictionary dict = (Dictionary) m_ref.getProperty("dict");
+        assertEquals("Map size", 2, dict.size());
+        assertEquals("Map[a]", "a", dict.get("a"));
+        assertEquals("Map[b]", "b", dict.get("b"));
+    }
+    
+    public void testServiceComplexArray() {
+        Object[] array = (Object[]) m_ref.getProperty("complex-array");
+        assertEquals("Array size", 2, array.length);
+        assertTrue("Array[0] type", array[0] instanceof List);
+        assertTrue("Array[1] type", array[1] instanceof List);
+        List list = (List) array[0];
+        assertEquals("List size", 2, list.size());
+        assertEquals("List[0]", "a", list.get(0));
+        assertEquals("List[1]", "b", list.get(1));
+        list = (List) array[1];
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceComplexList() {
+        List list = (List) m_ref.getProperty("complex-list");
+        assertEquals("List size", 2, list.size());
+        assertTrue("List[0] type", list.get(0) instanceof List);
+        assertTrue("List[1] type", list.get(1) instanceof List);
+        List list1 = (List) list.get(0);
+        assertEquals("List size - 1", 2, list1.size());
+        assertEquals("List[0] - 1", "a", list1.get(0));
+        assertEquals("List[1] - 1", "b", list1.get(1));
+        list1 = (List) list.get(1);
+        assertEquals("List size - 2", 2, list1.size());
+        assertEquals("List[0] - 2", "c", list1.get(0));
+        assertEquals("List[1] - 2", "d", list1.get(1));
+    }
+    
+    public void testServiceComplexMap() {
+        Map map = (Map) m_ref.getProperty("complex-map");
+        assertEquals("List size", 2, map.size());
+        assertTrue("List[0] type", map.get("a") instanceof List);
+        assertTrue("List[1] type", map.get("b") instanceof List);
+        List list = (List) map.get("a");
+        assertEquals("List size - 1", 2, list.size());
+        assertEquals("List[0] - 1", "a", list.get(0));
+        assertEquals("List[1] - 1", "b", list.get(1));
+        list = (List) map.get("b");
+        assertEquals("List size - 2", 2, list.size());
+        assertEquals("List[0] - 2", "c", list.get(0));
+        assertEquals("List[1] - 2", "d", list.get(1));
+    }
+    
+    public void testServiceEmptyArray() {
+        String[] array = (String[]) m_ref.getProperty("empty-array");
+        assertEquals("Array size", 0, array.length);
+    }
+    
+    public void testServiceEmptyList() {
+        List list = (List) m_ref.getProperty("empty-list");
+        assertEquals("List size", 0, list.size());
+    }
+    
+    public void testServiceEmptyMap() {
+        Map map = (Map) m_ref.getProperty("empty-map");
+        assertEquals("Map size", 0, map.size());
+    }
+
+}
diff --git a/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml b/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
index b389cd5..f7f012c 100644
--- a/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
+++ b/ipojo/tests/tests.core.configuration/src/main/resources/metadata.xml
@@ -145,4 +145,83 @@
 		</properties>
 	</component>
 	
+	<component
+		classname="org.apache.felix.ipojo.test.scenarios.component.ComplexConfiguration">
+		<provides>
+			<property name="array" field="m_array"/>
+			<property name="complex-array" field="m_complexArray"/>
+			<property name="list" field="m_list"/>
+			<property name="complex-list" field="m_complexList"/>
+			<property name="map" field="m_map"/>
+			<property name="complex-map" field="m_complexMap"/>
+			<property name="dict" field="m_dict"/>
+			<property name="empty-array" type="String[]"/>
+			<property name="empty-map" type="java.util.HashMap"/>
+			<property name="empty-list" type="java.util.List"/>
+		</provides>
+		<properties>
+			<property name="array" field="m_array"/>
+			<property name="complex-array" field="m_complexArray"/>
+			<property name="list" field="m_list"/>
+			<property name="complex-list" field="m_complexList"/>
+			<property name="map" field="m_map"/>
+			<property name="complex-map" field="m_complexMap"/>
+			<property name="dict" field="m_dict"/>
+		</properties>
+	</component>
+	
+	<instance component="org.apache.felix.ipojo.test.scenarios.component.ComplexConfiguration" name="complex">
+		<property name="array" type="array">
+			<property value="a"/>
+			<property value="b"/>
+		</property>
+		<property name="list" type="list">
+			<property value="a"/>
+			<property value="b"/>
+		</property>
+		<property name="dict" type="dictionary">
+			<property name="a" value="a"/>
+			<property name="b" value="b"/>
+		</property>
+		<property name="map" type="map">
+			<property name="a" value="a"/>
+			<property name="b" value="b"/>
+		</property>
+		<property name="complex-array" type="array">
+			<property type="list">
+				<property value="a"/>
+				<property value="b"/>
+			</property>
+			<property type="list">
+				<property value="c"/>
+				<property value="d"/>
+			</property>
+		</property>
+		<property name="complex-list" type="list">
+			<property type="list">
+				<property value="a"/>
+				<property value="b"/>
+			</property>
+			<property type="list">
+				<property value="c"/>
+				<property value="d"/>
+			</property>
+		</property>
+		<property name="complex-map" type="map">
+			<property name="a" type="list">
+				<property value="a"/>
+				<property value="b"/>
+			</property>
+			<property name="b" type="list">
+				<property value="c"/>
+				<property value="d"/>
+			</property>
+		</property>
+		<property name="empty-array" type="array"/>
+		<property name="empty-list" type="list"/>
+		<property name="empty-map" type="map"/>
+	</instance>
+		
+		
+	
 </ipojo>
diff --git a/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml b/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
index 9f386f3..6d73ce8 100644
--- a/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
+++ b/ipojo/tests/tests.core.manipulation/src/main/resources/metadata.xml
@@ -30,8 +30,8 @@
 			<property name="boolean" field="boolProp" value="false" />
 			<property name="string" field="strProp" value="foo" />
 			<property name="strAProp" field="strAProp"
-				value="{foo, bar}" />
-			<property name="intAProp" field="intAProp" value="{ 1,2,3}" />
+				value="[foo, bar]" />
+			<property name="intAProp" field="intAProp" value="[ 1,2,3]" />
 		</provides>
 	</component>
 	
