diff --git a/docs/CBI.md b/docs/CBI.md
deleted file mode 100644
index 056386f8c2..0000000000
--- a/docs/CBI.md
+++ /dev/null
@@ -1,251 +0,0 @@
-# Writing LuCI CBI models
-
-See [online wiki](https://github.com/openwrt/luci/wiki/CBI) for latest version.
-
-CBI models are Lua files describing the structure of an UCI config file and the resulting HTML form to be evaluated by the CBI parser.
-All CBI model files must return an object of type `luci.cbi.Map`.
-For a commented example of a CBI model, see the [Writing Modules tutorial](./ModulesHowTo.md).
-
-The scope of a CBI model file is automatically extended by the contents of the module `luci.cbi` and the `translate` function from `luci.i18n`.
-
-This Reference covers **the basics** of the CBI system.
-
-
-## class Map (config, title, description)
-This is the root object of the model.
-
-* `config:` configuration filename to be mapped, see [UCI documentation](https://openwrt.org/docs/guide-user/base-system/uci) and the files in `/etc/config`
-* `title:` title shown in the UI
-* `description:` description shown in the UI
-
-#### function :section (sectionclass, ...)
-Creates a new section
-* `sectionclass`: a class object of the section
-* _additional parameters passed to the constructor of the section class_
-
-----
-
-## class NamedSection (name, type, title, description)
-An object describing an UCI section selected by the name.
-To instantiate use: `Map:section(NamedSection, "name", "type", "title", "description")`
-
-* `name:` UCI section name
-* `type:` UCI section type
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :option(optionclass, ...)
-Creates a new option
-* `optionclass:` a class object of the section
-* _additional parameters passed to the constructor of the option class_
-
-#### property .addremove = false
-Allows the user to remove and recreate the configuration section.
-
-#### property .dynamic = false
-Marks this section as dynamic.
-Dynamic sections can contain an undefinded number of completely userdefined options.
-
-#### property .optional = true
-Parse optional options
-
-----
-
-## class TypedSection (type, title, description)
-An object describing a group of UCI sections selected by their type.
-To instantiate use: `Map:section(TypedSection, "type", "title", "description")`
-* `type:` UCI section type
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :option(optionclass, ...)
-Creates a new option
-* `optionclass:` a class object of the section
-* _additional parameters passed to the constructor of the option class_
-
-#### function :depends(key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-#### function .filter(self, section) -abstract-
-You can override this function to filter certain sections that will not be parsed.
-The filter function will be called for every section that should be parsed and returns `nil` for sections that should be filtered.
-For all other sections it should return the section name as given in the second parameter.
-
-#### property .addremove = false
-Allows the user to remove and recreate the configuration section
-
-#### property .dynamic = false
-Marks this section as dynamic.
-Dynamic sections can contain an undefinded number of completely userdefined options.
-
-#### property .optional = true
-Parse optional options
-
-#### property .anonymous = false
-Do not show UCI section names
-
-----
-
-## class Value (option, title, description)
-An object describing an option in a section of a UCI File. Creates a standard text field in the formular.
-To instantiate use: `NamedSection:option(Value, "option", "title", "description")`
- or `TypedSection:option(Value, "option", "title", "description")`
-* `option:` UCI option name
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :depends(key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-#### function :value(key, value)
-Convert this text field into a combobox if possible and add a selection option.
-
-#### property .default = nil
-The default value
-
-#### property .maxlength = nil
-The maximum input length (of chars) of the value
-
-#### property .optional = false
-Marks this option as optional, implies `.rmempty = true`
-
-#### property .rmempty = true
-Removes this option from the configuration file when the user enters an empty value
-
-#### property .size = nil
-The maximum number of chars displayed by form field
-
-----
-
-## class ListValue (option, title, description)
-An object describing an option in a section of a UCI File.
-Creates a list box or list of radio (for selecting one of many choices) in the formular.
-To instantiate use: `NamedSection:option(ListValue, "option", "title", "description")`
-or `TypedSection:option(ListValue, "option", "title", "description")`
-* `option:` UCI option name
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :depends(key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-#### function :value(key, value)
-Adds an entry to the selection list
-
-#### property .widget = "select"
-`select` shows a selection list, `radio` shows a list of radio buttons inside form
-
-#### property .default = nil
-The default value
-
-#### property .optional = false
-Marks this option as optional, implies `.rmempty = true`
-
-#### property .rmempty = true
-Removes this option from the configuration file when the user enters an empty value
-
-#### property .size = nil
-The size of the form field
-
-----
-
-## class Flag (option, title, description)
-An object describing an option with two possible values in a section of a UCI File.
-Creates a checkbox field in the formular.
-To instantiate use: `NamedSection:option(Flag, "option", "title", "description")`
- or `TypedSection:option(Flag, "option", "title", "description")`
-* `option:` UCI option name
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :depends (key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-#### property .default = nil
-The default value
-
-#### property .disabled = 0
-the value that should be set if the checkbox is unchecked
-
-#### property .enabled = 1
-the value that should be set if the checkbox is checked
-
-#### property .optional = false
-Marks this option as optional, implies `.rmempty = true`
-
-#### property .rmempty = true
-Removes this option from the configuration file when the user enters an empty value
-
-----
-
-## class MultiValue (option, title, description)
-An object describing an option in a section of a UCI File.
-Creates a list of checkboxed or a multiselectable list as form fields.
-To instantiate use: `NamedSection:option(MultiValue, "option", "title", "description")`
- or `TypedSection:option(MultiValue, "option", "title", "description")`
-* `option:` UCI option name
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :depends (key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-#### function :value(key, value)
-Adds an entry to the list
-
-#### property .widget = "checkbox"
-`select` shows a selection list, `checkbox` shows a list of checkboxes inside form
-
-#### property .delimiter = " "
-The string which will be used to delimit the values inside stored option
-
-#### property .default = nil
-The default value
-
-#### property .optional = false
-Marks this option as optional, implies `.rmempty = true`
-
-#### property .rmempty = true
-Removes this option from the configuration file when the user enters an empty value
-
-#### property .size = nil
-The size of the form field (only used if property `.widget = "select"`)
-
-----
-
-## class StaticList (option, title, description)
-Similar to the `MultiValue`, but stores selected Values into a UCI list instead of a character-separated option.
-
-----
-
-## class DynamicList (option, title, description)
-A extensible list of user-defined values. Stores Values into a UCI list
-
-----
-
-## class DummyValue (option, title, description)
-Creates a readonly text in the form. !It writes no data to UCI!
-To instantiate use: `NamedSection:option(DummyValue, "option", "title", "description")`
- or `TypedSection:option(DummyValue, "option", "title", "description")`
-* `option:` UCI option name
-* `title:` The title shown in the UI
-* `description:` description shown in the UI
-
-#### function :depends (key, value)
-Only show this option field if another option `key` is set to `value` in the same section.
-If you call this function several times the dependencies will be linked with **"or"**
-
-----
-
-## class TextValue (option, title, description)
-An object describing a multi-line textbox in a section in a non-UCI form.
-
-----
-
-## class Button (option, title, description)
-An object describing a Button in a section in a non-UCI form.
diff --git a/docs/LuCI-0.10.md b/docs/LuCI-0.10.md
deleted file mode 100644
index d39122c878..0000000000
--- a/docs/LuCI-0.10.md
+++ /dev/null
@@ -1,196 +0,0 @@
-# New in LuCI 0.10
-
-See [online wiki](https://github.com/openwrt/luci/wiki/LuCI-0.10) for latest version.
-
-This document describes new features and incompatibilities to LuCI 0.9.x.
-It is targeted at module authors developing external addons to LuCI.
-
-## I18N Changes
-
-### API
-
-The call conventions for the i18n api changed, there is no dedicated translation
-key anymore and the english text is used for lookup instead. This was done to
-ease the maintenance of language files.
-
-Code that uses `translate()` or `i18n()` must be changed as follows:
-
-```lua
--- old style:
-translate("some_text", "Some Text")
-translatef("some_format_text", "Some formatted Text: %d", 123)
-
--- new style:
-translate("Some Text")
-translatef("Some formatted Text: %d", 123)
-```
-
-Likewise for templates:
-
-```html
-
-<%:some_text Some Text%>
-
-
-<%:Some Text%>
-```
-
-If code must support both LuCI 0.9.x and 0.10.x versions, it is suggested to write the calls as follows:
-```lua
-translate("Some Text", "Some Text")
-```
-
-An alternative is wrapping translate() calls into a helper function:
-```lua
-function tr(key, alt)
- return translate(key) or translate(alt) or alt
-end
-```
-
-... which is used as follows:
-```lua
-tr("some_key", "Some Text")
-```
-
-### Translation File Format
-
-Translation catalogs are now maintained in `*.po` format files.
-During build those get translated into [*.lmo archives](https://github.com/openwrt/luci/wiki/LMO).
-
-#### Components built within the LuCI tree
-
-If components using translations are built along with the LuCI tree, the newly added *.po file are automatically
-compiled into *.lmo archives during the build process. In order to bundle the appropriate *.lmo files into the
-corresponding *.ipk packages, component Makefiles must include a "PO" variable specifying the files to include.
-
-Given a module `applications/example/` which uses `po/en/example.po` and `po/en/example-extra.po`,
-the `applications/example/Makefile` must be changed as follows:
-
-```Makefile
-PO = example example-extra
-
-include ../../build/config.mk
-include ../../build/module.mk
-```
-
-#### Standalone components
-
-Authors who externally package LuCI components must prepare required `*.lmo` archives themselves.
-To convert existing Lua based message catalogs to the `*.po` format, the `build/i18n-lua2po.pl` helper script can be used.
-In order to convert `*.po` files into `*.lmo` files, the standalone `po2lmo` utility must be compiled as follows:
-
-```
-$ svn co http://svn.luci.subsignal.org/luci/branches/luci-0.10/libs/lmo
-$ cd lmo/
-$ make
-$ ./src/po2lmo translations.po translations.lmo
-```
-
-Note that at the time of writing, the utility program needs Lua headers installed on the system in order to compile properly.
-
-## CBI
-
-### Datatypes
-
-The server side UVL validation has been dropped to reduce space requirements on the target.
-Instead it is possible to define datatypes for CBI widgets now:
-
-```lua
-opt = section:option(Value, "optname", "Title Text")
-opt.datatype = "ip4addr"
-```
-
-User provided data is validated once on the frontend via JavaScript and on the server side prior to saving it.
-A list of possible datatypes can be found in the [luci.cbi.datatypes](https://github.com/openwrt/luci/blob/master/modules/luci-compat/luasrc/cbi/datatypes.lua) class.
-
-### Validation
-
-Server-side validator functions can now return custom error messages to provide better feedback on invalid input.
-
-```lua
-opt = section:option(Value, "optname", "Title Text")
-
-function opt.validate(self, value, section)
- if input_is_valid(value) then
- return value
- else
- return nil, "The value is invalid because ..."
- end
-end
-```
-
-### Tabs
-
-It is now possible to break up CBI sections into multiple tabs to better organize longer forms.
-The TypedSection and NamedSection classes gained two new functions to define tabs, `tab()` and `taboption()`.
-
-```lua
-sct = map:section(TypedSection, "name", "type", "Title Text")
-
-sct:tab("general", "General Tab Title", "General Tab Description")
-sct:tab("advanced", "Advanced Tab Title", "Advanced Tab Description")
-
-opt = sct:taboption("general", Value, "optname", "Title Text")
-```
-
-The `tab()` function declares a new tab and takes up to three arguments:
- * Internal name of the tab, must be unique within the section
- * Title text of the tab
- * Optional description text for the tab
-
-The `taboption()` function wraps `option()` and assigns the option object to the given tab.
-It takes up to five arguments:
-
- * Name of the tab to assign the option to
- * Option type, e.g. Value or DynamicList
- * Option name
- * Title text of the option
- * Optional description text of the option
-
-If tabs are used within a particular section, the `option()` function must not be used,
-doing so results in undefined behaviour.
-
-### Hooks
-
-The CBI gained support for `hooks` which can be used to trigger additional actions during the
-life-cycle of a map:
-
-```lua
-map = Map("config", "Title Text")
-
-function map.on_commit(self)
- -- do something if the UCI configuration got committed
-end
-```
-
-The following hooks are defined:
-
-* `on_cancel`: The user pressed cancel within a multistep Delegator or a SimpleForm instance
-* `on_init`: The CBI is about to render the Map object
-* `on_parse`: The CBI is about to read received HTTP form values
-* `on_save`, `on_before_save`: The CBI is about to save modified UCI configuration files
-* `on_after_save`: Modified UCI configuration files just got saved
-* `on_before_commit`: The CBI is about to commit the changes
-* `on_commit`, `on_after_commit`, `on_before_apply`: Modified configurations got committed and the CBI is about to restart associated services
-* `on_apply`, `on_after_apply`: All changes where completely applied (only works on Map instances with the apply_on_parse attribute set)
-
-### Sortable Tables
-
-TypedSection instances which use the `cbi/tblsection` template may now use a new attribute `sortable` to allow the user to reorder table rows.
-
-```lua
-sct = map:section(TypedSection, "name", "type", "Title Text")
-sct.template = "cbi/tblsection"
-sct.sortable = true
-```
-
-## JavaScript
-
-The LuCI 0.10 branch introduced a new JavaScript file `xhr.js` which provides support routines for `XMLHttpRequest` operations.
-Each theme must include this file in the `