diff --git a/core/pom.xml b/core/pom.xml
index 3b54c58..7ca965d 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -113,7 +113,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr</artifactId>
-            <version>2.0.4</version>
+            <version>2.1.8</version>
             <scope>compile</scope>
             <exclusions>
                 <exclusion>
diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
index bed7b87..9e69984 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilActivateDeactivateTest.java
@@ -25,6 +25,7 @@
 
 import java.util.Map;
 
+import com.google.common.collect.ImmutableMap;
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.component.ComponentContext;
@@ -32,15 +33,15 @@
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
 
-import com.google.common.collect.ImmutableMap;
-
 /**
  * Test different variants of activate/deactivate methods with varying signatures.
  */
 @SuppressWarnings("null")
 public class OsgiServiceUtilActivateDeactivateTest {
 
-    private Map<String,Object> map = ImmutableMap.<String, Object>of("prop1", "value1");
+    private Map<String,Object> map = ImmutableMap.<String, Object>of("prop1", "value1",
+            "prop2.with.periods", "value2",
+            "prop3-with-hyphens", "value3");
     private BundleContext bundleContext = MockOsgi.newBundleContext();
     
     @Test
@@ -86,7 +87,7 @@
         assertTrue(MockOsgi.activate(service, bundleContext, map));
         assertTrue(service.isActivated());
         assertEquals(map, ImmutableMap.copyOf(service.getMap()));
-        
+
         assertTrue(MockOsgi.deactivate(service, bundleContext, map));
         assertFalse(service.isActivated());
     }
@@ -125,7 +126,7 @@
         assertSame(bundleContext, service.getComponentContext().getBundleContext());
         assertSame(bundleContext, service.getBundleContext());
         assertEquals(map, ImmutableMap.copyOf(service.getMap()));
-        
+
         assertTrue(MockOsgi.deactivate(service, bundleContext, map));
         assertFalse(service.isActivated());
     }
@@ -133,6 +134,14 @@
     
     public @interface ServiceConfig {
         String prop1();
+        String prop2_with_periods();
+        String prop3$_$with$_$hyphens();
+    }
+
+    static Map<String, Object> readAnnotationToMap(final ServiceConfig config) {
+        return ImmutableMap.of("prop1", config.prop1(),
+                "prop2.with.periods", config.prop2_with_periods(),
+                "prop3-with-hyphens", config.prop3$_$with$_$hyphens());
     }
 
     @Component
@@ -228,7 +237,7 @@
         @Activate
         private void activate(ServiceConfig config) {
             this.activated = true;
-            map = ImmutableMap.<String, Object>of("prop1", config.prop1());
+            map = readAnnotationToMap(config);
         }
 
         @Deactivate
@@ -322,7 +331,7 @@
             this.activated = true;
             this.componentContext = componentContext;
             this.bundleContext = bundleContext;
-            this.map = ImmutableMap.<String, Object>of("prop1", config.prop1());;
+            this.map = readAnnotationToMap(config);
         }
 
         @Deactivate
