diff --git a/documentation/api/source/plugins/remotes.rst b/documentation/api/source/plugins/remotes.rst
index 0bcd37119..0bb05b8b9 100644
--- a/documentation/api/source/plugins/remotes.rst
+++ b/documentation/api/source/plugins/remotes.rst
@@ -17,3 +17,9 @@ Helper Classes & Functions
.. automodule:: openlp.plugins.remotes.lib
:members:
+
+.. autoclass:: openlp.plugins.remotes.lib.httpserver.HttpConnection
+ :members:
+
+.. autoclass:: openlp.plugins.remotes.lib.httpserver.HttpResponse
+ :members:
diff --git a/openlp/plugins/media/mediaplugin.py b/openlp/plugins/media/mediaplugin.py
index 06936cd44..683875e95 100644
--- a/openlp/plugins/media/mediaplugin.py
+++ b/openlp/plugins/media/mediaplugin.py
@@ -49,11 +49,13 @@ class MediaPlugin(Plugin):
u'audio/ac3': [u'.ac3'],
u'audio/flac': [u'.flac'],
u'audio/x-m4a': [u'.m4a'],
+ u'audio/midi': [u'.mid', u'.midi'],
u'audio/x-mp3': [u'.mp3'],
u'audio/mpeg': [u'.mp3', u'.mp2', u'.mpga', u'.mpega', u'.m4a'],
u'audio/qcelp': [u'.qcp'],
u'audio/x-wma': [u'.wma'],
u'audio/x-ms-wma': [u'.wma'],
+ u'video/x-flv': [u'.flv'],
u'video/x-matroska': [u'.mpv', u'.mkv'],
u'video/x-wmv': [u'.wmv'],
u'video/x-ms-wmv': [u'.wmv']}
diff --git a/openlp/plugins/remotes/__init__.py b/openlp/plugins/remotes/__init__.py
index b5077f435..70445293a 100644
--- a/openlp/plugins/remotes/__init__.py
+++ b/openlp/plugins/remotes/__init__.py
@@ -26,4 +26,68 @@
"""
The :mod:`remotes` plugin allows OpenLP to be controlled from another machine
over a network connection.
+
+Routes:
+
+``/``
+ Go to the web interface.
+
+``/files/{filename}``
+ Serve a static file.
+
+``/api/poll``
+ Poll to see if there are any changes. Returns a JSON-encoded dict of
+ any changes that occurred::
+
+ {"results": {"type": "controller"}}
+
+ Or, if there were no results, False::
+
+ {"results": False}
+
+``/api/controller/{live|preview}/{action}``
+ Perform ``{action}`` on the live or preview controller. Valid actions
+ are:
+
+ ``next``
+ Load the next slide.
+
+ ``previous``
+ Load the previous slide.
+
+ ``jump``
+ Jump to a specific slide. Requires an id return in a JSON-encoded
+ dict like so::
+
+ {"request": {"id": 1}}
+
+ ``first``
+ Load the first slide.
+
+ ``last``
+ Load the last slide.
+
+ ``text``
+ Request the text of the current slide.
+
+``/api/service/{action}``
+ Perform ``{action}`` on the service manager (e.g. go live). Data is
+ passed as a json-encoded ``data`` parameter. Valid actions are:
+
+ ``next``
+ Load the next item in the service.
+
+ ``previous``
+ Load the previews item in the service.
+
+ ``jump``
+ Jump to a specific item in the service. Requires an id returned in
+ a JSON-encoded dict like so::
+
+ {"request": {"id": 1}}
+
+ ``list``
+ Request a list of items in the service.
+
+
"""
diff --git a/openlp/plugins/remotes/html/images/ajax-loader.png b/openlp/plugins/remotes/html/images/ajax-loader.png
new file mode 100644
index 000000000..811a2cdd1
Binary files /dev/null and b/openlp/plugins/remotes/html/images/ajax-loader.png differ
diff --git a/openlp/plugins/remotes/html/images/form-check-off.png b/openlp/plugins/remotes/html/images/form-check-off.png
new file mode 100644
index 000000000..54e2fe0f8
Binary files /dev/null and b/openlp/plugins/remotes/html/images/form-check-off.png differ
diff --git a/openlp/plugins/remotes/html/images/form-check-on.png b/openlp/plugins/remotes/html/images/form-check-on.png
new file mode 100644
index 000000000..e6daaaf8b
Binary files /dev/null and b/openlp/plugins/remotes/html/images/form-check-on.png differ
diff --git a/openlp/plugins/remotes/html/images/form-radio-off.png b/openlp/plugins/remotes/html/images/form-radio-off.png
new file mode 100644
index 000000000..32bd43392
Binary files /dev/null and b/openlp/plugins/remotes/html/images/form-radio-off.png differ
diff --git a/openlp/plugins/remotes/html/images/form-radio-on.png b/openlp/plugins/remotes/html/images/form-radio-on.png
new file mode 100644
index 000000000..ddc404970
Binary files /dev/null and b/openlp/plugins/remotes/html/images/form-radio-on.png differ
diff --git a/openlp/plugins/remotes/html/images/icon-search-black.png b/openlp/plugins/remotes/html/images/icon-search-black.png
new file mode 100644
index 000000000..5721120f8
Binary files /dev/null and b/openlp/plugins/remotes/html/images/icon-search-black.png differ
diff --git a/openlp/plugins/remotes/html/images/icons-18-black.png b/openlp/plugins/remotes/html/images/icons-18-black.png
new file mode 100644
index 000000000..3657baea8
Binary files /dev/null and b/openlp/plugins/remotes/html/images/icons-18-black.png differ
diff --git a/openlp/plugins/remotes/html/images/icons-18-white.png b/openlp/plugins/remotes/html/images/icons-18-white.png
new file mode 100644
index 000000000..ccca7b44b
Binary files /dev/null and b/openlp/plugins/remotes/html/images/icons-18-white.png differ
diff --git a/openlp/plugins/remotes/html/images/icons-36-black.png b/openlp/plugins/remotes/html/images/icons-36-black.png
new file mode 100644
index 000000000..79b6d601b
Binary files /dev/null and b/openlp/plugins/remotes/html/images/icons-36-black.png differ
diff --git a/openlp/plugins/remotes/html/images/icons-36-white.png b/openlp/plugins/remotes/html/images/icons-36-white.png
new file mode 100644
index 000000000..e1b9c04ea
Binary files /dev/null and b/openlp/plugins/remotes/html/images/icons-36-white.png differ
diff --git a/openlp/plugins/remotes/html/images/ui-icon-blank.png b/openlp/plugins/remotes/html/images/ui-icon-blank.png
new file mode 100644
index 000000000..a685fe537
Binary files /dev/null and b/openlp/plugins/remotes/html/images/ui-icon-blank.png differ
diff --git a/openlp/plugins/remotes/html/images/ui-icon-unblank.png b/openlp/plugins/remotes/html/images/ui-icon-unblank.png
new file mode 100644
index 000000000..590361f44
Binary files /dev/null and b/openlp/plugins/remotes/html/images/ui-icon-unblank.png differ
diff --git a/openlp/plugins/remotes/html/index.html b/openlp/plugins/remotes/html/index.html
index 94bb24d32..bb3352f1f 100644
--- a/openlp/plugins/remotes/html/index.html
+++ b/openlp/plugins/remotes/html/index.html
@@ -1,57 +1,73 @@
-
-
-