diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
index cd1c0af..29cbe94 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.dm.dependencies;
 
+import java.util.Dictionary;
+
 import org.apache.felix.dm.impl.dependencies.DependencyService;
 
 /**
@@ -104,4 +106,7 @@
      * @param service
      */
     public void invokeRemoved(DependencyService service);
+    
+    public boolean isPropagated();
+    public Dictionary getProperties();
 }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
index f8637d6..27d074a 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
@@ -781,12 +781,9 @@
 		addTo(properties, m_serviceProperties);
 		for (int i = 0; i < m_dependencies.size(); i++) {
 			Dependency d = (Dependency) m_dependencies.get(i);
-			if (d instanceof ConfigurationDependencyImpl) {
-				ConfigurationDependencyImpl cd = (ConfigurationDependencyImpl) d;
-				if (cd.isPropagated()) {
-					Dictionary dict = cd.getConfiguration();
-					addTo(properties, dict);
-				}
+			if (d.isPropagated()) {
+				Dictionary dict = d.getProperties();
+				addTo(properties, dict);
 			}
 		}
 		if (properties.size() == 0) {
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
index e67860a..ab748a7 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
@@ -389,4 +389,14 @@
         invokeRemoved(service, m_bundleInstance);
         m_bundleInstance = null;
     }
+
+    public Dictionary getProperties() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isPropagated() {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
index cafb0ea..f90df0c 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
@@ -298,4 +298,8 @@
         // TODO Auto-generated method stub
         return false;
     }
+
+    public Dictionary getProperties() {
+        return getConfiguration();
+    }
 }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
index 09fb6db..e2b4474 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
@@ -22,6 +22,7 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
+import java.util.Dictionary;
 import java.util.List;
 import java.util.Properties;
 
@@ -47,11 +48,11 @@
     protected List m_services = new ArrayList();
 	private boolean m_isRequired;
 	private String m_resourceFilter;
-//	private Resource m_resource;
 	private Resource m_trackedResource;
     private boolean m_isStarted;
     private List m_resources = new ArrayList();
     private Resource m_resourceInstance;
+    private boolean m_propagate;
 	
     public ResourceDependencyImpl(BundleContext context, Logger logger) {
     	m_context = context;
@@ -414,4 +415,28 @@
         invokeRemoved(service, m_resourceInstance);
         m_resourceInstance = null;
     }
+
+    public ResourceDependency setPropagate(boolean propagate) {
+        ensureNotActive();
+        m_propagate = propagate;
+        return this;
+    }
+    
+    public Dictionary getProperties() {
+        Resource resource = lookupResource();
+        if (resource != null) {
+            Properties props = new Properties();
+            props.put(Resource.NAME, resource.getName());
+            props.put(Resource.PATH, resource.getPath());
+            props.put(Resource.REPOSITORY, resource.getRepository());
+            return props;
+        }
+        else {
+            throw new IllegalStateException("cannot find resource");
+        }
+    }
+
+    public boolean isPropagated() {
+        return m_propagate;
+    }
 }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
index f337bd3..3c25769 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
@@ -23,6 +23,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -753,4 +754,14 @@
         m_reference = null;
         m_serviceInstance = null;
     }
+
+    public Dictionary getProperties() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public boolean isPropagated() {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }
