diff --git a/debian/freedombox.maintscript b/debian/freedombox.maintscript
index 83b5e89d6..da539d56a 100644
--- a/debian/freedombox.maintscript
+++ b/debian/freedombox.maintscript
@@ -7,3 +7,4 @@ rm_conffile /etc/plinth/modules-enabled/owncloud 0.15.1+ds-2~
rm_conffile /etc/plinth/modules-enabled/system 0.15.1+ds-2~
rm_conffile /etc/plinth/modules-enabled/disks 0.15.3+ds-1~
rm_conffile /etc/plinth/modules-enabled/udiskie 0.39.0~
+rm_conffile /etc/plinth/modules-enabled/restore 20.1~
diff --git a/plinth/modules/restore/__init__.py b/plinth/modules/restore/__init__.py
deleted file mode 100644
index 2f6dfd4bc..000000000
--- a/plinth/modules/restore/__init__.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#
-# This file is part of FreedomBox.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-"""
-FreedomBox app to configure reStore.
-"""
-
-from django.utils.translation import ugettext_lazy as _
-
-from plinth import app as app_module
-from plinth import cfg, menu
-from plinth.daemon import Daemon
-from plinth.modules.firewall.components import Firewall
-from plinth.utils import format_lazy
-
-from .manifest import clients
-
-version = 1
-
-managed_services = ['node-restore']
-
-managed_packages = ['node-restore']
-
-name = _('reStore')
-
-short_description = _('Unhosted Storage')
-
-description = [
- format_lazy(
- _('reStore is a server for '
- 'unhosted web applications. The idea is to uncouple web '
- 'applications from data. No matter where a web application is '
- 'served from, the data can be stored on an unhosted storage '
- 'server of user\'s choice. With reStore, your {box_name} becomes '
- 'your unhosted storage server.'), box_name=_(cfg.box_name)),
- _('You can create and edit accounts in the '
- 'reStore web-interface.')
-]
-
-clients = clients
-
-reserved_usernames = ['node-restore']
-
-app = None
-
-
-class RestoreApp(app_module.App):
- """FreedomBox app for Restore."""
-
- app_id = 'restore'
-
- def __init__(self):
- """Create components for the app."""
- super().__init__()
- menu_item = menu.Menu('menu-restore', name, short_description,
- 'fa-hdd-o', 'restore:index',
- parent_url_name='apps')
- self.add(menu_item)
-
- firewall = Firewall('firewall-restore', name, ports=['http', 'https'],
- is_external=True)
- self.add(firewall)
-
- daemon = Daemon('daemon-restore', managed_services[0])
- self.add(daemon)
-
-
-def init():
- """Initialize the reStore module."""
- global app
- app = RestoreApp()
-
- setup_helper = globals()['setup_helper']
- if setup_helper.get_state() != 'needs-setup' and app.is_enabled():
- app.enable()
-
-
-def setup(helper, old_version=None):
- """Install and configure the module."""
- helper.install(managed_packages)
- helper.call('post', app.enable)
diff --git a/plinth/modules/restore/data/etc/plinth/modules-enabled/restore b/plinth/modules/restore/data/etc/plinth/modules-enabled/restore
deleted file mode 100644
index 3707ee981..000000000
--- a/plinth/modules/restore/data/etc/plinth/modules-enabled/restore
+++ /dev/null
@@ -1 +0,0 @@
-#plinth.modules.restore
diff --git a/plinth/modules/restore/manifest.py b/plinth/modules/restore/manifest.py
deleted file mode 100644
index b5790e5fe..000000000
--- a/plinth/modules/restore/manifest.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# This file is part of FreedomBox.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-
-from django.utils.translation import ugettext_lazy as _
-
-from plinth.clients import validate
-
-clients = validate([{
- 'name': _('reStore'),
- 'platforms': [{
- 'type': 'web',
- 'url': '/restore'
- }]
-}])
diff --git a/plinth/modules/restore/tests/__init__.py b/plinth/modules/restore/tests/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/plinth/modules/restore/urls.py b/plinth/modules/restore/urls.py
deleted file mode 100644
index 1d8288de7..000000000
--- a/plinth/modules/restore/urls.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# This file is part of FreedomBox.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-"""
-URLs for the reStore module.
-"""
-
-from django.conf.urls import url
-
-from plinth.modules import restore
-from plinth.views import AppView
-
-urlpatterns = [
- url(
- r'^apps/restore/$',
- AppView.as_view(app_id='restore', name=restore.name,
- description=restore.description,
- clients=restore.clients), name='index'),
-]