diff --git a/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/ConvertedResource.java b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/ConvertedResource.java
new file mode 100644
index 0000000..5055305
--- /dev/null
+++ b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/ConvertedResource.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.bundlerepository.impl.wrapper;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.felix.bundlerepository.Capability;
+import org.apache.felix.bundlerepository.Requirement;
+import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.bundlerepository.impl.CapabilityImpl;
+import org.apache.felix.bundlerepository.impl.RequirementImpl;
+import org.osgi.framework.Version;
+
+public class ConvertedResource implements Resource {
+
+    private final org.osgi.service.obr.Resource resource;
+    
+    private Capability[] capabilities;
+    private Requirement[] requirements;
+
+    public ConvertedResource(org.osgi.service.obr.Resource resource) {
+        this.resource = resource;
+        
+        // convert capabilities
+        org.osgi.service.obr.Capability[] c = resource.getCapabilities();
+        if (c != null) {
+            capabilities = new Capability[c.length];
+            for (int i = 0; i < c.length; i++) {
+                CapabilityImpl cap = new CapabilityImpl(c[i].getName());
+                Iterator iter = c[i].getProperties().entrySet().iterator();     
+                int j = 0;
+                while (iter.hasNext()) {
+                    Map.Entry entry = (Map.Entry) iter.next();
+                    cap.addProperty((String) entry.getKey(), null, (String) entry.getValue());
+                }
+                
+                capabilities[i] = cap;
+            }
+        }
+        
+        // convert requirements
+        org.osgi.service.obr.Requirement[] r = resource.getRequirements();
+        if (r != null) {
+            requirements = new Requirement[r.length];
+            for (int i = 0; i < r.length; i++) {
+                RequirementImpl req = new RequirementImpl(r[i].getName());
+                req.setFilter(r[i].getFilter());
+                req.setOptional(r[i].isOptional());
+                req.setExtend(r[i].isExtend());
+                req.setMultiple(r[i].isMultiple());
+                
+                requirements[i] = req;                
+            }
+        }
+    }
+
+    public Capability[] getCapabilities() {
+        return capabilities;
+    }
+
+    public Requirement[] getRequirements() {
+        return requirements;
+    }
+    
+    public String[] getCategories() {
+        return resource.getCategories();
+    }
+
+    public String getId() {
+        return resource.getId();
+    }
+
+    public String getPresentationName() {
+        return resource.getPresentationName();
+    }
+
+    public Map getProperties() {
+        return resource.getProperties();
+    }
+
+    public Long getSize() {
+        return null;
+    }
+
+    public String getSymbolicName() {
+        return resource.getSymbolicName();
+    }
+
+    public String getURI() {
+        return resource.getURL().toString();
+    }
+
+    public Version getVersion() {
+        return resource.getVersion();
+    }
+
+    public boolean isLocal() {
+        return false;
+    }
+   
+}
diff --git a/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/Wrapper.java b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/Wrapper.java
index d590882..56a5979 100644
--- a/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/Wrapper.java
+++ b/bundlerepository/src/main/java/org/apache/felix/bundlerepository/impl/wrapper/Wrapper.java
@@ -56,7 +56,11 @@
     }
 
     public static Resource unwrap(org.osgi.service.obr.Resource resource) {
-        return ((ResourceWrapper) resource).resource;
+        if (resource instanceof ResourceWrapper) {
+            return ((ResourceWrapper) resource).resource;
+        } else {
+            return new ConvertedResource(resource);
+        }
     }
 
     public static Requirement unwrap(org.osgi.service.obr.Requirement requirement) {
