diff --git a/README.md b/README.md
index c52a172d70..14addf7442 100755
--- a/README.md
+++ b/README.md
@@ -65,6 +65,7 @@ Contributing
* [Testsuite](misc/Testsuite.md) - Details about testsuite, but also how to quickly run Keycloak during development and a few test tools (OTP generation, LDAP server, Mail server)
* [Database Testing](misc/DatabaseTesting.md) - How to do testing of Keycloak on different databases
* [Updating Database](misc/UpdatingDatabaseSchema.md) - How to change the Keycloak database
+ * [Changing the Default keycloak-subsystem Configuration](misc/UpdatingServerConfig.md) - How to update the default keycloak-subsystem config
* [Developer Mailing List](https://lists.jboss.org/mailman/listinfo/keycloak-dev) - Mailing list to discuss development of Keycloak
diff --git a/misc/UpdatingServerConfig.md b/misc/UpdatingServerConfig.md
new file mode 100644
index 0000000000..a3282af996
--- /dev/null
+++ b/misc/UpdatingServerConfig.md
@@ -0,0 +1,65 @@
+# Changing the Default *keycloak-subsystem* Configuration
+
+If you need to make a change to the default keycloak-subsystem
+configuration that is packaged with our distributions, you will need to edit this file:
+https://github.com/keycloak/keycloak/blob/master/wildfly/server-subsystem/src/main/config/default-server-subsys-config.properties
+
+This file contains a single multi-line property containing the subsystem
+xml declaration. Maven filtering is used to read this property and
+inject it everywhere it needs to go. Editing this file will also take
+care of propagating it to the distributions like server-dist and demo-dist.
+
+Also, you need to create CLI commands for each change by editing this file:
+https://github.com/keycloak/keycloak/blob/master/wildfly/server-subsystem/src/main/resources/cli/default-keycloak-subsys-config.cli
+
+This CLI snippet is used in the scripts required by the overlay distribution.
+
+## Updating an SPI
+The changes you will likely make are when you need to add a new SPI, change an existing SPI, or add/change a provider within an SPI.
+
+All elements in an SPI declaration are optional, but a full SPI declaration
+ looks like this:
+````xml
+
+ mongo
+
+
+
+
+
+
+
+
+
+
+
+
+````
+Here we have two providers defined for the SPI `dblock`. The
+`default-provider` is listed as `mongo`. However it is up to the SPI to decide how it will
+treat this setting. Some SPIs allow more than one provider and some do not. So
+`default-provider` can help the SPI to choose.
+
+Also notice that each provider defines its own set of configuration
+properties. The fact that both providers above have a property called
+`lockWaitTimeout` is just a coincidence.
+
+## Values of type *List*
+The type of each property value is interpreted by the provider. However,
+there is one exception. Consider the `jpa` provider for the `eventStore` API:
+````xml
+
+
+
+
+
+
+
+````
+We see that the value begins and ends with square brackets. That means that
+the value will be passed to the provider as a list. In this example,
+the system will pass the
+provider a list with two element values `EVENT1` and `EVENT2`. To add
+more values to the list, just separate each list element with a comma. Unfortunately,
+you do need to escape the quotes surrounding each list element with
+`"`.