diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
index deaf0c0..903333e 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentManager.java
@@ -31,6 +31,7 @@
 import org.apache.felix.dm.dependencies.BundleDependency;
 import org.apache.felix.dm.dependencies.ConfigurationDependency;
 import org.apache.felix.dm.dependencies.Dependency;
+import org.apache.felix.dm.dependencies.ResourceDependency;
 import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.dependencies.TemporalServiceDependency;
 import org.apache.felix.dm.service.Service;
@@ -164,6 +165,10 @@
                         service = createBundleAdapterService(b, dm, parser);
                         break;
 
+                    case ResourceAdapterService:
+                        service = createResourceAdapterService(b, dm, parser);
+                        break;
+
                     case ServiceDependency:
                         checkServiceParsed(service);
                         service.add(createServiceDependency(b, dm, parser, false));
@@ -183,6 +188,11 @@
                         checkServiceParsed(service);
                         service.add(createBundleDependency(b, dm, parser));
                         break;
+                        
+                    case ResourceDependency:
+                        checkServiceParsed(service);
+                        service.add(createResourceDependency(b, dm, parser));
+                        break;
                 }
             }
 
@@ -386,6 +396,27 @@
     }
 
     /**
+     * Creates a Resource Adapter Service.
+     * @param b
+     * @param dm
+     * @param parser
+     * @return
+     */
+    private Service createResourceAdapterService(Bundle b, DependencyManager dm, DescriptorParser parser)
+        throws ClassNotFoundException
+    {
+        String filter = parser.getString(DescriptorParam.filter, null);
+        Class<?> impl = b.loadClass(parser.getString(DescriptorParam.impl));
+        String service = parser.getString(DescriptorParam.service);
+        Class<?> serviceClass = b.loadClass(service);
+        Dictionary<String, String> properties = parser.getDictionary(DescriptorParam.properties, null);
+        boolean propagate = "true".equals(parser.getString(DescriptorParam.propagate, "false"));
+        Service srv = dm.createResourceAdapterService(filter, serviceClass, properties, impl, propagate);  
+        setCommonServiceParams(srv, parser);
+        return srv;
+    }
+
+    /**
      * Creates a ServiceDependency that we parsed from a component descriptor "ServiceDependency" entry.
      * @param b
      * @param dm
@@ -510,7 +541,33 @@
         }
 
         // propagate
-        bd.setPropagate("true".equals(parser.getString(DescriptorParam.stateMask, "false")));
+        bd.setPropagate("true".equals(parser.getString(DescriptorParam.propagate, "false")));
         return bd;
     }
-}
+
+    private Dependency createResourceDependency(Bundle b, DependencyManager dm,
+        DescriptorParser parser)
+    {
+        ResourceDependency rd = dm.createResourceDependency();
+
+        // Set add/changed/removed
+        String added = parser.getString(DescriptorParam.added, null);
+        String changed = parser.getString(DescriptorParam.changed, null);
+        String removed = parser.getString(DescriptorParam.removed, null);
+        rd.setCallbacks(added, changed, removed);
+
+        // required
+        rd.setRequired("true".equals(parser.getString(DescriptorParam.required, "true")));
+        
+        // filter
+        String filter = parser.getString(DescriptorParam.filter, null);
+        if (filter != null) 
+        {
+            rd.setFilter(filter);
+        }
+        
+        // propagate
+        rd.setPropagate("true".equals(parser.getString(DescriptorParam.propagate, "false")));
+        return rd;
+    }
+}
\ No newline at end of file
diff --git a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
index 70f890a..da8d2c0 100644
--- a/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
+++ b/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorEntry.java
@@ -28,8 +28,10 @@
     AspectService,
     AdapterService,
     BundleAdapterService,
+    ResourceAdapterService,
     ServiceDependency,
     TemporalServiceDependency,
     ConfigurationDependency,
-    BundleDependency
+    BundleDependency,
+    ResourceDependency
 }
