diff --git a/core/core.api.php b/core/core.api.php
index ef04faf..4ab94b4 100644
--- a/core/core.api.php
+++ b/core/core.api.php
@@ -375,6 +375,81 @@
  *   Without the parameter options section, it would be in the original
  *   language, untranslated.
  *
+ * @section sec_writing Writing Configuration
+ *
+ * To change a configuration you will need to get an instance of Config
+ * (Mutable config object) by making a call to getEditable() on the config
+ * factory. Attempting to make a change or calling a delete() / save() function
+ * on an instance of \Drupal\Core\Config\ImmutableConfig will throw a
+ * ImmutableConfigException.
+ * This is done in the following way:
+ * @code
+ * $config = \Drupal::service('config.factory')->getEditable('system.performance');
+ * // Set a scalar value.
+ * $config->set('cache.page.enabled', 1);
+ * // Set an array of values.
+ * $page_cache_data = array('enabled' => 1, 'max_age' => 5);
+ * $config->set('cache.page', $page_cache_data);
+ * // Save your data to the file system.
+ * $config->save();
+ * @endcode
+ *
+ * The set() function is also chainable, so if you only need to change one value,
+ * you can do it in a single line of code.
+ * @code
+ * \Drupal::service('config.factory')
+ *   ->getEditable('system.performance')
+ *   ->set('cache.page.enabled', 1)->save();
+ * @endcode
+ *
+ * If you want to replace all the data in the configuration object, use the
+ * setData() function. You cannot use setData() to replace just a subset of the
+ * data - if you want to replace anything less than the entire object you must
+ * use one or more calls to set() instead. When using setData() you must specify
+ * every key and value in the same associative array format as is returned by
+ * get() with no arguments. For the system performance settings in
+ * system.performance.yml, this would look like the following:
+ * @code
+ * // Set all values.
+ * \Drupal::service('config.factory')
+ *   ->getEditable('system.performance')
+ *   ->setData(array(
+ *      'cache' => array(
+ *        'page' => array(
+ *          'enabled' => '0',
+ *          'max_age' => '0',
+ *        ),
+ *      ),
+ *      'preprocess' => array(
+ *        'css' => '0',
+ *        'js' => '0',
+ *      ),
+ *      'response' => array(
+ *        'gzip' => '0',
+ *      ),
+ *   ))
+ *   ->save();
+ * @endcode
+ *
+ * @section sec_delete Removing configuration
+ *
+ * Individual configuration values can be unset using the clear() function,
+ * which is also chainable.
+ * @code
+ * $config = \Drupal::service('config.factory')->getEditable('system.performance');
+ * $config->clear('cache.page.max_age')->save();
+ * $page_cache_data = $config->get('cache.page');
+ * @endcode
+ *
+ * In this example $page_cache_data would return an array with one key -
+ * 'enabled' - because 'max_age' was unset. Whole configuration sets can be
+ * removed using the delete() function.
+ * @code
+ * \Drupal::service('config.factory')->getEditable('system.performance')->delete();
+ * @endcode
+ * Note that this should not be followed by a call to save(), as doing so would
+ * create an empty version of the configuration set.
+ *
  * @see i18n
  *
  * @}
