diff --git a/pom.xml b/pom.xml
index 744001f..970114c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,32 +63,6 @@
                     </execution>
                 </executions>
             </plugin>
-<!--
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Import-Package>
-                            javax.jcr;resolution:=optional,
-                            *
-                        </Import-Package>
-                        <!- - Check if that is still needed - ->
-                        <Export-Package>
-                            org.apache.sling.resourceresolver.impl.mapping
-                        </Export-Package>
-                        <Provide-Capability>
-                            osgi.service;objectClass=javax.servlet.Servlet,
-                            osgi.service;objectClass=org.apache.sling.api.resource.ResourceResolverFactory,
-                            osgi.service;objectClass=org.apache.sling.api.resource.observation.ResourceChangeListener,
-                            osgi.service;objectClass=org.apache.sling.api.resource.runtime.RuntimeService,
-                            osgi.service;objectClass=org.apache.sling.spi.resource.provider.ResourceProvider
-                        </Provide-Capability>
-                    </instructions>
-                </configuration>
-            </plugin>
--->
             <plugin>
                 <groupId>biz.aQute.bnd</groupId>
                 <artifactId>bnd-maven-plugin</artifactId>
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
index 2b42531..c419f1e 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
@@ -109,18 +109,9 @@
     @Reference
     EventAdmin eventAdmin;
 
-    /** Event admin. */
+    /** String Interpolation Provider. */
     @Reference
     StringInterpolationProvider stringInterpolationProvider;
-//    public void bindStringInterpolationProviderImpl(StringInterpolationProviderImpl stringInterpolationProviderImpl) {
-//        logger.info("Bind StringInterpolationProviderImpl: '{}'", stringInterpolationProviderImpl);
-//        this.stringInterpolationProviderImpl = stringInterpolationProviderImpl;
-//    }
-//
-//    public void unbindStringInterpolationProviderImpl(StringInterpolationProviderImpl stringInterpolationProviderImpl) {
-//        this.stringInterpolationProviderImpl = null;
-//    }
-
 
     /** Service User Mapper */
     @Reference
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/Interpolator.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/Interpolator.java
index 47878bb..afa5147 100755
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/Interpolator.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/Interpolator.java
@@ -34,6 +34,7 @@
 
     public static final String START = "$[";
 
+    public static final char NAME_SEPARATOR = ':';
     public static final char DIRECTIVES_SEPARATOR = ';';
     public static final char DIRECTIVES_VALUE_SEPARATOR = '=';
 
@@ -100,13 +101,15 @@
                 continue;
             }
 
-            String key = result.substring(start + START.length(), index - 1);
-            int sep = key.indexOf(':');
+            final String key = result.substring(start + START.length(), index - 1);
+            final int sep = key.indexOf(NAME_SEPARATOR);
             if (sep == -1) {
-                LOGGER.trace("No ':' found, set it to: '{}'", key);
+                // invalid key
+                start = index;
+                continue;
             }
 
-            final String type = key.substring(0, sep < 0 ? 0 : sep);
+            final String type = key.substring(0, sep);
             final String postfix = key.substring(sep + 1);
             LOGGER.trace("Type: '{}', postfix: '{}'", type, postfix);
 
@@ -116,7 +119,7 @@
             if (dirPos == -1) {
                 name = postfix;
                 directives = Collections.emptyMap();
-                LOGGER.trace("No Default");
+                LOGGER.trace("No Directives");
             } else {
                 name = postfix.substring(0, dirPos);
                 directives = new HashMap<>();
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index fa4eaf8..cdc5bcc 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -142,7 +142,7 @@
 
     private boolean updateBloomFilterFile = false;
 
-    private StringInterpolationProvider stringInterpolationProvider;
+    private final StringInterpolationProvider stringInterpolationProvider;
 
     @SuppressWarnings({ "unchecked" })
     public MapEntries(final MapConfigurationProvider factory, final BundleContext bundleContext, final EventAdmin eventAdmin, final StringInterpolationProvider stringInterpolationProvider)
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderConfiguration.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderConfiguration.java
index 3d2f81a..56fc598 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderConfiguration.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderConfiguration.java
@@ -23,15 +23,15 @@
 
 @ObjectClassDefinition(
     name = "Apache Sling String Interpolation Provider",
-    description = "Configures the String Interpolation Provider and the location of its key/value pairs"
+    description = "Configures the String Interpolation Provider key/value pairs"
 )
 public @interface StringInterpolationProviderConfiguration {
 
     @AttributeDefinition(
         name = "Placeholder Values",
         description = "A list of key / value pairs separated by a equal (=) sign. " +
-            "The key is not permitted to contain a '=' sign and the first occurrence of '=' " +
-            "separates the key from the value. If no '=' is found the entire key / value pair " +
-            "is dropped.")
+            "The key is not permitted to contain a '=' sign as the first occurrence of '=' " +
+            "separates the key from the value. If no '=' is found the entry " +
+            "is ignored")
     String[] placeHolderKeyValuePairs() default {"phv.default.host.name=localhost"};
 }
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImpl.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImpl.java
index 87a8ebb..1c91a8d 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImpl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImpl.java
@@ -31,7 +31,7 @@
 import java.util.Map;
 
 @Designate(ocd = StringInterpolationProviderConfiguration.class)
-@Component(name = "org.apache.sling.resourceresolver.impl.mapping.StringInterpolationProviderImpl")
+@Component
 public class StringInterpolationProviderImpl
     implements StringInterpolationProvider
 {
@@ -39,9 +39,10 @@
 
     private static final String TYPE_PROP = "prop";
 
+    private static final String TYPE_CONFIG = "config";
+
     private static final String DIRECTIVE_DEFAULT = "default";
 
-    /** Logger. */
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     private Map<String, String> placeholderEntries = new HashMap<>();
@@ -57,8 +58,7 @@
         this.context = bundleContext;
 
         String[] valueMap = config.placeHolderKeyValuePairs();
-        // Clear out any existing values
-        placeholderEntries.clear();
+        Map<String, String> newMap = new HashMap<>();
         for(String line: valueMap) {
             // Ignore no or empty lines
             if(line != null && !line.isEmpty()) {
@@ -70,11 +70,12 @@
                     } else if (index > line.length() - 2) {
                         logger.warn("Placeholder Entry does not contain a value: '{}' -> ignored", line);
                     } else {
-                        placeholderEntries.put(line.substring(0, index), line.substring(index + 1));
+                        newMap.put(line.substring(0, index), line.substring(index + 1));
                     }
                 }
             }
         }
+        this.placeholderEntries = newMap;
     }
 
     /**
@@ -109,7 +110,7 @@
                 v = getVariableFromEnvironment(name);
             } else if (TYPE_PROP.equals(type)) {
                 v = getVariableFromProperty(name);
-            } else {
+            } else if(TYPE_CONFIG.equals(type)){
                 v = getVariableFromBundleConfiguration(name);
             }
             if (v == null) {
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/EtcMappingResourceResolverTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/EtcMappingResourceResolverTest.java
index c021c99..ca2d6a6 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/EtcMappingResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/EtcMappingResourceResolverTest.java
@@ -285,7 +285,7 @@
 
     @Test
     public void simple_node_string_interpolation() throws Exception {
-        buildResource("$[siv.one]", http, resourceResolver, resourceProvider,PROP_REDIRECT_EXTERNAL, "/content/simple-node");
+        buildResource("$[config:siv.one]", http, resourceResolver, resourceProvider,PROP_REDIRECT_EXTERNAL, "/content/simple-node");
         setupStringInterpolationProvider(stringInterpolationProvider, stringInterpolationProviderConfiguration, new String[] {"siv.one=test-simple-node.80"});
 
         refreshMapEntries("/etc/map", true);
@@ -304,7 +304,7 @@
     @Test
     public void simple_match_string_interpolation() throws Exception {
         buildResource("test-node", http, resourceResolver, resourceProvider,
-            PROP_REG_EXP, "$[siv.one]/",
+            PROP_REG_EXP, "$[config:siv.one]/",
             PROP_REDIRECT_EXTERNAL, "/content/simple-match/"
         );
         setupStringInterpolationProvider(stringInterpolationProvider, stringInterpolationProviderConfiguration, new String[] {"siv.one=test-simple-match.80"});
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
index c0b4b69..b960a82 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
@@ -428,17 +428,6 @@
         return resource;
     }
 
-
-//    /**
-//     * extract the name from a path.
-//     * @param fullpath
-//     * @return
-//     */
-//    private String getName(String fullpath) {
-//        int n = fullpath.lastIndexOf("/");
-//        return fullpath.substring(n+1);
-//    }
-
     /**
      * Test getting a resolver.
      * @throws LoginException
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
index 1a6a299..9f04b6f 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
@@ -32,7 +32,7 @@
     @Test
     public void simple_node_string_interpolation() throws Exception {
         // To avoid side effects the String Interpolation uses its own Resource Resolver
-        Resource sivOne = setupEtcMapResource("$[siv.one]", http,PROP_REDIRECT_EXTERNAL, "/content/simple-node");
+        Resource sivOne = setupEtcMapResource("$[config:siv.one]", http,PROP_REDIRECT_EXTERNAL, "/content/simple-node");
         setupStringInterpolationProvider(stringInterpolationProvider, stringInterpolationProviderConfiguration, new String[] {"siv.one=test-simple-node"});
 
         mapEntries.doInit();
@@ -44,7 +44,7 @@
     public void simple_match_string_interpolation() throws Exception {
         // To avoid side effects the String Interpolation uses its own Resource Resolver
         Resource sivOne = setupEtcMapResource("test-node", http,
-            PROP_REG_EXP, "$[siv.one]/",
+            PROP_REG_EXP, "$[config:siv.one]/",
             PROP_REDIRECT_EXTERNAL, "/content/simple-match/"
         );
         setupStringInterpolationProvider(stringInterpolationProvider, stringInterpolationProviderConfiguration, new String[] {"siv.one=test-simple-match"});
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImplTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImplTest.java
index 5f0d6db..60fe5e9 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImplTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationProviderImplTest.java
@@ -49,7 +49,7 @@
     public void test_interpolator_simple() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[one]", values);
+        String substitute = interpolate("$[config:one]", values);
         assertEquals("Wrong Replacement", "two", substitute);
     }
 
@@ -57,7 +57,7 @@
     public void test_interpolator_with_type() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[value:one]", values);
+        String substitute = interpolate("$[config:one]", values);
         assertEquals("Wrong Replacement (with type)", "two", substitute);
     }
 
@@ -65,15 +65,15 @@
     public void test_interpolator_no_match() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[two]", values);
-        assertEquals("Should not been replaced", "$[two]", substitute);
+        String substitute = interpolate("$[config:two]", values);
+        assertEquals("Should not been replaced", "$[config:two]", substitute);
     }
 
     @Test
     public void test_interpolator_no_match_with_default() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[two;default=three]", values);
+        String substitute = interpolate("$[config:two;default=three]", values);
         assertEquals("Should have been default for no match", "three", substitute);
     }
 
@@ -81,7 +81,7 @@
     public void test_interpolator_full_with_match() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[value:one;default=three]", values);
+        String substitute = interpolate("$[config:one;default=three]", values);
         assertEquals("Wrong Replacement", "two", substitute);
     }
 
@@ -89,7 +89,7 @@
     public void test_interpolator_full_with_default() {
         Map<String,String> values = new HashMap<>();
         values.put("one", "two");
-        String substitute = interpolate("$[value:two;default=three]", values);
+        String substitute = interpolate("$[config:two;default=three]", values);
         assertEquals("Should have been default for no match", "three", substitute);
     }
 
@@ -113,7 +113,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]";
+        String line = "$[config:one]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two", substituted);
     }
@@ -126,7 +126,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "Here is $[one], too";
+        String line = "Here is $[config:one], too";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "Here is two, too", substituted);
     }
@@ -139,7 +139,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one] with another $[three]";
+        String line = "$[config:one] with another $[config:three]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two with another four", substituted);
     }
@@ -153,7 +153,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "Here comes $[one] with another $[three] equals $[five], horray!";
+        String line = "Here comes $[config:one] with another $[config:three] equals $[config:five], horray!";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "Here comes two with another four equals six, horray!", substituted);
     }
@@ -181,9 +181,9 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "Here comes $[unkown] placeholders!";
+        String line = "Here comes $[config:unkown] placeholders!";
         String substituted = placeholderProvider.substitute(line);
-        assertEquals("Wrong resolved line", "Here comes $[unkown] placeholders!", substituted);
+        assertEquals("Wrong resolved line", "Here comes $[config:unkown] placeholders!", substituted);
     }
 
     @Test
@@ -195,7 +195,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[siv.one]/";
+        String line = "$[config:siv.one]/";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "test-value/", substituted);
     }
@@ -209,9 +209,9 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "\\$[one]=$[one]";
+        String line = "\\$[config:one]=$[config:one]";
         String substituted = placeholderProvider.substitute(line);
-        assertEquals("Wrong resolved line", "$[one]=two", substituted);
+        assertEquals("Wrong resolved line", "$[config:one]=two", substituted);
     }
 
     @Test
@@ -223,7 +223,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[$[one]]";
+        String line = "$[config:$[config:one]]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "three", substituted);
     }
@@ -237,7 +237,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one$[one]]";
+        String line = "$[config:one$[config:one]]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "three", substituted);
     }
@@ -251,9 +251,9 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]$[two]";
+        String line = "$[config:one]$[config:two]";
         String substituted = placeholderProvider.substitute(line);
-        assertEquals("Wrong resolved line", "two$[two]", substituted);
+        assertEquals("Wrong resolved line", "two$[config:two]", substituted);
     }
 
     @Test
@@ -265,9 +265,9 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]$[two]";
+        String line = "$[config:one]$[config:two]";
         String substituted = placeholderProvider.substitute(line);
-        assertEquals("Wrong resolved line", "two$[two]", substituted);
+        assertEquals("Wrong resolved line", "two$[config:two]", substituted);
     }
 
     @Test
@@ -279,7 +279,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]-$[two]";
+        String line = "$[config:one]-$[config:two]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two-four", substituted);
     }
@@ -293,7 +293,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]-$[two]";
+        String line = "$[config:one]-$[config:two]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two-four", substituted);
     }
@@ -302,7 +302,7 @@
     public void test_no_configuration() {
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
 
-        String line = "$[one]$[two]";
+        String line = "$[config:one]$[config:two]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", line, substituted);
     }
@@ -320,7 +320,7 @@
         );
         placeholderProvider.modified(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]-$[two]";
+        String line = "$[config:one]-$[config:two]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two-three", substituted);
     }
@@ -334,7 +334,7 @@
         StringInterpolationProviderImpl placeholderProvider = new StringInterpolationProviderImpl();
         placeholderProvider.activate(bundleContext, stringInterpolationProviderConfiguration);
 
-        String line = "$[one]-$[two]";
+        String line = "$[config:one]-$[config:two]";
         String substituted = placeholderProvider.substitute(line);
         assertEquals("Wrong resolved line", "two-four", substituted);
         placeholderProvider.deactivate(bundleContext);
