diff --git a/pom.xml b/pom.xml
index a593341..b29004d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,13 +23,13 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>27</version>
+        <version>26</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.i18n</artifactId>
     <packaging>bundle</packaging>
-    <version>2.4.9-SNAPSHOT</version>
+    <version>2.4.8</version>
 
     <name>Apache Sling Internationalization Support</name>
     <description>
@@ -46,9 +46,9 @@
     </properties>
 
     <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/i18n</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/i18n</developerConnection>
-        <url>http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/i18n</url>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.i18n-2.4.8</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.i18n-2.4.8</developerConnection>
+        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.i18n-2.4.8</url>
     </scm>
 
     <build>
@@ -71,9 +71,7 @@
                             jackrabbit-jcr-commons;inline="org/apache/jackrabbit/util/ISO9075.*|org/apache/jackrabbit/util/XMLChar.*|org/apache/jackrabbit/util/Text.*|org/apache/jackrabbit/commons/json/Json*",
                             org.apache.sling.commons.osgi;inline="org/apache/sling/commons/osgi/ServiceUtil*|org/apache/sling/commons/osgi/PropertiesUtil*"
                         </Embed-Dependency>
-                        <Require-Capability>
-                            osgi.implementation;filter:="(&amp;(osgi.implementation=osgi.http)(version=1.0))"
-                        </Require-Capability>
+
                     </instructions>
                 </configuration>
             </plugin>
@@ -132,26 +130,6 @@
     </build>
     <dependencies>
         <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.service.http.whiteboard</artifactId>
-            <version>1.0.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.service.event</artifactId>
-            <version>1.3.1</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>jackrabbit-jcr-commons</artifactId>
             <version>2.2.4</version>
@@ -174,11 +152,28 @@
             <artifactId>slf4j-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.scheduler</artifactId>
             <version>2.4.0</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
+
         <!-- Testing -->
         <dependency>
             <groupId>org.apache.sling</groupId>
@@ -191,11 +186,13 @@
         <dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
+            <version>2.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
@@ -238,13 +235,13 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.6</version>
+            <version>1.5.0</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
-            <version>1.2.17</version>
+            <version>1.2.13</version>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -274,7 +271,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.framework</artifactId>
-            <version>5.4.0</version>
+            <version>4.2.1</version>
             <scope>test</scope>
         </dependency>
       </dependencies>
diff --git a/src/main/java/org/apache/sling/i18n/impl/I18NFilter.java b/src/main/java/org/apache/sling/i18n/impl/I18NFilter.java
index 6013f9a..d8d7fbf 100644
--- a/src/main/java/org/apache/sling/i18n/impl/I18NFilter.java
+++ b/src/main/java/org/apache/sling/i18n/impl/I18NFilter.java
@@ -53,7 +53,6 @@
 import org.apache.sling.i18n.RequestLocaleResolver;
 import org.apache.sling.i18n.ResourceBundleProvider;
 import org.osgi.framework.Constants;
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,9 +63,7 @@
 @SlingFilter(generateService = true,
              order = 700, scope = { SlingFilterScope.REQUEST, SlingFilterScope.ERROR })
 @Properties({
-    @Property(name = HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, value="/"),
-    @Property(name = HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
-              value = "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=org.apache.sling)"),
+    @Property(name = "pattern", value="/.*"),
     @Property(name = Constants.SERVICE_DESCRIPTION, value = "Internationalization Support Filter"),
     @Property(name = Constants.SERVICE_VENDOR, value = "The Apache Software Foundation") })
 public class I18NFilter implements Filter {
@@ -259,7 +256,7 @@
         }
 
         @Override
-        public Enumeration<Locale> getLocales() {
+        public Enumeration<?> getLocales() {
             return Collections.enumeration(getLocaleList());
         }
 
@@ -360,7 +357,7 @@
         }
 
         @Override
-        public Enumeration<Locale> getLocales() {
+        public Enumeration<?> getLocales() {
             return Collections.enumeration(getLocaleList());
         }
 
diff --git a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
index 8065e22..009000b 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundle.java
@@ -48,7 +48,7 @@
 
     /** default primary type (=resource type) for message entry dictionaries */
     static final String RT_MESSAGE_ENTRY = "sling:MessageEntry";
-
+    
     static final String MIXIN_MESSAGE = "sling:Message";
 
     static final String MIXIN_LANGUAGE = "mix:language";
@@ -102,7 +102,7 @@
     protected void setParent(ResourceBundle parent) {
         super.setParent(parent);
     }
-
+    
     public ResourceBundle getParent() {
         return parent;
     }
@@ -164,6 +164,7 @@
      *
      * @throws NullPointerException if either of the parameters is {@code null}.
      */
+    @SuppressWarnings("deprecation")
     private Map<String, Object> loadFully(final ResourceResolver resolver, Set<String> roots, Set<String> languageRoots) {
 
         final String[] searchPath = resolver.getSearchPath();
diff --git a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
index cd30d42..a034313 100644
--- a/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
+++ b/src/main/java/org/apache/sling/i18n/impl/JcrResourceBundleProvider.java
@@ -41,6 +41,8 @@
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.resource.LoginException;
@@ -54,6 +56,7 @@
 import org.apache.sling.i18n.ResourceBundleProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
 import org.osgi.service.event.EventConstants;
 import org.osgi.service.event.EventHandler;
 import org.slf4j.Logger;
@@ -116,7 +119,7 @@
     private ResourceResolver resourceResolver;
 
     /**
-     * Map of cached resource bundles indexed by a key combined of the base name
+     * Map of cached resource bundles indexed by a key combined of the base name 
      * and <code>Locale</code> used to load and identify the <code>ResourceBundle</code>.
      */
     private final ConcurrentHashMap<Key, JcrResourceBundle> resourceBundleCache = new ConcurrentHashMap<Key, JcrResourceBundle>();
@@ -139,7 +142,7 @@
     /**
      * Each ResourceBundle is registered as a service. Each registration is stored in this map with the locale & base name used as a key.
      */
-    private Map<Key, ServiceRegistration<ResourceBundle>> bundleServiceRegistrations;
+    private Map<Key, ServiceRegistration> bundleServiceRegistrations;
 
     private boolean preloadBundles;
 
@@ -225,7 +228,7 @@
 
     private boolean isDictionaryResource(final String path, final org.osgi.service.event.Event event) {
         // language node changes happen quite frequently (https://issues.apache.org/jira/browse/SLING-2881)
-        // therefore only consider changes either for sling:MessageEntry's
+        // therefore only consider changes either for sling:MessageEntry's 
         // or for JSON dictionaries
         String resourceType = (String) event.getProperty(SlingConstants.PROPERTY_RESOURCE_TYPE);
         if (resourceType == null) {
@@ -304,7 +307,7 @@
         String baseName = bundle.getBaseName();
         Locale locale = bundle.getLocale();
         final Key key = new Key(baseName, locale);
-
+        
         // defer this job
         ScheduleOptions options = scheduler.AT(new Date(System.currentTimeMillis() + invalidationDelay));
         final String jobName = "JcrResourceBundleProvider: reload bundle with key " + key.toString();
@@ -324,7 +327,7 @@
         resourceBundleCache.remove(key);
         log.info("Reloading resource bundle for {}", key);
         // unregister bundle
-        ServiceRegistration<ResourceBundle> serviceRegistration = null;
+        ServiceRegistration serviceRegistration = null;
         synchronized (this) {
             serviceRegistration = bundleServiceRegistrations.remove(key);
         }
@@ -361,9 +364,11 @@
     /**
      * Activates and configures this component with the repository access
      * details and the default locale to use
-     * @throws LoginException
+     * @throws LoginException 
      */
-    protected void activate(BundleContext context, Map<String, Object> props) throws LoginException {
+    protected void activate(ComponentContext context) throws LoginException {
+        Dictionary<?, ?> props = context.getProperties();
+
         Map<String, Object> repoCredentials;
         String user = PropertiesUtil.toString(props.get(PROP_USER), null);
         if (user == null || user.length() == 0) {
@@ -381,8 +386,8 @@
         this.defaultLocale = toLocale(localeString);
         this.preloadBundles = PropertiesUtil.toBoolean(props.get(PROP_PRELOAD_BUNDLES), DEFAULT_PRELOAD_BUNDLES);
 
-        this.bundleContext = context;
-        this.bundleServiceRegistrations = new HashMap<Key, ServiceRegistration<ResourceBundle>>();
+        this.bundleContext = context.getBundleContext();
+        this.bundleServiceRegistrations = new HashMap<Key, ServiceRegistration>();
         invalidationDelay = PropertiesUtil.toLong(props.get(PROP_INVALIDATION_DELAY), DEFAULT_INVALIDATION_DELAY);
         if (this.resourceResolverFactory != null) { // this is only null during test execution!
             if (repoCredentials == null) {
@@ -443,12 +448,12 @@
     }
 
     private void registerResourceBundle(Key key, JcrResourceBundle resourceBundle) {
-        Dictionary<String, Object> serviceProps = new Hashtable<String, Object>();
+        Dictionary<Object, Object> serviceProps = new Hashtable<Object, Object>();
         if (key.baseName != null) {
             serviceProps.put("baseName", key.baseName);
         }
         serviceProps.put("locale", key.locale.toString());
-        ServiceRegistration<ResourceBundle> serviceReg = bundleContext.registerService(ResourceBundle.class,
+        ServiceRegistration serviceReg = bundleContext.registerService(ResourceBundle.class.getName(),
                 resourceBundle, serviceProps);
         synchronized (this) {
             bundleServiceRegistrations.put(key, serviceReg);
@@ -532,7 +537,7 @@
         languageRootPaths.clear();
 
         synchronized (this) {
-            for (ServiceRegistration<ResourceBundle> serviceReg : bundleServiceRegistrations.values()) {
+            for (ServiceRegistration serviceReg : bundleServiceRegistrations.values()) {
                 serviceReg.unregister();
             }
             bundleServiceRegistrations.clear();
diff --git a/src/main/java/org/apache/sling/i18n/package-info.java b/src/main/java/org/apache/sling/i18n/package-info.java
index a24a548..654c184 100644
--- a/src/main/java/org/apache/sling/i18n/package-info.java
+++ b/src/main/java/org/apache/sling/i18n/package-info.java
@@ -17,7 +17,8 @@
  * under the License.
  */
 
-@org.osgi.annotation.versioning.Version("2.2.0")
+@Version("2.2.0")
 package org.apache.sling.i18n;
 
+import aQute.bnd.annotation.Version;
 
diff --git a/src/test/java/org/apache/sling/i18n/impl/ConcurrentJcrResourceBundleLoadingTest.java b/src/test/java/org/apache/sling/i18n/impl/ConcurrentJcrResourceBundleLoadingTest.java
index 90f862c..2c7e476 100644
--- a/src/test/java/org/apache/sling/i18n/impl/ConcurrentJcrResourceBundleLoadingTest.java
+++ b/src/test/java/org/apache/sling/i18n/impl/ConcurrentJcrResourceBundleLoadingTest.java
@@ -26,9 +26,9 @@
 import static org.powermock.api.mockito.PowerMockito.spy;
 import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
 
-import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Locale;
-import java.util.Map;
+import java.util.ResourceBundle;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
@@ -40,6 +40,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -54,15 +55,15 @@
 
     @Mock JcrResourceBundle english;
     @Mock JcrResourceBundle german;
-
+    
     private JcrResourceBundleProvider provider;
-
+    
     @Before
     public void setup() throws Exception {
         provider = spy(new JcrResourceBundleProvider());
-        Map<String, Object> properties = new HashMap<String, Object>();
+        Hashtable<String, Object> properties = new Hashtable<String, Object>();
         properties.put("locale.default", "en");
-        provider.activate(PowerMockito.mock(BundleContext.class), properties);
+        provider.activate(createComponentContext(properties));
         doReturn(english).when(provider, "createResourceBundle", eq(null), eq(Locale.ENGLISH));
         doReturn(german).when(provider, "createResourceBundle", eq(null), eq(Locale.GERMAN));
         Mockito.when(german.getLocale()).thenReturn(Locale.GERMAN);
@@ -99,12 +100,12 @@
         verifyPrivate(provider, times(1)).invoke("createResourceBundle", eq(null), eq(Locale.ENGLISH));
         verifyPrivate(provider, times(1)).invoke("createResourceBundle", eq(null), eq(Locale.GERMAN));
     }
-
+    
     @Test
     public void newBundleUsedAfterReload() throws Exception {
         provider.getResourceBundle(Locale.ENGLISH);
         provider.getResourceBundle(Locale.GERMAN);
-
+        
         // reloading german should not reload any other bundle
         provider.reloadBundle(new Key(null, Locale.GERMAN));
         provider.getResourceBundle(Locale.ENGLISH);
@@ -117,12 +118,12 @@
         verifyPrivate(provider, times(1)).invoke("createResourceBundle", eq(null), eq(Locale.ENGLISH));
         verifyPrivate(provider, times(2)).invoke("createResourceBundle", eq(null), eq(Locale.GERMAN));
     }
-
+    
     @Test
     public void newBundleUsedAsParentAfterReload() throws Exception {
         provider.getResourceBundle(Locale.ENGLISH);
         provider.getResourceBundle(Locale.GERMAN);
-
+        
         // reloading english should also reload german (because it has english as a parent)
         provider.reloadBundle(new Key(null, Locale.ENGLISH));
         provider.getResourceBundle(Locale.ENGLISH);
@@ -135,4 +136,11 @@
         verifyPrivate(provider, times(2)).invoke("createResourceBundle", eq(null), eq(Locale.ENGLISH));
         verifyPrivate(provider, times(2)).invoke("createResourceBundle", eq(null), eq(Locale.GERMAN));
     }
+
+    private ComponentContext createComponentContext(Hashtable<String, Object> config) {
+        final ComponentContext componentContext = PowerMockito.mock(ComponentContext.class);
+        Mockito.when(componentContext.getBundleContext()).thenReturn(PowerMockito.mock(BundleContext.class));
+        Mockito.when(componentContext.getProperties()).thenReturn(config);
+        return componentContext;
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/i18n/it/ResourceBundleProviderIT.java b/src/test/java/org/apache/sling/i18n/it/ResourceBundleProviderIT.java
index 736b9f3..1e2fa25 100644
--- a/src/test/java/org/apache/sling/i18n/it/ResourceBundleProviderIT.java
+++ b/src/test/java/org/apache/sling/i18n/it/ResourceBundleProviderIT.java
@@ -21,7 +21,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 
 import java.io.File;
 import java.util.Locale;
@@ -78,8 +77,7 @@
         final String launchpadVersion = System.getProperty("sling.launchpad.version", "LAUNCHPAD_VERSION_NOT_SET");
         return new DefaultCompositeOption(
                 SlingPaxOptions.defaultLaunchpadOptions(launchpadVersion),
-                CoreOptions.provision(CoreOptions.bundle(thisProjectsBundle.toURI().toString())),
-                mavenBundle("org.apache.felix", "org.apache.felix.http.servlet-api", "1.1.2")
+                CoreOptions.provision(CoreOptions.bundle(thisProjectsBundle.toURI().toString()))
                 ).getOptions();
     }
 
@@ -144,7 +142,6 @@
 
     private void assertMessages(final String key, final String deMessage, final String deDeMessage, final String frMessage) {
         new Retry(RETRY_TIMEOUT_MSEC) {
-            @Override
             protected void exec() {
                 {
                     final ResourceBundle deDE = resourceBundleProvider.getResourceBundle(Locale.GERMANY); // this is the resource bundle for de_DE
@@ -189,7 +186,7 @@
         session.save();
         // since "en" is the fallback for all other resource bundle, the value from "en" must be exposed
         assertMessages(MSG_KEY2, "EN_message", "EN_message", "EN_message");
-
+        
         new Message("", MSG_KEY1, "DE_message", false).add(deRoot);
         new Message("", MSG_KEY1, "FR_message", false).add(frRoot);
         session.save();
@@ -199,13 +196,13 @@
         new Message("", MSG_KEY1, "FR_changed", false).add(frRoot);
         session.save();
         assertMessages(MSG_KEY1, "DE_changed", "DE_changed", "FR_changed");
-
+        
         new Message("", MSG_KEY1, "DE_message", false).add(deRoot);
         new Message("", MSG_KEY1, "DE_DE_message", false).add(deDeRoot);
         new Message("", MSG_KEY1, "FR_message", false).add(frRoot);
         session.save();
         assertMessages(MSG_KEY1, "DE_message", "DE_DE_message", "FR_message");
-
+        
         // now change a key which is only available in the "en" dictionary
         new Message("", MSG_KEY2, "EN_changed", false).add(enRoot);
         session.save();
