diff --git a/build.versions b/build.versions
index 0c9d112..6f48a1e 100644
--- a/build.versions
+++ b/build.versions
@@ -1,3 +1,4 @@
 org.aspectj=1.6.6.RELEASE
-org.osgi=4.1.0
+org.eclipse.osgi=3.7.0.v20101022
+org.eclipse.osgi.services=3.3.0.v20101018
 org.junit=4.7.0
diff --git a/org.eclipse.virgo.teststubs.osgi/.classpath b/org.eclipse.virgo.teststubs.osgi/.classpath
index 4ed98a5..726ae1d 100644
--- a/org.eclipse.virgo.teststubs.osgi/.classpath
+++ b/org.eclipse.virgo.teststubs.osgi/.classpath
@@ -23,7 +23,7 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="var" path="TEST_STUBS_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/TEST_STUBS_IVY_CACHE/org.junit/com.springsource.org.junit/4.4.0/com.springsource.org.junit-sources-4.4.0.jar"/>
 	<classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
-	<classpathentry kind="var" path="TEST_STUBS_IVY_CACHE/org.osgi/org.osgi.core/4.1.0/org.osgi.core-4.1.0.jar"/>
-	<classpathentry kind="var" path="TEST_STUBS_IVY_CACHE/org.osgi/org.osgi.compendium/4.1.0/org.osgi.compendium-4.1.0.jar"/>
+	<classpathentry kind="var" path="TEST_STUBS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.0.v20101022/org.eclipse.osgi-3.7.0.v20101022.jar" sourcepath="/TEST_STUBS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.0.v20101022/org.eclipse.osgi-sources-3.7.0.v20101022.jar"/>
+	<classpathentry kind="var" path="TEST_STUBS_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi.services/3.3.0.v20101018/org.eclipse.osgi.services-3.3.0.v20101018.jar"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/org.eclipse.virgo.teststubs.osgi/ivy.xml b/org.eclipse.virgo.teststubs.osgi/ivy.xml
index 34b4d71..beb616f 100644
--- a/org.eclipse.virgo.teststubs.osgi/ivy.xml
+++ b/org.eclipse.virgo.teststubs.osgi/ivy.xml
@@ -19,8 +19,8 @@
 	<dependencies>
 		<dependency org="org.aspectj" name="com.springsource.org.aspectj.runtime" rev="${org.aspectj}" conf="compile->runtime"/>
 		<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit}" conf="compile->runtime"/>
-		<dependency org="org.osgi" name="org.osgi.core" rev="${org.osgi}" conf="compile->runtime"/>
-		<dependency org="org.osgi" name="org.osgi.compendium" rev="${org.osgi}" conf="compile->runtime"/>
+		<dependency name='org.eclipse.osgi' rev='${org.eclipse.osgi}' org='org.eclipse.osgi' conf='compile->runtime'/>
+		<dependency org="org.eclipse.osgi" name="org.eclipse.osgi.services" rev="${org.eclipse.osgi.services}" conf="compile->runtime"/>
 	</dependencies>
 
 </ivy-module>
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/OSGiAssert.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/OSGiAssert.java
index 934f0f4..4ebadf3 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/OSGiAssert.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/OSGiAssert.java
@@ -104,7 +104,7 @@
     public static void assertServiceRegistrationCount(StubBundleContext bundleContext, Class<?> type, int count) {
         String typeName = type.getName();
         int found = 0;
-        for (ServiceRegistration serviceRegistration : bundleContext.getServiceRegistrations()) {
+        for (ServiceRegistration<?> serviceRegistration : bundleContext.getServiceRegistrations()) {
             String[] objectClasses = (String[]) serviceRegistration.getReference().getProperty(Constants.OBJECTCLASS);
             for (String objectClass : objectClasses) {
                 if (typeName.equals(objectClass)) {
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundle.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundle.java
index a751786..fb17279 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundle.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundle.java
@@ -14,9 +14,11 @@
 import static org.eclipse.virgo.teststubs.osgi.internal.Assert.assertNotNull;
 import static org.eclipse.virgo.teststubs.osgi.internal.Duplicator.shallowCopy;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.Enumeration;
@@ -32,7 +34,8 @@
 import org.osgi.framework.Version;
 
 /**
- * A stub testing implementation of {@link Bundle} as defined in section 6.1.4 of the OSGi Service Platform Core Specification.
+ * A stub testing implementation of {@link Bundle} as defined in section 6.1.4 of the OSGi Service Platform Core
+ * Specification.
  * <p />
  * 
  * <strong>Concurrent Semantics</strong><br />
@@ -711,4 +714,48 @@
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public int compareTo(Bundle o) {
+        int bundleIdCompare = (new Long(o.getBundleId())).compareTo(this.bundleId);
+        if (bundleIdCompare != 0) {
+            return bundleIdCompare;
+        }
+        int symbolicNameCompare = o.getSymbolicName().compareTo(this.symbolicName);
+        if (symbolicNameCompare != 0) {
+            return symbolicNameCompare;
+        }
+        int bundleVersionCompare = o.getVersion().compareTo(this.version);
+        if (bundleVersionCompare != 0) {
+            return bundleVersionCompare;
+        }
+        int bundleLocationCompare = o.getLocation().compareTo(this.location);
+        if (bundleLocationCompare != 0) {
+            return bundleLocationCompare;
+        }
+        return 0;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+        return new HashMap<X509Certificate, List<X509Certificate>>();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public <A> A adapt(Class<A> type) {
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public File getDataFile(String filename) {
+        return null;
+    }
+
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContext.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContext.java
index 5f7a9f3..299b557 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContext.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContext.java
@@ -18,6 +18,7 @@
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.List;
@@ -286,21 +287,21 @@
     /**
      * {@inheritDoc}
      */
-    public Object getService(ServiceReference reference) {
+    public <S> S getService(ServiceReference<S> reference) {
         synchronized (this.servicesMonitor) {
             if (serviceUnregistered(reference)) {
                 return null;
             }
 
-            return this.services.get(reference);
+            return (S) this.services.get(reference);
         }
     }
 
     /**
      * {@inheritDoc}
      */
-    public ServiceReference getServiceReference(String clazz) {
-        ServiceReference[] serviceReferences = null;
+    public ServiceReference<?> getServiceReference(String clazz) {
+        ServiceReference<?>[] serviceReferences = null;
         try {
             serviceReferences = getServiceReferences(clazz, null);
         } catch (InvalidSyntaxException e) {
@@ -382,7 +383,7 @@
      * {@inheritDoc}
      */
     @SuppressWarnings("unchecked")
-    public ServiceRegistration registerService(String[] clazzes, Object service, Dictionary properties) {
+    public ServiceRegistration<?> registerService(String[] clazzes, Object service, Dictionary<String, ?> properties) {
         StubServiceRegistration serviceRegistration = createServiceRegistration(clazzes, properties);
         StubServiceReference serviceReference = createServiceReference(clazzes, service, serviceRegistration);
 
@@ -411,7 +412,7 @@
      * {@inheritDoc}
      */
     @SuppressWarnings("unchecked")
-    public ServiceRegistration registerService(String clazz, Object service, Dictionary properties) {
+    public ServiceRegistration<?> registerService(String clazz, Object service, Dictionary<String, ?> properties) {
         return registerService(new String[] { clazz }, service, properties);
     }
 
@@ -504,7 +505,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean ungetService(ServiceReference reference) {
+    public boolean ungetService(ServiceReference<?> reference) {
         return !serviceUnregistered(reference);
     }
 
@@ -520,4 +521,24 @@
     private boolean serviceUnregistered(ServiceReference reference) {
         return ((StubServiceReference) reference).getServiceRegistration().getUnregistered();
     }
+
+    public <S> ServiceRegistration<S> registerService(Class<S> clazz, S service, Dictionary<String, ?> properties) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <S> ServiceReference<S> getServiceReference(Class<S> clazz) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public <S> Collection<ServiceReference<S>> getServiceReferences(Class<S> clazz, String filter) throws InvalidSyntaxException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle getBundle(String location) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/FalseFilter.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/FalseFilter.java
index e3b0e6d..10fdb83 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/FalseFilter.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/FalseFilter.java
@@ -12,6 +12,7 @@
 package org.eclipse.virgo.teststubs.osgi.support;
 
 import java.util.Dictionary;
+import java.util.Map;
 
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
@@ -53,23 +54,28 @@
     /**
      * {@inheritDoc}
      */
-    public boolean match(ServiceReference reference) {
+   public boolean match(ServiceReference<?> reference) {
         return false;
     }
 
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean match(Dictionary dictionary) {
+    public boolean match(Dictionary<String, ?> dictionary) {
         return false;
     }
 
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean matchCase(Dictionary dictionary) {
+    public boolean matchCase(Dictionary<String, ?> dictionary) {
+        return false;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean matches(Map<String, ?> map) {
         return false;
     }
 
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilter.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilter.java
index 5e1ca2e..321f1f2 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilter.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilter.java
@@ -14,6 +14,7 @@
 import static org.eclipse.virgo.teststubs.osgi.internal.Assert.assertNotNull;
 
 import java.util.Dictionary;
+import java.util.Map;
 
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
@@ -52,23 +53,21 @@
     /**
      * {@inheritDoc}
      */
-    public boolean match(ServiceReference reference) {
+    public boolean match(ServiceReference<?> reference) {
         return contains((String[]) reference.getProperty(Constants.OBJECTCLASS), this.className);
     }
 
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean match(Dictionary dictionary) {
+    public boolean match(Dictionary<String, ?> dictionary) {
         return contains((String[]) dictionary.get(Constants.OBJECTCLASS), this.className);
     }
 
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean matchCase(Dictionary dictionary) {
+    public boolean matchCase(Dictionary<String, ?> dictionary) {
         return match(dictionary);
     }
 
@@ -78,6 +77,13 @@
     public String getFilterString() {
         return String.format(FILTER_STRING_FORMAT, this.className);
     }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public boolean matches(Map<String, ?> map) {
+        return contains((String [])map.get(Constants.OBJECTCLASS), this.className);
+    }
 
     private boolean contains(String[] strings, String toMatch) {
         for (String string : strings) {
@@ -87,4 +93,5 @@
         }
         return false;
     }
+    
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/PropertiesFilter.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/PropertiesFilter.java
index 3f3dde6..d857d8d 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/PropertiesFilter.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/PropertiesFilter.java
@@ -66,7 +66,7 @@
     /**
      * {@inheritDoc}
      */
-    public boolean match(ServiceReference reference) {
+    public boolean match(ServiceReference<?> reference) {
         for (Entry<String, Object> entry : this.properties.entrySet()) {
             Object value = reference.getProperty(entry.getKey());
             if (value == null || !value.equals(entry.getValue())) {
@@ -79,8 +79,7 @@
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean match(Dictionary dictionary) {
+    public boolean match(Dictionary<String, ?> dictionary) {
         for (Entry<String, Object> entry : this.properties.entrySet()) {
             Object value = dictionary.get(entry.getKey());
             if (value == null || !value.equals(entry.getValue())) {
@@ -93,8 +92,7 @@
     /**
      * {@inheritDoc}
      */
-    @SuppressWarnings("unchecked")
-    public boolean matchCase(Dictionary dictionary) {
+    public boolean matchCase(Dictionary<String, ?> dictionary) {
         return match(dictionary);
     }
 
@@ -129,4 +127,17 @@
 
         return properties;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean matches(Map<String, ?> map) {
+        for (Entry<String, Object> entry : this.properties.entrySet()) {
+            Object value = map.get(entry.getKey());
+            if (value == null || !value.equals(entry.getValue())) {
+                return false;
+            }
+        }
+        return true;
+    }
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/TrueFilter.java b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/TrueFilter.java
index 267be62..e5cb68a 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/TrueFilter.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/java/org/eclipse/virgo/teststubs/osgi/support/TrueFilter.java
@@ -12,6 +12,7 @@
 package org.eclipse.virgo.teststubs.osgi.support;
 
 import java.util.Dictionary;
+import java.util.Map;
 
 import org.osgi.framework.Filter;
 import org.osgi.framework.ServiceReference;
@@ -43,33 +44,38 @@
         this.filterString = filterString;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public boolean match(ServiceReference reference) {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public boolean match(Dictionary dictionary) {
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings("unchecked")
-    public boolean matchCase(Dictionary dictionary) {
-        return true;
-    }
-
-    /**
+   /**
      * {@inheritDoc}
      */
     public String getFilterString() {
         return this.filterString;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean match(ServiceReference<?> reference) {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean match(Dictionary<String, ?> dictionary) {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean matchCase(Dictionary<String, ?> dictionary) {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean matches(Map<String, ?> map) {
+        return true;
+    }
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/main/resources/META-INF/MANIFEST.MF b/org.eclipse.virgo.teststubs.osgi/src/main/resources/META-INF/MANIFEST.MF
index 81616bf..5f567e8 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/main/resources/META-INF/MANIFEST.MF
+++ b/org.eclipse.virgo.teststubs.osgi/src/main/resources/META-INF/MANIFEST.MF
@@ -1,15 +1,14 @@
 Manifest-Version: 1.0
-Export-Package: com.springsource;version="1.0.0",com.springsource.osgi
- ;version="1.0.0",org.eclipse.virgo.teststubs.osgi.framework;version="
- 1.0.0";uses:="org.osgi.framework",org.eclipse.virgo.teststubs.osgi.se
- rvice.cm;version="1.0.0";uses:="org.osgi.framework,org.osgi.service.c
- m",org.eclipse.virgo.teststubs.osgi.service.event;version="1.0.0";use
- s:="org.osgi.service.event",org.eclipse.virgo.teststubs.osgi.service.
- event.internal;version="1.0.0";uses:="org.osgi.service.event",org.ecl
- ipse.virgo.teststubs.osgi.support;version="1.0.0";uses:="org.osgi.fra
- mework"
+Export-Package: org.eclipse.virgo.teststubs.osgi.framework;version="1.
+ 0.0";uses:="org.osgi.framework",org.eclipse.virgo.teststubs.osgi.serv
+ ice.cm;version="1.0.0";uses:="org.osgi.framework,org.osgi.service.cm"
+ ,org.eclipse.virgo.teststubs.osgi.service.event;version="1.0.0";uses:
+ ="org.osgi.service.event",org.eclipse.virgo.teststubs.osgi.service.ev
+ ent.internal;version="1.0.0";uses:="org.osgi.service.event",org.eclip
+ se.virgo.teststubs.osgi.support;version="1.0.0";uses:="org.osgi.frame
+ work"
 Bundle-Version: 1.0.0
-Tool: Bundlor 1.0.0.M6
+Tool: Bundlor 1.0.0.RELEASE
 Bundle-Name: OSGi Framework Test Stub Implementations
 Bundle-ManifestVersion: 2
 Import-Package: org.aspectj.internal.lang.annotation;version="[1.6.3.R
diff --git a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContextTests.java b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContextTests.java
index 4352d27..da23e1f 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContextTests.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/framework/StubBundleContextTests.java
@@ -25,6 +25,7 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
 
 import org.junit.Test;
 import org.osgi.framework.Bundle;
@@ -232,13 +233,13 @@
 
     @Test
     public void getServiceReferencesNullReturn() throws InvalidSyntaxException {
-        assertNull(this.bundleContext.getServiceReferences(null, null));
+        assertNull(this.bundleContext.getServiceReferences((String)null, null));
     }
 
     @Test
     public void getServiceReferencesNullClassNullFilter() throws InvalidSyntaxException {
         this.bundleContext.registerService(Object.class.getName(), new Object(), null);
-        assertEquals(1, this.bundleContext.getServiceReferences(null, null).length);
+        assertEquals(1, this.bundleContext.getServiceReferences((String)null, null).length);
     }
 
     @Test
@@ -262,20 +263,20 @@
 
     @Test
     public void getServiceReferenceNoValues() throws InvalidSyntaxException {
-        assertNull(this.bundleContext.getServiceReference(null));
+        assertNull(this.bundleContext.getServiceReference((String)null));
     }
 
     @Test
     public void getServiceReferenceOneValue() throws InvalidSyntaxException {
         this.bundleContext.registerService(Object.class.getName(), new Object(), null);
-        assertNotNull(this.bundleContext.getServiceReference(null));
+        assertNotNull(this.bundleContext.getServiceReference((String)null));
     }
 
     @Test
     public void getServiceReferenceTwoValues() throws InvalidSyntaxException {
         this.bundleContext.registerService(Object.class.getName(), new Object(), null);
         this.bundleContext.registerService(Object.class.getName(), new Object(), null);
-        assertNotNull(this.bundleContext.getServiceReference(null));
+        assertNotNull(this.bundleContext.getServiceReference((String)null));
     }
 
     private static class TestBundleListener implements BundleListener {
@@ -326,21 +327,40 @@
 
     private static class TestFilter extends AbstractFilter {
 
-        public boolean match(ServiceReference reference) {
+        /**
+         * {@inheritDoc}
+         */
+        public boolean match(ServiceReference<?> reference) {
             return true;
         }
 
-        public boolean match(Dictionary dictionary) {
+        /**
+         * {@inheritDoc}
+         */
+        public boolean match(Dictionary<String, ?> dictionary) {
             throw new UnsupportedOperationException();
         }
 
-        public boolean matchCase(Dictionary dictionary) {
+        /**
+         * {@inheritDoc}
+         */
+        public boolean matchCase(Dictionary<String, ?> dictionary) {
             throw new UnsupportedOperationException();
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public String getFilterString() {
             return "testFilter";
         }
 
+        /**
+         * {@inheritDoc}
+         */
+        public boolean matches(Map<String, ?> map) {
+            throw new UnsupportedOperationException();
+        }
+
     }
 }
diff --git a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/StubEventAdminTests.java b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/StubEventAdminTests.java
index e55c4ec..e616397 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/StubEventAdminTests.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/StubEventAdminTests.java
@@ -22,6 +22,7 @@
 import java.lang.management.ThreadMXBean;
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -77,7 +78,7 @@
     public void awaitSendingTimeout() {
         Event expected = new Event("topic", this.expectedProperties);
         
-        this.eventAdmin.sendEvent(new Event("differentTopic", null));
+        this.eventAdmin.sendEvent(new Event("differentTopic", (Map<String,?>)null));
         this.eventAdmin.postEvent(expected);
         
         long start = System.currentTimeMillis();
@@ -90,7 +91,7 @@
     public void awaitPostingTimeout() {
         Event expected = new Event("topic", this.expectedProperties);
         
-        this.eventAdmin.postEvent(new Event("differentTopic", null));
+        this.eventAdmin.postEvent(new Event("differentTopic", (Map<String,?>)null));
         this.eventAdmin.sendEvent(expected);
         
         long start = System.currentTimeMillis();
@@ -197,7 +198,7 @@
     @Test
     public void postEventMatchingOnTopic() {
         Event posted = new Event("topic", this.properties);
-        Event expected = new Event("topic", null);
+        Event expected = new Event("topic", (Map<String,?>)null);
 
         this.eventAdmin.postEvent(posted);
         assertNotNull(this.eventAdmin.awaitPostingOfEvent("topic", 1000));
@@ -206,7 +207,7 @@
     @Test
     public void sendEventMatchingOnTopic() {
         Event sent = new Event("topic", this.properties);
-        Event expected = new Event("topic", null);
+        Event expected = new Event("topic", (Map<String,?>)null);
 
         this.eventAdmin.sendEvent(sent);
         assertNotNull(this.eventAdmin.awaitSendingOfEvent("topic", 1000));
@@ -216,7 +217,7 @@
     public void awaitSendingTimeoutMatchingOnTopic() {
         Event expected = new Event("topic", this.expectedProperties);
         
-        this.eventAdmin.sendEvent(new Event("differentTopic", null));
+        this.eventAdmin.sendEvent(new Event("differentTopic", (Map<String,?>)null));
         this.eventAdmin.postEvent(expected);
         
         long start = System.currentTimeMillis();
@@ -229,7 +230,7 @@
     public void awaitPostingTimeoutMatchingOnTopic() {
         Event expected = new Event("topic", this.expectedProperties);
         
-        this.eventAdmin.postEvent(new Event("differentTopic", null));
+        this.eventAdmin.postEvent(new Event("differentTopic", (Map<String,?>)null));
         this.eventAdmin.sendEvent(expected);
         
         long start = System.currentTimeMillis();
diff --git a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/internal/EventUtilsTests.java b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/internal/EventUtilsTests.java
index 6d33fbf..948cf54 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/internal/EventUtilsTests.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/service/event/internal/EventUtilsTests.java
@@ -16,6 +16,7 @@
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+import java.util.Map;
 
 import org.junit.Test;
 import org.osgi.service.event.Event;
@@ -116,12 +117,12 @@
     
     @Test
     public void eventsWithDifferentTopicsAreNotEqual() {
-        assertFalse(EventUtils.eventsAreEqual(new Event("foo", null), new Event("bar", null)));
+        assertFalse(EventUtils.eventsAreEqual(new Event("foo", (Map<String, ?>)null), new Event("bar", (Map<String, ?>)null)));
     }
     
     @Test
     public void eventsWithMatchingTopicsAndNoPropertiesAreEqual() {
-        assertTrue(EventUtils.eventsAreEqual(new Event("foo", null), new Event("foo", null)));
+        assertTrue(EventUtils.eventsAreEqual(new Event("foo", (Map<String, ?>)null), new Event("foo", (Map<String, ?>)null)));
     }
     
     @Test
@@ -131,7 +132,7 @@
     
     @Test
     public void eventsWithMatchingTopicsAndDifferentNumberOfPropertiesAreNotEqual() {
-        Dictionary properties = createProperties();
+        Dictionary<String, ?> properties = createProperties();
         properties.remove("byteArray");
         
         assertFalse(EventUtils.eventsAreEqual(new Event("foo", createProperties()), new Event("foo", properties)));
@@ -139,7 +140,7 @@
     
     @Test
     public void eventsWithMatchingTopicsAndDifferentPropertiesAreNotEqual() {
-        Dictionary properties = createProperties();
+        Dictionary<String, Object> properties = createProperties();
         properties.put("byteArray", new byte[] {6});
         
         assertFalse(EventUtils.eventsAreEqual(new Event("foo", createProperties()), new Event("foo", properties)));
@@ -150,9 +151,8 @@
         assertFalse(EventUtils.eventsAreEqual(new Event("foo", createProperties()), new Event("foo", properties)));
     }
     
-    @SuppressWarnings("unchecked")
-    private Dictionary createProperties() {
-        Dictionary properties = new Hashtable();
+    private Dictionary<String, Object> createProperties() {
+        Dictionary<String, Object> properties = new Hashtable<String, Object>();
         
         properties.put("object", "alpha");
         properties.put("booleanArray", new boolean[] {false, true});
diff --git a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilterTests.java b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilterTests.java
index ad18361..fc23ca5 100644
--- a/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilterTests.java
+++ b/org.eclipse.virgo.teststubs.osgi/src/test/java/org/eclipse/virgo/teststubs/osgi/support/ObjectClassFilterTests.java
@@ -34,7 +34,7 @@
 
     @Test
     public void matchServiceReference() {
-        ServiceReference objectServiceReference = new ServiceReference() {
+        ServiceReference<Object> objectServiceReference = new ServiceReference<Object>() {
 
             public int compareTo(Object reference) {
                 throw new UnsupportedOperationException();
