diff --git a/reader/CHANGELOG.md b/reader/CHANGELOG.md
new file mode 100644
index 0000000..ec1893c
--- /dev/null
+++ b/reader/CHANGELOG.md
@@ -0,0 +1,29 @@
+## Unreleased
+### Added
+ - Reader now supports CBR/CBZ ('comics') files
+ - Book position is saved on server and restored on next invocation
+ - Framework to support more file format renderers
+
+## 0.8.3 - 2017-02-02
+### Fixed
+ . #31: ReferenceError: cleanStartTextContent is not defined, caused by failure to declare local var in epub.js
+
+## 0.8.3 - 2017-02-01
+### Fixed
+ - missing $title parameter in template/reader.php caused warnings in log, fixed
+
+## 0.8.2 - 2017-01-10
+### Fixed
+ - Nextcloud-port broke compatibility with Owncloud due to OC not supporting CSPv3, workaround implemented
+
+## 0.8.1 - 2017-01-09
+### Added
+ - Modified info.xml, added screenshots
+
+## 0.8.0 - 2017-01-09
+### Added
+ - new version 0.2.15 of Futurepress epub.js renderer
+
+### Changed
+ - New logo
+ - First release to be compatible with Nextcloud
diff --git a/reader/README.md b/reader/README.md
new file mode 100644
index 0000000..4c1f536
--- /dev/null
+++ b/reader/README.md
@@ -0,0 +1,11 @@
+files_reader
+------------
+
+Reader is an ebook reader based on a pure javascript epub renderer. It only works for books formatted according to the epub standard.
+
+Using the futurepress epub.js renderer it provides near-native looks, especially when used full-screen. Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use the sidebar to browse through chapters or bookmarks and add annotations.
+
+Reader has a night mode (toggled by clicking or pressing the book title/author on top of the viewer) to read in the dark without waking up the neighbours. This is obviously most effective when used full-screen. The colours used for night mode are configurable in the Settings dialog.
+
+Also in Settings you'll find the option to use ignore any internal formatting in the book by forcing a given font style and size.
+
diff --git a/reader/appinfo/app.php b/reader/appinfo/app.php
new file mode 100644
index 0000000..4d35577
--- /dev/null
+++ b/reader/appinfo/app.php
@@ -0,0 +1,30 @@
+getContentSecurityPolicyManager();
+ $csp = new \OCP\AppFramework\Http\EmptyContentSecurityPolicy();
+ $csp->addAllowedStyleDomain('\'self\'');
+ $csp->addAllowedStyleDomain('blob:');
+ $csp->addAllowedScriptDomain('\'self\'');
+ $csp->addAllowedFrameDomain('\'self\'');
+ $csp->addAllowedChildSrcDomain('\'self\'');
+ $csp->addAllowedFontDomain('\'self\'');
+ $csp->addAllowedImageDomain('blob:');
+ $manager->addDefaultPolicy($csp);
+}
diff --git a/reader/appinfo/application.php.org b/reader/appinfo/application.php.org
new file mode 100644
index 0000000..e8894d3
--- /dev/null
+++ b/reader/appinfo/application.php.org
@@ -0,0 +1,118 @@
+getContainer();
+
+ $container->registerService('PageController', function($c){
+ return new PageController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('OCP\IURLGenerator')
+ );
+ });
+
+ $container->registerService('BookmarkController', function($c){
+ return new BookmarkController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('BookmarkService')
+ );
+ });
+
+ $container->registerService('MetadataController', function($c){
+ return new MetadataController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('MetadataService')
+ );
+ });
+
+ $container->registerService('PreferenceController', function($c){
+ $UserId = ($user = $c->query('ServerContainer')->getUserSession()->getUser())
+ ? $user->getUID() : null;
+
+ return new PreferenceController(
+ $c->query('AppName'),
+ $c->query('Request'),
+ $c->query('OCP\IURLGenerator'),
+ $c->query('PreferenceService')
+ );
+ });
+
+ $container->registerService('BookmarkService', function($c){
+ $UserId = ($user = $c->query('ServerContainer')->getUserSession()->getUser())
+ ? $user->getUID()
+ : null;
+
+ return new BookmarkService(
+ $c->query('BookmarkMapper'),
+ $UserId
+ );
+ });
+
+ $container->registerService('MetadataService', function($c){
+ return new MetadataService();
+ });
+
+ $container->registerService('PreferenceService', function($c){
+ return new PreferenceService(
+ $c->query('PreferenceMapper')
+ );
+ });
+
+ $container->registerService('BookmarkMapper', function($c){
+ $UserId = ($user = $c->query('ServerContainer')->getUserSession()->getUser())
+ ? $user->getUID()
+ : null;
+
+ return new BookmarkMapper(
+ $c->query('ServerContainer')->getDb(),
+ $UserId,
+ $c->query('Time')
+ );
+ });
+
+ $container->registerService('PreferenceMapper', function($c){
+ $UserId = ($user = $c->query('ServerContainer')->getUserSession()->getUser())
+ ? $user->getUID()
+ : null;
+
+ return new PreferenceMapper(
+ $c->query('ServerContainer')->getDb(),
+ $UserId,
+ $c->query('Time')
+ );
+ });
+ }
+}
+
diff --git a/reader/appinfo/database.xml b/reader/appinfo/database.xml
new file mode 100644
index 0000000..0445527
--- /dev/null
+++ b/reader/appinfo/database.xml
@@ -0,0 +1,185 @@
+
+
+ *dbname*
+ true
+ false
+ utf8
+
+