diff --git a/pom.xml b/pom.xml
index 8b2081c..b68a01f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,7 +155,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.paxexam</artifactId>
-            <version>3.0.0</version>
+            <version>3.1.0</version>
             <scope>test</scope>
         </dependency>
         <!-- OSGi -->
@@ -261,6 +261,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <version>4.0.1</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
             <artifactId>org.apache.servicemix.bundles.hamcrest</artifactId>
             <version>1.3_1</version>
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
index 59b6231..bcc3a87 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/jsr223/SlingScriptEngineManager.java
@@ -66,6 +66,7 @@
         name = "ScriptEngineFactory",
         bind = "bindScriptEngineFactory",
         unbind = "unbindScriptEngineFactory",
+        updated = "updatedScriptEngineFactory",
         service = ScriptEngineFactory.class,
         cardinality = ReferenceCardinality.MULTIPLE,
         policy = ReferencePolicy.DYNAMIC
@@ -266,6 +267,11 @@
         postEvent(SlingScriptConstants.TOPIC_SCRIPT_ENGINE_FACTORY_REMOVED, factory);
     }
 
+    private void updatedScriptEngineFactory(final ServiceReference<ScriptEngineFactory> serviceReference, final ScriptEngineFactory factory) {
+        updateFactories();
+        postEvent("javax/script/ScriptEngineFactory/CHANGED", factory); // TODO SlingScriptConstants.TOPIC_SCRIPT_ENGINE_FACTORY_CHANGED
+    }
+
     private void updateFactories() {
         readWriteLock.writeLock().lock();
         try {
diff --git a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngine.java b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngine.java
new file mode 100644
index 0000000..149fbfc
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngine.java
@@ -0,0 +1,39 @@
+/*
+ * 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.sling.scripting.core.impl.jsr223;
+
+import java.io.Reader;
+
+import javax.script.ScriptContext;
+import javax.script.ScriptException;
+
+import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
+
+public class ConfigurableScriptEngine extends AbstractSlingScriptEngine {
+
+    public ConfigurableScriptEngine(final ConfigurableScriptEngineFactory scriptEngineFactory) {
+        super(scriptEngineFactory);
+    }
+
+    @Override
+    public Object eval(Reader reader, ScriptContext context) throws ScriptException {
+        return null;
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactory.java b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactory.java
new file mode 100644
index 0000000..ee9cd67
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactory.java
@@ -0,0 +1,110 @@
+/*
+ * 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.sling.scripting.core.impl.jsr223;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+
+import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.metatype.annotations.Designate;
+
+@Component(
+    service = ScriptEngineFactory.class,
+    configurationPid = ConfigurableScriptEngineFactory.CONFIGURATION_PID,
+    property = {
+        Constants.SERVICE_DESCRIPTION + "=Apache Sling Scripting Configurable ScriptEngineFactory",
+        Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+    }
+)
+@Designate(
+    ocd = ConfigurableScriptEngineFactoryConfiguration.class
+)
+public class ConfigurableScriptEngineFactory extends AbstractScriptEngineFactory {
+
+    private ConfigurableScriptEngineFactoryConfiguration configuration;
+
+    public static final String CONFIGURATION_PID = "foo";
+
+    public ConfigurableScriptEngineFactory() {
+    }
+
+    @Activate
+    private void activate(final ConfigurableScriptEngineFactoryConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Modified
+    private void modified(final ConfigurableScriptEngineFactoryConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Deactivate
+    private void deactivate() {
+        this.configuration = null;
+    }
+
+    @Override
+    public String getEngineName() {
+        return configuration.engineName();
+    }
+
+    @Override
+    public String getEngineVersion() {
+        return configuration.engineVersion();
+    }
+
+    @Override
+    public List<String> getExtensions() {
+        return Arrays.asList(configuration.extensions());
+    }
+
+    @Override
+    public List<String> getMimeTypes() {
+        return Arrays.asList(configuration.mimeTypes());
+    }
+
+    @Override
+    public List<String> getNames() {
+        return Arrays.asList(configuration.names());
+    }
+
+    @Override
+    public String getLanguageName() {
+        return configuration.languageName();
+    }
+
+    @Override
+    public String getLanguageVersion() {
+        return configuration.languageVersion();
+    }
+
+    @Override
+    public ScriptEngine getScriptEngine() {
+        return new ConfigurableScriptEngine(this);
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactoryConfiguration.java b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactoryConfiguration.java
new file mode 100644
index 0000000..352eee7
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/core/impl/jsr223/ConfigurableScriptEngineFactoryConfiguration.java
@@ -0,0 +1,79 @@
+/*
+ * 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.sling.scripting.core.impl.jsr223;
+
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+
+@ObjectClassDefinition(
+    name = "Apache Sling Scripting Configurable ScriptEngineFactory",
+    description = "Configurable scripting engine for integration tests"
+)
+public @interface ConfigurableScriptEngineFactoryConfiguration {
+
+    @AttributeDefinition(
+        name = "engine name",
+        description = "engine name"
+    )
+    String engineName() default "foo";
+
+    @AttributeDefinition(
+        name = "engine version",
+        description = "engine version"
+    )
+    String engineVersion() default "1.0";
+
+    @AttributeDefinition(
+        name = "language name",
+        description = "language name"
+    )
+    String languageName() default "foo";
+
+    @AttributeDefinition(
+        name = "language version",
+        description = "language version"
+    )
+    String languageVersion() default "1.0";
+
+    @AttributeDefinition(
+        name = "extensions",
+        description = "extensions"
+    )
+    String[] extensions() default {
+        "foo"
+    };
+
+    @AttributeDefinition(
+        name = "mime types",
+        description = "mime types"
+    )
+    String[] mimeTypes() default {
+        "text/x-foo"
+    };
+
+    @AttributeDefinition(
+        name = "names",
+        description = "names"
+    )
+    String[] names() default {
+        "Foo",
+        "foo"
+    };
+
+}
diff --git a/src/test/java/org/apache/sling/scripting/core/it/SLING_5720IT.java b/src/test/java/org/apache/sling/scripting/core/it/SLING_5720IT.java
new file mode 100644
index 0000000..0914854
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/core/it/SLING_5720IT.java
@@ -0,0 +1,95 @@
+/*
+ * 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.sling.scripting.core.it;
+
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Objects;
+
+import javax.inject.Inject;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
+import org.apache.sling.scripting.core.impl.jsr223.ConfigurableScriptEngine;
+import org.apache.sling.scripting.core.impl.jsr223.ConfigurableScriptEngineFactory;
+import org.apache.sling.scripting.core.impl.jsr223.ConfigurableScriptEngineFactoryConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+import org.osgi.service.cm.ConfigurationAdmin;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.sling.scripting.core.impl.jsr223.ConfigurableScriptEngineFactory.CONFIGURATION_PID;
+import static org.awaitility.Awaitility.with;
+import static org.junit.Assert.assertNotNull;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public class SLING_5720IT extends ScriptingCoreTestSupport {
+
+    @Inject
+    private ConfigurationAdmin configurationAdmin;
+
+    @Inject
+    private ScriptEngineManager scriptEngineManager;
+
+    @Configuration
+    public Option[] configuration() {
+        return options(
+            baseConfiguration(),
+            newConfiguration(CONFIGURATION_PID)
+                .put("engineVersion", "2.0")
+                .asOption(),
+            buildBundleWithBnd(
+                ConfigurableScriptEngine.class,
+                ConfigurableScriptEngineFactory.class,
+                ConfigurableScriptEngineFactoryConfiguration.class
+            )
+        );
+    }
+
+    @Test
+    public void testConfigurableScriptEngineFactory() throws IOException {
+        final ScriptEngine fooScriptEngine = scriptEngineManager.getEngineByExtension("foo");
+        assertNotNull(fooScriptEngine);
+        final Dictionary<String, Object> properties = new Hashtable<>();
+        final String[] extensions = {"foo", "bar"};
+        properties.put("extensions", extensions);
+        configurationAdmin.getConfiguration(CONFIGURATION_PID, null).update(properties);
+        with().
+            pollInterval(1, SECONDS).
+            then().
+            await().
+            alias("getting script engine by extension").
+            atMost(10, SECONDS).
+            until(() -> Objects.nonNull(getScriptEngineByExtension("bar")));
+    }
+
+    private ScriptEngine getScriptEngineByExtension(final String extension) {
+        return scriptEngineManager.getEngineByExtension(extension);
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
index 975d68c..dca83e4 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
@@ -28,6 +28,7 @@
 import org.ops4j.pax.exam.options.CompositeOption;
 import org.ops4j.pax.exam.options.ModifiableCompositeOption;
 
+import static org.apache.sling.testing.paxexam.SlingOptions.awaitility;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingResourcePresence;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScripting;
 import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
@@ -66,7 +67,8 @@
             slingResourcePresence(),
             mavenBundle().groupId("org.jsoup").artifactId("jsoup").versionAsInProject(),
             mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(),
-            junitBundles()
+            junitBundles(),
+            awaitility()
         );
     }
 
