diff --git a/.docker/build/kerberos/Dockerfile b/.docker/build/kerberos/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..511a636cdaef7727c6fdc7562ece01149a018482
--- /dev/null
+++ b/.docker/build/kerberos/Dockerfile
@@ -0,0 +1,25 @@
+FROM debian:stable
+ARG DEBIAN_FRONTEND=noninteractive
+
+RUN { \
+        echo krb5-config krb5-config/default_realm string 'LOCAL.ISIMA.FR'; \
+        echo tzdata tzdata/Areas string 'Etc'; \
+        echo tzdata tzdata/Zones/Etc string 'UTC'; \
+    } | debconf-set-selections \
+    && \
+    apt-get update && apt-get install -y --no-install-recommends \
+        build-essential \
+        gcc \
+        apt-utils \
+        krb5-user \
+        krb5-config \
+        openssh-client \
+        locales \
+        rsync \
+    && \
+    locale-gen fr_FR \
+    locale-gen fr_FR.UTF-8 \
+    update-locale LANG=fr_FR.UTF-8 \
+    . /etc/default/locale
+
+WORKDIR /srv/blog
\ No newline at end of file
diff --git a/.docker/build/pelican/Dockerfile b/.docker/build/pelican/Dockerfile
deleted file mode 100644
index 3bd603170a2e3d063af1bcd17ba3da4c24e9fcbd..0000000000000000000000000000000000000000
--- a/.docker/build/pelican/Dockerfile
+++ /dev/null
@@ -1,54 +0,0 @@
-# FROM nikolaik/python-nodejs:python3.7-nodejs16-bullseye AS compile-image
-FROM nikolaik/python-nodejs:python3.7-nodejs16-bullseye AS source-image
-ARG DEBIAN_FRONTEND=noninteractive
-
-RUN { \
-        echo krb5-config krb5-config/default_realm string 'LOCAL.ISIMA.FR'; \
-        echo tzdata tzdata/Areas string 'Etc'; \
-        echo tzdata tzdata/Zones/Etc string 'UTC'; \
-    } | debconf-set-selections \
-    && \
-    apt-get update && apt-get install -y --no-install-recommends \
-        build-essential \
-        gcc \
-        apt-utils \
-        krb5-user \
-        krb5-config \
-        locales \
-        rsync \
-    && \
-    locale-gen fr_FR \
-    locale-gen fr_FR.UTF-8 \
-    update-locale LANG=fr_FR.UTF-8 \
-    . /etc/default/locale
-
-COPY requirements.txt .
-RUN pip install --user -r requirements.txt
-COPY content/package.json ./content/package.json
-RUN cd content && yarn install
-
-# FROM nikolaik/python-nodejs:python3.7-nodejs16-bullseye AS build-image
-# COPY --from=compile-image /root/.local /root/.local
-# COPY --from=compile-image /usr/bin /usr/bin
-# COPY --from=compile-image /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu
-# LABEL stage=builder
-
-ENV SRV_DIR=//srv
-ENV WORKING_DIR=//srv/pelican
-ENV PORT=8000
-ENV PATH=/root/.local/bin:$PATH
-
-ADD . $SRV_DIR
-WORKDIR $WORKING_DIR
-RUN mkdir output content cache
-# VOLUME ["$WORKING_DIR/"]
-
-# make python server in foreground
-RUN sed -i 's/\$port &/\$port/g' $SRV_DIR/develop_server.sh
-
-RUN chmod +x $SRV_DIR/develop_server.sh
-
-EXPOSE $PORT
-
-ENTRYPOINT $SRV_DIR/develop_server.sh start $PORT
-
diff --git a/.docker/scripts/kerberos/command.dev.sh b/.docker/scripts/kerberos/command.dev.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6e5028008ae451291329a28d167a89ff1e4f7061
--- /dev/null
+++ b/.docker/scripts/kerberos/command.dev.sh
@@ -0,0 +1,16 @@
+source .env 
+SSH_CMD="ssh -o StrictHostKeyChecking=no -K ${KRB_USER}@${SERVER}"
+RSYNC_CMD=''
+kinit ${KRB_USER}
+${SSH_CMD} "mkdir -p ~/public_html/"
+${SSH_CMD} "echo 'Options +FollowSymLinks' >  ~/public_html/.htaccess"
+${SSH_CMD} "echo 'RewriteEngine on' >>  ~/public_html/.htaccess"
+${SSH_CMD} "echo 'RewriteCond %{HTTP_HOST} ^perso.isima.fr$' >>  ~/public_html/.htaccess"
+${SSH_CMD} "echo 'RewriteRule (.*) https://perso.limos.fr%{REQUEST_URI} [R=301,L]' >>  ~/public_html/.htaccess"
+${SSH_CMD} "mkdir -p ~/public_html/_"
+${SSH_CMD} "echo '<FilesMatch "\.phar">' >  ~/public_html/_/.htaccess"
+${SSH_CMD} "echo '   php_flag engine off' >>  ~/public_html/_/.htaccess"
+${SSH_CMD} "echo '   ForceType application/octet-stream' >>  ~/public_html/_/.htaccess"
+${SSH_CMD} "echo '   Header set Content-Disposition attachment' >>  ~/public_html/_/.htaccess"
+${SSH_CMD} "echo '</FilesMatch>' >>  ~/public_html/_/.htaccess"
+rsync -az --exclude "_" -e "ssh -o StrictHostKeyChecking=no -K" ./output/ ${KRB_USER}@${SERVER}:~/public_html/
\ No newline at end of file
diff --git a/.docker/scripts/node/command.dev.sh b/.docker/scripts/node/command.dev.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7ec44b6356a75ee6309a5e81efd2e21b779d50f6
--- /dev/null
+++ b/.docker/scripts/node/command.dev.sh
@@ -0,0 +1,2 @@
+cd /srv/blog/content/slides
+yarn
\ No newline at end of file
diff --git a/.docker/scripts/python/command.dev.sh b/.docker/scripts/python/command.dev.sh
new file mode 100755
index 0000000000000000000000000000000000000000..19b564fff0f09d58f865dbb8b9036feeb7cfbe78
--- /dev/null
+++ b/.docker/scripts/python/command.dev.sh
@@ -0,0 +1,9 @@
+apt-get update 
+apt-get -y --no-install-recommends install python3 python3-pip #python3-gettext
+cd /srv/blog
+pip install --user -r requirements.txt
+sed -i 's/\$port &/\$port/g' ./develop_server.sh
+chmod +x develop_server.sh
+export PATH=/root/.local/bin:$PATH
+export PY='/usr/bin/python3'
+./develop_server.sh start 8000
\ No newline at end of file
diff --git a/.env b/.env
index 7a6eab454d4810c76aa31d414e0f766dfafc1450..6764631349e5119e35e5a610534b9341851bced3 100644
--- a/.env
+++ b/.env
@@ -1,3 +1,5 @@
 REGISTRY_URL=docker.isima.fr
 NAMESPACE=docker.isima.fr/vimazeno
-APP_NAME=pelican_perso
\ No newline at end of file
+APP_NAME=pelican_perso
+KRB_USER=vimazeno
+SERVER=perso.local.isima.fr
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 519347d67c65427ead7d547c3b87b4462b7922f8..0000000000000000000000000000000000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "plugins/math_render"]
-	path = plugins/math_render
-	url = https://github.com/barrysteyn/pelican_plugin-render_math.git
diff --git a/Makefile b/Makefile
index 533e07a82a16c3c9e3936522db188fe9594b4ac8..767489b3a6419aaa547d3f20351023ec9c2f2381 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ DOCKER_COMP   := docker-compose
 .DEFAULT_GOAL := help
 
 # Docker containers
-PELICAN_CONT  := $(DOCKER_COMP) exec pelican
+KERBEROS_CONT  := $(DOCKER_COMP) run kerberos
 
 include .env
 
@@ -34,7 +34,10 @@ push: ## Push build docker compose images
 .PHONY: push
 
 up: ## Make required containers up
-	@$(DOCKER_COMP) up --remove-orphans
+	@$(DOCKER_COMP) up --remove-orphans node
+#	@$(DOCKER_COMP) run dockerize -timeout 180s -wait-retry-interval 3s \
+#			-wait file:///tmp/content/node_modules/.yarn-integrity ;
+	@$(DOCKER_COMP) up --remove-orphans python
 .PHONY: up
 
 down: ## Make required containers down
@@ -54,9 +57,9 @@ errors: ## Show live container errors.
 	@$(DOCKER_COMP) logs | grep error
 .PHONY: errors
 
-pelican: ## Open bash on php container
-	@$(PELICAN_CONT) bash
-.PHONY: pelican
+publish: ## Open bash on php container
+	@$(KERBEROS_CONT) bash .docker/scripts/kerberos/command.dev.sh
+.PHONY: publish
 
 clean: ## Remove node and php folders and files
 	@for volume in ${VOLUMES} ; do \
diff --git a/develop_server.sh b/develop_server.sh
index 2661df30b1982f4b50866a89593017bf456371f9..53cb99f5c029ae98222425ae6738832d76e5e8a4 100755
--- a/develop_server.sh
+++ b/develop_server.sh
@@ -67,7 +67,7 @@ function start_up(){
   pelican_pid=$!
   echo $pelican_pid > $PELICAN_PID
   mkdir -p $OUTPUTDIR && cd $OUTPUTDIR
-  $PY -m pelican.server $port &
+  $PY -m pelican.server $port
   srv_pid=$!
   echo $srv_pid > $SRV_PID
   cd $BASEDIR
diff --git a/docker-compose.yml b/docker-compose.yml
index c5807a357fffbde4bfaf9ce8b924ae2df9330ffd..189f9cb88aed8699aae784560e0638aa6bab0a68 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,15 +2,41 @@ version: '3.5'
 
 services:
 
-  pelican:
-    image: ${NAMESPACE}/${APP_NAME}:latest
+  node:
+    image: node:latest
+    container_name: blog_node_dev
+    environment:
+      TZ: ${TIMEZONE:-Europe/Paris}
+    working_dir: /srv/blog
+    volumes:
+      - .:/srv/blog
+    command: bash /srv/blog/.docker/scripts/node/command.dev.sh
+
+  python:
+    image: debian:stable
+    container_name: blog_python_dev
+    environment:
+      TZ: ${TIMEZONE:-Europe/Paris}
+    working_dir: /srv/blog
+    volumes:
+      - .:/srv/blog
+    ports:
+      - "8000:8000"
+    command: bash /srv/blog/.docker/scripts/python/command.dev.sh
+
+  kerberos:
+    image: ${NAMESPACE}/${APP_NAME}_kerberos_dev:latest
     build:
       context: .
-      dockerfile: .docker/build/pelican/Dockerfile
-    container_name: pelican
+      dockerfile: .docker/build/kerberos/Dockerfile
+    container_name: blog_kerberos_dev
     environment:
       TZ: ${TIMEZONE:-Europe/Paris}
-    # volumes:
-    #   - .:/srv/pelican
-    ports:
-      - "8000:8000"
\ No newline at end of file
+    volumes:
+      - .:/srv/blog
+    command: bash /srv/blog/.docker/scripts/kerberos/command.dev.sh
+
+  dockerize:
+    image: jwilder/dockerize
+    volumes:
+      - .:/tmp
\ No newline at end of file
diff --git a/plugins/i18n_subsites/README.rst b/plugins/i18n_subsites/README.rst
deleted file mode 100644
index 12e113d3a747921e979461bf170e541078692eef..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/README.rst
+++ /dev/null
@@ -1,156 +0,0 @@
-=======================
- I18N Sub-sites Plugin
-=======================
-
-This plugin extends the translations functionality by creating
-internationalized sub-sites for the default site.
-
-This plugin is designed for Pelican 3.4 and later.
-
-What it does
-============
-
-1. When the content of the main site is being generated, the settings
-   are saved and the generation stops when content is ready to be
-   written. While reading source files and generating content objects,
-   the output queue is modified in certain ways:
-
-  - translations that will appear as native in a different (sub-)site
-    will be removed
-  - untranslated articles will be transformed to drafts if
-    ``I18N_UNTRANSLATED_ARTICLES`` is ``'hide'`` (default), removed if
-    ``'remove'`` or kept as they are if ``'keep'``.
-  - untranslated pages will be transformed into hidden pages if
-    ``I18N_UNTRANSLATED_PAGES`` is ``'hide'`` (default), removed if
-    ``'remove'`` or kept as they are if ``'keep'``.''
-  - additional content manipulation similar to articles and pages can
-    be specified for custom generators in the ``I18N_GENERATOR_INFO``
-    setting.
-
-2. For each language specified in the ``I18N_SUBSITES`` dictionary the
-   settings overrides are applied to the settings from the main site
-   and a new sub-site is generated in the same way as with the main
-   site until content is ready to be written.
-3. When all (sub-)sites are waiting for content writing, all removed
-   contents, translations and static files are interlinked across the
-   (sub-)sites.
-4. Finally, all the output is written.
-
-Setting it up
-=============
-
-For each extra used language code, a language-specific settings overrides
-dictionary must be given (but can be empty) in the ``I18N_SUBSITES`` dictionary
-
-.. code-block:: python
-
-    PLUGINS = ['i18n_subsites', ...]
-
-    # mapping: language_code -> settings_overrides_dict
-    I18N_SUBSITES = {
-        'cz': {
-	    'SITENAME': 'Hezkej blog',
-	    }
-	}
-
-Default and special overrides
------------------------------
-The settings overrides may contain arbitrary settings, however, there
-are some that are handled in a special way:
-
-``SITEURL``
-  Any overrides to this setting should ensure that there is some level
-  of hierarchy between all (sub-)sites, because Pelican makes all URLs
-  relative to ``SITEURL`` and the plugin can only cross-link between
-  the sites using this hierarchy. For instance, with the main site
-  ``http://example.com`` a sub-site ``http://example.com/de`` will
-  work, but ``http://de.example.com`` will not. If not overridden, the
-  language code (the language identifier used in the ``lang``
-  metadata) is appended to the main ``SITEURL`` for each sub-site.
-``OUTPUT_PATH``, ``CACHE_PATH``
-  If not overridden, the language code is appended as with ``SITEURL``.
-  Separate cache paths are required as parser results depend on the locale.
-``STATIC_PATHS``, ``THEME_STATIC_PATHS``
-  If not overridden, they are set to ``[]`` and all links to static
-  files are cross-linked to the main site.
-``THEME``, ``THEME_STATIC_DIR``
-  If overridden, the logic with ``THEME_STATIC_PATHS`` does not apply.
-``DEFAULT_LANG``
-  This should not be overridden as the plugin changes it to the
-  language code of each sub-site to change what is perceived as translations.
-
-Localizing templates
---------------------
-
-Most importantly, this plugin can use localized templates for each
-sub-site. There are two approaches to having the templates localized:
-
-- You can set a different ``THEME`` override for each language in
-  ``I18N_SUBSITES``, e.g. by making a copy of a theme ``my_theme`` to
-  ``my_theme_lang`` and then editing the templates in the new
-  localized theme. This approach means you don't have to deal with
-  gettext ``*.po`` files, but it is harder to maintain over time.
-- You use only one theme and localize the templates using the
-  `jinja2.ext.i18n Jinja2 extension
-  <http://jinja.pocoo.org/docs/templates/#i18n>`_. For a kickstart
-  read this `guide <./localizing_using_jinja2.rst>`_.
-
-Additional context variables
-............................
-
-It may be convenient to add language buttons to your theme in addition
-to the translation links of articles and pages. These buttons could,
-for example, point to the ``SITEURL`` of each (sub-)site. For this
-reason the plugin adds these variables to the template context:
-
-``main_lang``
-  The language of the main site — the original ``DEFAULT_LANG``
-``main_siteurl``
-  The ``SITEURL`` of the main site — the original ``SITEURL``
-``lang_siteurls``
-  An ordered dictionary, mapping all used languages to their
-  ``SITEURL``. The ``main_lang`` is the first key with ``main_siteurl``
-  as the value. This dictionary is useful for implementing global
-  language buttons that show the language of the currently viewed
-  (sub-)site too.
-``extra_siteurls``
-  An ordered dictionary, subset of ``lang_siteurls``, the current
-  ``DEFAULT_LANG`` of the rendered (sub-)site is not included, so for
-  each (sub-)site ``set(extra_siteurls) == set(lang_siteurls) -
-  set([DEFAULT_LANG])``. This dictionary is useful for implementing
-  global language buttons that do not show the current language.
-``relpath_to_site``
-  A function that returns a relative path from the first (sub-)site to
-  the second (sub-)site where the (sub-)sites are identified by the
-  language codes given as two arguments.
-
-If you don't like the default ordering of the ordered dictionaries,
-use a Jinja2 filter to alter the ordering.
-
-All the siteurls above are always absolute even in the case of
-``RELATIVE_URLS == True`` (it would be to complicated to replicate the
-Pelican internals for local siteurls), so you may rather use something
-like ``{{ SITEURL }}/{{ relpath_to_site(DEFAULT_LANG, main_lang }}``
-to link to the main site.
-
-This short `howto <./implementing_language_buttons.rst>`_ shows two
-example implementations of language buttons.
-
-Usage notes
-===========
-- It is **mandatory** to specify ``lang`` metadata for each article
-  and page as ``DEFAULT_LANG`` is later changed for each sub-site, so
-  content without ``lang`` metadata would be rendered in every
-  (sub-)site.
-- As with the original translations functionality, ``slug`` metadata
-  is used to group translations. It is therefore often convenient to
-  compensate for this by overriding the content URL (which defaults to
-  slug) using the ``url`` and ``save_as`` metadata. You could also
-  give articles e.g. ``name`` metadata and use it in ``ARTICLE_URL =
-  '{name}.html'``.
-
-Development
-===========
-
-- A demo and a test site is in the ``gh-pages`` branch and can be seen
-  at http://smartass101.github.io/pelican-plugins/
diff --git a/plugins/i18n_subsites/__init__.py b/plugins/i18n_subsites/__init__.py
deleted file mode 100644
index 7dfbde09e42950bbd35d7f575da35cede36fd141..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .i18n_subsites import *
diff --git a/plugins/i18n_subsites/__init__.pyc b/plugins/i18n_subsites/__init__.pyc
deleted file mode 100644
index 4e4d242fd150b546379306b3c3468e9b0b5254c4..0000000000000000000000000000000000000000
Binary files a/plugins/i18n_subsites/__init__.pyc and /dev/null differ
diff --git a/plugins/i18n_subsites/i18n_subsites.py b/plugins/i18n_subsites/i18n_subsites.py
deleted file mode 100644
index 388e758b2c592b8f79da651d277c6302e2ec8ec0..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/i18n_subsites.py
+++ /dev/null
@@ -1,450 +0,0 @@
-"""i18n_subsites plugin creates i18n-ized subsites of the default site
-
-This plugin is designed for Pelican 3.4 and later
-"""
-
-
-import os
-import six
-import logging
-import posixpath
-
-from copy import copy
-from itertools import chain
-from operator import attrgetter
-from collections import OrderedDict
-from contextlib import contextmanager
-from six.moves.urllib.parse import urlparse
-
-import gettext
-import locale
-
-from pelican import signals
-from pelican.generators import ArticlesGenerator, PagesGenerator
-from pelican.settings import configure_settings
-from pelican.contents import Draft
-
-
-# Global vars
-_MAIN_SETTINGS = None     # settings dict of the main Pelican instance
-_MAIN_LANG = None         # lang of the main Pelican instance
-_MAIN_SITEURL = None      # siteurl of the main Pelican instance
-_MAIN_STATIC_FILES = None # list of Static instances the main Pelican instance
-_SUBSITE_QUEUE = {}   # map: lang -> settings overrides
-_SITE_DB = OrderedDict()           # OrderedDict: lang -> siteurl
-_SITES_RELPATH_DB = {}       # map: (lang, base_lang) -> relpath
-# map: generator -> list of removed contents that need interlinking
-_GENERATOR_DB = {}
-_NATIVE_CONTENT_URL_DB = {} # map: source_path -> content in its native lang
-_LOGGER = logging.getLogger(__name__)
-
-
-@contextmanager
-def temporary_locale(temp_locale=None):
-    '''Enable code to run in a context with a temporary locale
-
-    Resets the locale back when exiting context.
-    Can set a temporary locale if provided
-    '''
-    orig_locale = locale.setlocale(locale.LC_ALL)
-    if temp_locale is not None:
-        locale.setlocale(locale.LC_ALL, temp_locale)
-    yield
-    locale.setlocale(locale.LC_ALL, orig_locale)
-
-
-def initialize_dbs(settings):
-    '''Initialize internal DBs using the Pelican settings dict
-
-    This clears the DBs for e.g. autoreload mode to work
-    '''
-    global _MAIN_SETTINGS, _MAIN_SITEURL, _MAIN_LANG, _SUBSITE_QUEUE
-    _MAIN_SETTINGS = settings
-    _MAIN_LANG = settings['DEFAULT_LANG']
-    _MAIN_SITEURL = settings['SITEURL']
-    _SUBSITE_QUEUE = settings.get('I18N_SUBSITES', {}).copy()
-    prepare_site_db_and_overrides()
-    # clear databases in case of autoreload mode
-    _SITES_RELPATH_DB.clear()
-    _NATIVE_CONTENT_URL_DB.clear()
-    _GENERATOR_DB.clear()
-
-
-def prepare_site_db_and_overrides():
-    '''Prepare overrides and create _SITE_DB
-
-    _SITE_DB.keys() need to be ready for filter_translations
-    '''
-    _SITE_DB.clear()
-    _SITE_DB[_MAIN_LANG] = _MAIN_SITEURL
-    # make sure it works for both root-relative and absolute
-    main_siteurl = '/' if _MAIN_SITEURL == '' else _MAIN_SITEURL
-    for lang, overrides in _SUBSITE_QUEUE.items():
-        if 'SITEURL' not in overrides:
-            overrides['SITEURL'] = posixpath.join(main_siteurl, lang)
-        _SITE_DB[lang] = overrides['SITEURL']
-        # default subsite hierarchy
-        if 'OUTPUT_PATH' not in overrides:
-            overrides['OUTPUT_PATH'] = os.path.join(
-                _MAIN_SETTINGS['OUTPUT_PATH'], lang)
-        if 'CACHE_PATH' not in overrides:
-            overrides['CACHE_PATH'] = os.path.join(
-                _MAIN_SETTINGS['CACHE_PATH'], lang)
-        if 'STATIC_PATHS' not in overrides:
-            overrides['STATIC_PATHS'] = []
-        if ('THEME' not in overrides and 'THEME_STATIC_DIR' not in overrides and
-                'THEME_STATIC_PATHS' not in overrides):
-            relpath = relpath_to_site(lang, _MAIN_LANG)
-            overrides['THEME_STATIC_DIR'] = posixpath.join(
-                relpath, _MAIN_SETTINGS['THEME_STATIC_DIR'])
-            overrides['THEME_STATIC_PATHS'] = []
-        # to change what is perceived as translations
-        overrides['DEFAULT_LANG'] = lang
-
-
-def subscribe_filter_to_signals(settings):
-    '''Subscribe content filter to requested signals'''
-    for sig in settings.get('I18N_FILTER_SIGNALS', []):
-        sig.connect(filter_contents_translations)
-
-
-def initialize_plugin(pelican_obj):
-    '''Initialize plugin variables and Pelican settings'''
-    if _MAIN_SETTINGS is None:
-        initialize_dbs(pelican_obj.settings)
-        subscribe_filter_to_signals(pelican_obj.settings)
-
-
-def get_site_path(url):
-    '''Get the path component of an url, excludes siteurl
-
-    also normalizes '' to '/' for relpath to work,
-    otherwise it could be interpreted as a relative filesystem path
-    '''
-    path = urlparse(url).path
-    if path == '':
-        path = '/'
-    return path
-
-
-def relpath_to_site(lang, target_lang):
-    '''Get relative path from siteurl of lang to siteurl of base_lang
-
-    the output is cached in _SITES_RELPATH_DB
-    '''
-    path = _SITES_RELPATH_DB.get((lang, target_lang), None)
-    if path is None:
-        siteurl = _SITE_DB.get(lang, _MAIN_SITEURL)
-        target_siteurl = _SITE_DB.get(target_lang, _MAIN_SITEURL)
-        path = posixpath.relpath(get_site_path(target_siteurl),
-                                 get_site_path(siteurl))
-        _SITES_RELPATH_DB[(lang, target_lang)] = path
-    return path
-
-
-def save_generator(generator):
-    '''Save the generator for later use
-
-    initialize the removed content list
-    '''
-    _GENERATOR_DB[generator] = []
-
-
-def article2draft(article):
-    '''Transform an Article to Draft'''
-    draft = Draft(article._content, article.metadata, article.settings,
-                  article.source_path, article._context)
-    draft.status = 'draft'
-    return draft
-
-
-def page2hidden_page(page):
-    '''Transform a Page to a hidden Page'''
-    page.status = 'hidden'
-    return page
-
-
-class GeneratorInspector(object):
-    '''Inspector of generator instances'''
-
-    generators_info = {
-        ArticlesGenerator: {
-            'translations_lists': ['translations', 'drafts_translations'],
-            'contents_lists': [('articles', 'drafts')],
-            'hiding_func': article2draft,
-            'policy': 'I18N_UNTRANSLATED_ARTICLES',
-        },
-        PagesGenerator: {
-            'translations_lists': ['translations', 'hidden_translations'],
-            'contents_lists': [('pages', 'hidden_pages')],
-            'hiding_func': page2hidden_page,
-            'policy': 'I18N_UNTRANSLATED_PAGES',
-        },
-    }
-
-    def __init__(self, generator):
-        '''Identify the best known class of the generator instance
-
-        The class '''
-        self.generator = generator
-        self.generators_info.update(generator.settings.get(
-            'I18N_GENERATORS_INFO', {}))
-        for cls in generator.__class__.__mro__:
-            if cls in self.generators_info:
-                self.info = self.generators_info[cls]
-                break
-        else:
-            self.info = {}
-
-    def translations_lists(self):
-        '''Iterator over lists of content translations'''
-        return (getattr(self.generator, name) for name in
-                self.info.get('translations_lists', []))
-
-    def contents_list_pairs(self):
-        '''Iterator over pairs of normal and hidden contents'''
-        return (tuple(getattr(self.generator, name) for name in names)
-                for names in self.info.get('contents_lists', []))
-
-    def hiding_function(self):
-        '''Function for transforming content to a hidden version'''
-        hiding_func = self.info.get('hiding_func', lambda x: x)
-        return hiding_func
-
-    def untranslated_policy(self, default):
-        '''Get the policy for untranslated content'''
-        return self.generator.settings.get(self.info.get('policy', None),
-                                           default)
-
-    def all_contents(self):
-        '''Iterator over all contents'''
-        translations_iterator = chain(*self.translations_lists())
-        return chain(translations_iterator,
-                     *(pair[i] for pair in self.contents_list_pairs()
-                       for i in (0, 1)))
-
-
-def filter_contents_translations(generator):
-    '''Filter the content and translations lists of a generator
-
-    Filters out
-        1) translations which will be generated in a different site
-        2) content that is not in the language of the currently
-        generated site but in that of a different site, content in a
-        language which has no site is generated always. The filtering
-        method bay be modified by the respective untranslated policy
-    '''
-    inspector = GeneratorInspector(generator)
-    current_lang = generator.settings['DEFAULT_LANG']
-    langs_with_sites = _SITE_DB.keys()
-    removed_contents = _GENERATOR_DB[generator]
-
-    for translations in inspector.translations_lists():
-        for translation in translations[:]:    # copy to be able to remove
-            if translation.lang in langs_with_sites:
-                translations.remove(translation)
-                removed_contents.append(translation)
-
-    hiding_func = inspector.hiding_function()
-    untrans_policy = inspector.untranslated_policy(default='hide')
-    for (contents, other_contents) in inspector.contents_list_pairs():
-        for content in other_contents: # save any hidden native content first
-            if content.lang == current_lang: # in native lang
-                # save the native URL attr formatted in the current locale
-                _NATIVE_CONTENT_URL_DB[content.source_path] = content.url
-        for content in contents[:]:        # copy for removing in loop
-            if content.lang == current_lang: # in native lang
-                # save the native URL attr formatted in the current locale
-                _NATIVE_CONTENT_URL_DB[content.source_path] = content.url
-            elif content.lang in langs_with_sites and untrans_policy != 'keep':
-                contents.remove(content)
-                if untrans_policy == 'hide':
-                    other_contents.append(hiding_func(content))
-                elif untrans_policy == 'remove':
-                    removed_contents.append(content)
-
-
-def install_templates_translations(generator):
-    '''Install gettext translations in the jinja2.Environment
-
-    Only if the 'jinja2.ext.i18n' jinja2 extension is enabled
-    the translations for the current DEFAULT_LANG are installed.
-    '''
-    if 'JINJA_ENVIRONMENT' in generator.settings: # pelican 3.7+
-        jinja_extensions = generator.settings['JINJA_ENVIRONMENT'].get(
-            'extensions', [])
-    else:
-        jinja_extensions = generator.settings['JINJA_EXTENSIONS']
-
-    if 'jinja2.ext.i18n' in jinja_extensions:
-        domain = generator.settings.get('I18N_GETTEXT_DOMAIN', 'messages')
-        localedir = generator.settings.get('I18N_GETTEXT_LOCALEDIR')
-        if localedir is None:
-            localedir = os.path.join(generator.theme, 'translations')
-        current_lang = generator.settings['DEFAULT_LANG']
-        if current_lang == generator.settings.get('I18N_TEMPLATES_LANG',
-                                                  _MAIN_LANG):
-            translations = gettext.NullTranslations()
-        else:
-            langs = [current_lang]
-            try:
-                translations = gettext.translation(domain, localedir, langs)
-            except (IOError, OSError):
-                _LOGGER.error((
-                    "Cannot find translations for language '{}' in '{}' with "
-                    "domain '{}'. Installing NullTranslations.").format(
-                        langs[0], localedir, domain))
-                translations = gettext.NullTranslations()
-        newstyle = generator.settings.get('I18N_GETTEXT_NEWSTYLE', True)
-        generator.env.install_gettext_translations(translations, newstyle)
-
-
-def add_variables_to_context(generator):
-    '''Adds useful iterable variables to template context'''
-    context = generator.context             # minimize attr lookup
-    context['relpath_to_site'] = relpath_to_site
-    context['main_siteurl'] = _MAIN_SITEURL
-    context['main_lang'] = _MAIN_LANG
-    context['lang_siteurls'] = _SITE_DB
-    current_lang = generator.settings['DEFAULT_LANG']
-    extra_siteurls = _SITE_DB.copy()
-    extra_siteurls.pop(current_lang)
-    context['extra_siteurls'] = extra_siteurls
-
-
-def interlink_translations(content):
-    '''Link content to translations in their main language
-
-    so the URL (including localized month names) of the different subsites
-    will be honored
-    '''
-    lang = content.lang
-    # sort translations by lang
-    content.translations.sort(key=attrgetter('lang'))
-    for translation in content.translations:
-        relpath = relpath_to_site(lang, translation.lang)
-        url = _NATIVE_CONTENT_URL_DB[translation.source_path]
-        translation.override_url = posixpath.join(relpath, url)
-
-
-def interlink_translated_content(generator):
-    '''Make translations link to the native locations
-
-    for generators that may contain translated content
-    '''
-    inspector = GeneratorInspector(generator)
-    for content in inspector.all_contents():
-        interlink_translations(content)
-
-
-def interlink_removed_content(generator):
-    '''For all contents removed from generation queue update interlinks
-
-    link to the native location
-    '''
-    current_lang = generator.settings['DEFAULT_LANG']
-    for content in _GENERATOR_DB[generator]:
-        url = _NATIVE_CONTENT_URL_DB[content.source_path]
-        relpath = relpath_to_site(current_lang, content.lang)
-        content.override_url = posixpath.join(relpath, url)
-
-
-def interlink_static_files(generator):
-    '''Add links to static files in the main site if necessary'''
-    if generator.settings['STATIC_PATHS'] != []:
-        return                               # customized STATIC_PATHS
-    filenames = generator.context['filenames'] # minimize attr lookup
-    relpath = relpath_to_site(generator.settings['DEFAULT_LANG'], _MAIN_LANG)
-    for staticfile in _MAIN_STATIC_FILES:
-        if staticfile.get_relative_source_path() not in filenames:
-            staticfile = copy(staticfile) # prevent override in main site
-            staticfile.override_url = posixpath.join(relpath, staticfile.url)
-            generator.add_source_path(staticfile)
-
-
-def save_main_static_files(static_generator):
-    '''Save the static files generated for the main site'''
-    global _MAIN_STATIC_FILES
-    # test just for current lang as settings change in autoreload mode
-    if static_generator.settings['DEFAULT_LANG'] == _MAIN_LANG:
-        _MAIN_STATIC_FILES = static_generator.staticfiles
-
-
-def update_generators():
-    '''Update the context of all generators
-
-    Ads useful variables and translations into the template context
-    and interlink translations
-    '''
-    for generator in _GENERATOR_DB.keys():
-        install_templates_translations(generator)
-        add_variables_to_context(generator)
-        interlink_static_files(generator)
-        interlink_removed_content(generator)
-        interlink_translated_content(generator)
-
-
-def get_pelican_cls(settings):
-    '''Get the Pelican class requested in settings'''
-    cls = settings['PELICAN_CLASS']
-    if isinstance(cls, six.string_types):
-        module, cls_name = cls.rsplit('.', 1)
-        module = __import__(module)
-        cls = getattr(module, cls_name)
-    return cls
-
-
-def create_next_subsite(pelican_obj):
-    '''Create the next subsite using the lang-specific config
-
-    If there are no more subsites in the generation queue, update all
-    the generators (interlink translations and removed content, add
-    variables and translations to template context). Otherwise get the
-    language and overrides for next the subsite in the queue and apply
-    overrides.  Then generate the subsite using a PELICAN_CLASS
-    instance and its run method. Finally, restore the previous locale.
-    '''
-    global _MAIN_SETTINGS
-    if len(_SUBSITE_QUEUE) == 0:
-        _LOGGER.debug(
-            'i18n: Updating cross-site links and context of all generators.')
-        update_generators()
-        _MAIN_SETTINGS = None             # to initialize next time
-    else:
-        with temporary_locale():
-            settings = _MAIN_SETTINGS.copy()
-            lang, overrides = _SUBSITE_QUEUE.popitem()
-            settings.update(overrides)
-            settings = configure_settings(settings)      # to set LOCALE, etc.
-            cls = get_pelican_cls(settings)
-
-            new_pelican_obj = cls(settings)
-            _LOGGER.debug(("Generating i18n subsite for language '{}' "
-                           "using class {}").format(lang, cls))
-            new_pelican_obj.run()
-
-
-# map: signal name -> function name
-_SIGNAL_HANDLERS_DB = {
-    'get_generators': initialize_plugin,
-    'article_generator_pretaxonomy': filter_contents_translations,
-    'page_generator_finalized': filter_contents_translations,
-    'get_writer': create_next_subsite,
-    'static_generator_finalized': save_main_static_files,
-    'generator_init': save_generator,
-}
-
-
-def register():
-    '''Register the plugin only if required signals are available'''
-    for sig_name in _SIGNAL_HANDLERS_DB.keys():
-        if not hasattr(signals, sig_name):
-            _LOGGER.error((
-                'The i18n_subsites plugin requires the {} '
-                'signal available for sure in Pelican 3.4.0 and later, '
-                'plugin will not be used.').format(sig_name))
-            return
-
-    for sig_name, handler in _SIGNAL_HANDLERS_DB.items():
-        sig = getattr(signals, sig_name)
-        sig.connect(handler)
diff --git a/plugins/i18n_subsites/i18n_subsites.pyc b/plugins/i18n_subsites/i18n_subsites.pyc
deleted file mode 100644
index 0d52ca50ba28f189b25776769e583740828da146..0000000000000000000000000000000000000000
Binary files a/plugins/i18n_subsites/i18n_subsites.pyc and /dev/null differ
diff --git a/plugins/i18n_subsites/implementing_language_buttons.rst b/plugins/i18n_subsites/implementing_language_buttons.rst
deleted file mode 100644
index 43f8bb3da0694e573159b2caf7d537c664c404e9..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/implementing_language_buttons.rst
+++ /dev/null
@@ -1,128 +0,0 @@
------------------------------
-Implementing language buttons
------------------------------
-
-Each article with translations has translations links, but that's the
-only way to switch between language subsites.
-
-For this reason it is convenient to add language buttons to the top
-menu bar to make it simple to switch between the language subsites on
-all pages.
-
-Example designs
----------------
-
-Language buttons showing other available languages
-..................................................
-
-The ``extra_siteurls`` dictionary is a mapping of all other (not the
-``DEFAULT_LANG`` of the current (sub-)site) languages to the
-``SITEURL`` of the respective (sub-)sites
-
-.. code-block:: jinja
-
-   <!-- SNIP -->
-   <nav><ul>
-   {% if extra_siteurls %}
-   {% for lang, url in extra_siteurls.items() %}
-   <li><a href="{{ url }}/">{{ lang }}</a></li>
-   {% endfor %}
-   <!-- separator -->
-   <li style="background-color: white; padding: 5px;">&nbsp</li>
-   {% endif %}
-   {% for title, link in MENUITEMS %}
-   <!-- SNIP -->
-
-Notice the slash ``/`` after ``{{ url }}``, this makes sure it works
-with local development when ``SITEURL == ''``.
-
-Language buttons showing all available languages, current is active
-...................................................................
-
-The ``extra_siteurls`` dictionary is a mapping of all languages to the
-``SITEURL`` of the respective (sub-)sites. This template sets the
-language of the current (sub-)site as active.
-
-.. code-block:: jinja
-
-   <!-- SNIP -->
-   <nav><ul>
-   {% if lang_siteurls %}
-   {% for lang, url in lang_siteurls.items() %}
-   <li{% if lang == DEFAULT_LANG %} class="active"{% endif %}><a href="{{ url }}/">{{ lang }}</a></li>
-   {% endfor %}
-   <!-- separator -->
-   <li style="background-color: white; padding: 5px;">&nbsp</li>
-   {% endif %}
-   {% for title, link in MENUITEMS %}
-   <!-- SNIP -->
-
-
-Tips and tricks
----------------
-
-Showing more than language codes
-................................
-
-If you want the language buttons to show e.g. the names of the
-languages or flags [#flags]_, not just the language codes, you can use
-a jinja filter to translate the language codes
-
-
-.. code-block:: python
-
-   languages_lookup = {
-		'en': 'English',
-		'cz': 'Čeština',
-		}
-
-   def lookup_lang_name(lang_code):
-       return languages_lookup[lang_code]
-
-   JINJA_FILTERS = {
-		...
-		'lookup_lang_name': lookup_lang_name,
-		}
-
-And then the link content becomes
-
-.. code-block:: jinja
-
-   <!-- SNIP -->
-   {% for lang, siteurl in lang_siteurls.items() %}
-   <li{% if lang == DEFAULT_LANG %} class="active"{% endif %}><a href="{{ siteurl }}/">{{ lang | lookup_lang_name }}</a></li>
-   {% endfor %}
-   <!-- SNIP -->
-
-
-Changing the order of language buttons
-......................................
-
-Because ``lang_siteurls`` and ``extra_siteurls`` are instances of
-``OrderedDict`` with ``main_lang`` being always the first key, you can
-change the order through a jinja filter.
-
-.. code-block:: python
-
-   def my_ordered_items(ordered_dict):
-       items = list(ordered_dict.items())
-       # swap first and last using tuple unpacking
-       items[0], items[-1] = items[-1], items[0]
-       return items
-
-   JINJA_FILTERS = {
-		...
-		'my_ordered_items': my_ordered_items,
-		}
-
-And then the ``for`` loop line in the template becomes
-
-.. code-block:: jinja
-
-   <!-- SNIP -->
-   {% for lang, siteurl in lang_siteurls | my_ordered_items %}
-   <!-- SNIP -->
-
-
-.. [#flags] Although it may look nice, `w3 discourages it
-            <http://www.w3.org/TR/i18n-html-tech-lang/#ri20040808.173208643>`_.
diff --git a/plugins/i18n_subsites/localizing_using_jinja2.rst b/plugins/i18n_subsites/localizing_using_jinja2.rst
deleted file mode 100644
index 6ffe65413593b097b3568bc0b09f37f3f5ac348e..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/localizing_using_jinja2.rst
+++ /dev/null
@@ -1,200 +0,0 @@
------------------------------
-Localizing themes with Jinja2
------------------------------
-
-1. Localize templates
----------------------
-
-To enable the |ext| extension in your templates, you must add it to
-``JINJA_EXTENSIONS`` in your Pelican configuration
-
-.. code-block:: python
-
-  JINJA_EXTENSIONS = ['jinja2.ext.i18n', ...]
-
-Then follow the `Jinja2 templating documentation for the I18N plugin
-<http://jinja.pocoo.org/docs/templates/#i18n>`_ to make your templates
-localizable. This usually means surrounding strings with the ``{%
-trans %}`` directive or using ``gettext()`` in expressions
-
-.. code-block:: jinja
-
-    {% trans %}translatable content{% endtrans %}
-    {{ gettext('a translatable string') }}
-
-For pluralization support, etc. consult the documentation.
-
-To enable `newstyle gettext calls
-<http://jinja.pocoo.org/docs/extensions/#newstyle-gettext>`_ the
-``I18N_GETTEXT_NEWSTYLE`` config variable must be set to ``True``
-(default).
-
-.. |ext| replace:: ``jinja2.ext.i18n``
-
-2. Specify translations location
---------------------------------
-
-The |ext| extension uses the `Python gettext library
-<http://docs.python.org/library/gettext.html>`_ for translating
-strings.
-
-In your Pelican config you can give the path in which to look for
-translations in the ``I18N_GETTEXT_LOCALEDIR`` variable. If not given,
-it is assumed to be the ``translations`` subfolder in the top folder
-of the theme specified by ``THEME``.
-
-The domain of the translations (the name of each translation file is
-``domain.mo``) is controlled by the ``I18N_GETTEXT_DOMAIN`` config
-variable (defaults to ``messages``).
-
-Example
-.......
-
-With the following in your Pelican settings file
-
-.. code-block:: python
-
-  I18N_GETTEXT_LOCALEDIR = 'some/path/'
-  I18N_GETTEXT_DOMAIN = 'my_domain'
-
-the translation for language 'cz' will be expected to be in
-``some/path/cz/LC_MESSAGES/my_domain.mo``
-
-
-3. Extract translatable strings and translate them
---------------------------------------------------
-
-There are many ways to extract translatable strings and create
-``gettext`` compatible translations. You can create the ``*.po`` and
-``*.mo`` message catalog files yourself, or you can use some helper
-tool as described in `the Python gettext library tutorial
-<http://docs.python.org/library/gettext.html#internationalizing-your-programs-and-modules>`_.
-
-You of course don't need to provide a translation for the language in
-which the templates are written which is assumed to be the original
-``DEFAULT_LANG``. This can be overridden in the
-``I18N_TEMPLATES_LANG`` variable.
-
-Recommended tool: babel
-.......................
-
-`Babel <http://babel.pocoo.org/>`_ makes it easy to extract
-translatable strings from the localized Jinja2 templates and assists
-with creating translations as documented in this `Jinja2-Babel
-tutorial
-<http://pythonhosted.org/Flask-Babel/#translating-applications>`_
-[#flask]_ on which the following is based.
-
-1. Add babel mapping
-~~~~~~~~~~~~~~~~~~~~
-
-Let's assume that you are localizing a theme in ``themes/my_theme/``
-and that you use the default settings, i.e. the default domain
-``messages`` and will put the translations in the ``translations``
-subdirectory of the theme directory as
-``themes/my_theme/translations/``.
-
-It is up to you where to store babel mappings and translation files
-templates (``*.pot``), but a convenient place is to put them in
-``themes/my_theme/`` and work in that directory. From now on let's
-assume that it will be our current working directory (CWD).
-
-To tell babel to extract translatable strings from the templates
-create a mapping file ``babel.cfg`` with the following line
-
-.. code-block:: cfg
-
-    [jinja2: templates/**.html]
-
-
-2. Extract translatable strings from templates
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Run the following command to create a ``messages.pot`` message catalog
-template file from extracted translatable strings
-
-.. code-block:: bash
-
-    pybabel extract --mapping babel.cfg --output messages.pot ./
-
-
-3. Initialize message catalogs
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you want to translate the template to language ``lang``, run the
-following command to create a message catalog
-``translations/lang/LC_MESSAGES/messages.po`` using the template
-``messages.pot``
-
-.. code-block:: bash
-
-    pybabel init --input-file messages.pot --output-dir translations/ --locale lang --domain messages
-
-babel expects ``lang`` to be a valid locale identifier, so if e.g. you
-are translating for language ``cz`` but the corresponding locale is
-``cs``, you have to use the locale identifier. Nevertheless, the
-gettext infrastructure should later correctly find the locale for a
-given language.
-
-4. Fill the message catalogs
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The message catalog files format is quite intuitive, it is fully
-documented in the `GNU gettext manual
-<http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files>`_. Essentially,
-you fill in the ``msgstr`` strings
-
-
-.. code-block:: po
-
-    msgid "just a simple string"
-    msgstr "jenom jednoduchý řetězec"
-
-    msgid ""
-    "some multiline string"
-    "looks like this"
-    msgstr ""
-    "nějaký více řádkový řetězec"
-    "vypadá takto"
-
-You might also want to remove ``#,fuzzy`` flags once the translation
-is complete and reviewed to show that it can be compiled.
-
-5. Compile the message catalogs
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The message catalogs must be compiled into binary format using this
-command
-
-.. code-block:: bash
-
-    pybabel compile --directory translations/ --domain messages
-
-This command might complain about "fuzzy" translations, which means
-you should review the translations and once done, remove the fuzzy
-flag line.
-
-(6.) Update the catalogs when templates change
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you add any translatable patterns into your templates, you have to
-update your message catalogs too.  First you extract a new message
-catalog template as described in the 2. step. Then you run the
-following command [#pybabel_error]_
-
-.. code-block:: bash
-
-   pybabel update --input-file messages.pot --output-dir translations/ --domain messages
-
-This will merge the new patterns with the old ones. Once you review
-and fill them, you have to recompile them as described in the 5. step.
-
-.. [#flask] Although the tutorial is focused on Flask-based web
-            applications, the linked translation tutorial is not
-            Flask-specific.
-.. [#pybabel_error] If you get an error ``TypeError: must be str, not
-                    bytes`` with Python 3.3, it is likely you are
-                    suffering from this `bug
-                    <https://github.com/mitsuhiko/flask-babel/issues/43>`_.
-                    Until the fix is released, you can use babel with
-                    Python 2.7.
diff --git a/plugins/i18n_subsites/test_data/content/images/img.png b/plugins/i18n_subsites/test_data/content/images/img.png
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/plugins/i18n_subsites/test_data/content/pages/hidden-page-cz.rst b/plugins/i18n_subsites/test_data/content/pages/hidden-page-cz.rst
deleted file mode 100644
index c282faa7899e76ea8ea4ac70ce8a8558ba517199..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/pages/hidden-page-cz.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-404 stránka
-===========
-:slug: 404
-:lang: cz
-:status: hidden
-
-Jednoduchá 404 stránka.
diff --git a/plugins/i18n_subsites/test_data/content/pages/hidden-page-de.rst b/plugins/i18n_subsites/test_data/content/pages/hidden-page-de.rst
deleted file mode 100644
index d8410a152a08a7599686c7a3b7fda582197557ae..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/pages/hidden-page-de.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Eine 404 Seite
-==============
-:slug: 404
-:lang: de
-:status: hidden
-
-Eine einfache 404 Seite.
diff --git a/plugins/i18n_subsites/test_data/content/pages/hidden-page-en.rst b/plugins/i18n_subsites/test_data/content/pages/hidden-page-en.rst
deleted file mode 100644
index 74a97d79e1c7a08c5642264753904b7a59c96e5b..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/pages/hidden-page-en.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-A 404 page
-==========
-:slug: 404
-:lang: en
-:status: hidden
-
-A simple 404 page.
diff --git a/plugins/i18n_subsites/test_data/content/pages/untranslated-page.rst b/plugins/i18n_subsites/test_data/content/pages/untranslated-page.rst
deleted file mode 100644
index ae4c2b867fc62e88132e2d315fdf3973b1bb5c3e..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/pages/untranslated-page.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Untranslated page
-=================
-:lang: en
-
-This page has no translation.
diff --git a/plugins/i18n_subsites/test_data/content/translated_article-cz.rst b/plugins/i18n_subsites/test_data/content/translated_article-cz.rst
deleted file mode 100644
index 555a69d7d3513e1c2b255885e41350c175fd0dc6..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/translated_article-cz.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-Přeložený článek
-================
-:slug: translated-article
-:lang: cz
-:date: 2014-09-15
-
-Jednoduchý článek s překlady.
-Zde je odkaz na `nějaký obrázek <{filename}/images/img.png>`_.
diff --git a/plugins/i18n_subsites/test_data/content/translated_article-de.rst b/plugins/i18n_subsites/test_data/content/translated_article-de.rst
deleted file mode 100644
index 01bf565f73a07f2e45323fd0c13e96635ba2442c..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/translated_article-de.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-Ein übersetzter Artikel
-=======================
-:slug: translated-article
-:lang: de
-:date: 2014-09-14
-
-Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur `einigem Bild <{filename}/images/img.png>`_.
diff --git a/plugins/i18n_subsites/test_data/content/translated_article-en.rst b/plugins/i18n_subsites/test_data/content/translated_article-en.rst
deleted file mode 100644
index d7f5dad274e9c8db04e252e5b87885afbed12e7e..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/translated_article-en.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-A translated article
-====================
-:slug: translated-article
-:lang: en
-:date: 2014-09-13
-
-A simple article with a translation.
-Here is a link to `some image <{filename}/images/img.png>`_.
diff --git a/plugins/i18n_subsites/test_data/content/untranslated_article-en.rst b/plugins/i18n_subsites/test_data/content/untranslated_article-en.rst
deleted file mode 100644
index 867ae5d86fad8d6d70c40c509f92a0897ecd4293..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/content/untranslated_article-en.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-An untranslated article
-=======================
-:date: 2014-07-14
-:lang: en
-
-An article without a translation.
-Here is a link to an `untranslated page`_
-
-.. _`untranslated page`: {filename}/pages/untranslated-page.rst
diff --git a/plugins/i18n_subsites/test_data/localized_theme/babel.cfg b/plugins/i18n_subsites/test_data/localized_theme/babel.cfg
deleted file mode 100644
index 440673245823c4b5195689fef85e3ac0a6ab6684..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/localized_theme/babel.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[jinja2: templates/**.html]
-
diff --git a/plugins/i18n_subsites/test_data/localized_theme/messages.pot b/plugins/i18n_subsites/test_data/localized_theme/messages.pot
deleted file mode 100644
index 578917f449f698444e37129086f2d3bd4063158c..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/localized_theme/messages.pot
+++ /dev/null
@@ -1,23 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-07-13 12:25+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 1.3\n"
-
-#: templates/base.html:3
-msgid "Welcome to our"
-msgstr ""
-
diff --git a/plugins/i18n_subsites/test_data/localized_theme/static/style.css b/plugins/i18n_subsites/test_data/localized_theme/static/style.css
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/plugins/i18n_subsites/test_data/localized_theme/templates/base.html b/plugins/i18n_subsites/test_data/localized_theme/templates/base.html
deleted file mode 100644
index a24eb1db8d0ed296b656a3aed62cf13599dbc6cb..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/localized_theme/templates/base.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% extends "!simple/base.html" %}
-
-{% block title %}{% trans %}Welcome to our{% endtrans %} {{ SITENAME }}{% endblock %}
-{% block head %}
-{{ super() }}
-<link rel="stylesheet" href="{{ SITEURL }}/{{ THEME_STATIC_DIR }}/style.css" />
-{% endblock %}
diff --git a/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.mo b/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.mo
deleted file mode 100644
index 239010221fe789ec007296b700578fd5114ab279..0000000000000000000000000000000000000000
Binary files a/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.mo and /dev/null differ
diff --git a/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.po b/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.po
deleted file mode 100644
index 2eb4efbb6b21787423781c59cccffe0830618d1a..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/localized_theme/translations/de/LC_MESSAGES/messages.po
+++ /dev/null
@@ -1,23 +0,0 @@
-# German translations for PROJECT.
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-07-13 12:25+0200\n"
-"PO-Revision-Date: 2014-07-13 12:26+0200\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: de <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 1.3\n"
-
-#: templates/base.html:3
-msgid "Welcome to our"
-msgstr "Willkommen Sie zur unserer"
-
diff --git a/plugins/i18n_subsites/test_data/output/an-untranslated-article.html b/plugins/i18n_subsites/test_data/output/an-untranslated-article.html
deleted file mode 100644
index f45a10342ca12985761d7caf0a8872e50db36c9d..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/an-untranslated-article.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-          <title>Welcome to our Testing site</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-            <li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/an-untranslated-article.html" rel="bookmark"
-         title="Permalink to An untranslated article">An untranslated article</a></h2>
- 
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-07-14T00:00:00+00:00">
-      Mon 14 July 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>An article without a translation.
-Here is a link to an <a class="reference external" href="http://example.com/test/pages/untranslated-page.html">untranslated page</a></p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/cz/an-untranslated-article-en.html b/plugins/i18n_subsites/test_data/output/cz/an-untranslated-article-en.html
deleted file mode 100644
index 1871ee6b2bc57ecad9fa75a365b7d8f5c222ee13..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/cz/an-untranslated-article-en.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html lang="cz">
-<head>
-          <title>Welcome to our Testovací stránka</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testovací stránka Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/cz/../theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/cz/">Testovací stránka <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/cz/an-untranslated-article-en.html" rel="bookmark"
-         title="Permalink to An untranslated article">An untranslated article</a></h2>
- 
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-07-14T00:00:00+00:00">
-      Mon 14 July 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/cz/author/test-testovic.html">Test Testovič</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>An article without a translation.
-Here is a link to an <a class="reference external" href="http://example.com/test/cz/../pages/untranslated-page.html">untranslated page</a></p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/cz/feeds_all.atom.xml b/plugins/i18n_subsites/test_data/output/cz/feeds_all.atom.xml
deleted file mode 100644
index e6797c25e7373a7809c1e8a0027a51f414947694..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/cz/feeds_all.atom.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom"><title>Testovací stránka</title><link href="http://example.com/test/cz/" rel="alternate"></link><link href="http://example.com/test/feeds_all.atom.xml" rel="self"></link><id>http://example.com/test/cz/</id><updated>2014-09-15T00:00:00+00:00</updated><entry><title>Přeložený článek</title><link href="http://example.com/test/cz/translated-article.html" rel="alternate"></link><published>2014-09-15T00:00:00+00:00</published><updated>2014-09-15T00:00:00+00:00</updated><author><name>Test Testovič</name></author><id>tag:example.com,2014-09-15:/test/cz/translated-article.html</id><summary type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>Ein übersetzter Artikel</title><link href="http://example.com/test/cz/../de/translated-article.html" rel="alternate"></link><published>2014-09-14T00:00:00+00:00</published><updated>2014-09-14T00:00:00+00:00</updated><author><name>Test Testovič</name></author><id>tag:example.com,2014-09-14:/test/cz/../de/translated-article.html</id><summary type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>A translated article</title><link href="http://example.com/test/cz/../translated-article.html" rel="alternate"></link><published>2014-09-13T00:00:00+00:00</published><updated>2014-09-13T00:00:00+00:00</updated><author><name>Test Testovič</name></author><id>tag:example.com,2014-09-13:/test/cz/../translated-article.html</id><summary type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/cz/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>An untranslated article</title><link href="http://example.com/test/cz/an-untranslated-article-en.html" rel="alternate"></link><published>2014-07-14T00:00:00+00:00</published><updated>2014-07-14T00:00:00+00:00</updated><author><name>Test Testovič</name></author><id>tag:example.com,2014-07-14:/test/cz/an-untranslated-article-en.html</id><summary type="html">&lt;p&gt;An article without a translation.
-Here is a link to an &lt;a class="reference external" href="http://example.com/test/cz/../pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;An article without a translation.
-Here is a link to an &lt;a class="reference external" href="http://example.com/test/cz/../pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
-</content></entry></feed>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/cz/index.html b/plugins/i18n_subsites/test_data/output/cz/index.html
deleted file mode 100644
index 08dce152a6e3ed8d17b893abcb3601cd419691dc..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/cz/index.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<html lang="cz">
-<head>
-        <title>Welcome to our Testovací stránka</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testovací stránka Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/cz/../theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/cz/">Testovací stránka <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content">
-<h2>All articles</h2>
-
-<ol id="post-list">
-        <li><article class="hentry">
-                <header> <h2 class="entry-title"><a href="http://example.com/test/cz/translated-article.html" rel="bookmark" title="Permalink to Přeložený článek">Přeložený článek</a></h2> </header>
-                <footer class="post-info">
-                    <time class="published" datetime="2014-09-15T00:00:00+00:00"> Mon 15 September 2014 </time>
-                    <address class="vcard author">By
-                        <a class="url fn" href="http://example.com/test/cz/author/test-testovic.html">Test Testovič</a>
-                    </address>
-                </footer><!-- /.post-info -->
-                <div class="entry-content"> <p>Jednoduchý článek s překlady.
-Zde je odkaz na <a class="reference external" href="http://example.com/test/cz/../images/img.png">nějaký obrázek</a>.</p>
- </div><!-- /.entry-content -->
-        </article></li>
-        <li><article class="hentry">
-                <header> <h2 class="entry-title"><a href="http://example.com/test/cz/an-untranslated-article-en.html" rel="bookmark" title="Permalink to An untranslated article">An untranslated article</a></h2> </header>
-                <footer class="post-info">
-                    <time class="published" datetime="2014-07-14T00:00:00+00:00"> Mon 14 July 2014 </time>
-                    <address class="vcard author">By
-                        <a class="url fn" href="http://example.com/test/cz/author/test-testovic.html">Test Testovič</a>
-                    </address>
-                </footer><!-- /.post-info -->
-                <div class="entry-content"> <p>An article without a translation.
-Here is a link to an <a class="reference external" href="http://example.com/test/cz/../pages/untranslated-page.html">untranslated page</a></p>
- </div><!-- /.entry-content -->
-        </article></li>
-</ol><!-- /#posts-list -->
-</section><!-- /#content -->
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/cz/pages/404.html b/plugins/i18n_subsites/test_data/output/cz/pages/404.html
deleted file mode 100644
index c6e659d9ff015a050e375f81d4f62e8eb31367e7..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/cz/pages/404.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html lang="cz">
-<head>
-        <title>404 stránka</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testovací stránka Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/cz/../theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/cz/">Testovací stránka <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-    <h1>404 stránka</h1>
-    Translations: 
-<a href="http://example.com/test/cz/../de/pages/404.html">de</a>
-<a href="http://example.com/test/cz/../pages/404.html">en</a>
-
-
-    <p>Jednoduchá 404 stránka.</p>
-
-
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/cz/translated-article.html b/plugins/i18n_subsites/test_data/output/cz/translated-article.html
deleted file mode 100644
index 9402c9a28fa09e0ea17c81eac45f0e9dd8c7549a..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/cz/translated-article.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html lang="cz">
-<head>
-          <title>Welcome to our Testovací stránka</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testovací stránka Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/cz/../theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/cz/">Testovací stránka <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/cz/translated-article.html" rel="bookmark"
-         title="Permalink to Přeložený článek">Přeložený článek</a></h2>
- Translations: 
-<a href="http://example.com/test/cz/../de/translated-article.html">de</a>
-<a href="http://example.com/test/cz/../translated-article.html">en</a>
-
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-09-15T00:00:00+00:00">
-      Mon 15 September 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/cz/author/test-testovic.html">Test Testovič</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>Jednoduchý článek s překlady.
-Zde je odkaz na <a class="reference external" href="http://example.com/test/cz/../images/img.png">nějaký obrázek</a>.</p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/drafts/an-untranslated-article-en.html b/plugins/i18n_subsites/test_data/output/de/drafts/an-untranslated-article-en.html
deleted file mode 100644
index e58078f8c2b72a724e1bdc1227d500d9f63a543e..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/drafts/an-untranslated-article-en.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-          <title>Willkommen Sie zur unserer Testseite</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/de/drafts/an-untranslated-article-en.html" rel="bookmark"
-         title="Permalink to An untranslated article">An untranslated article</a></h2>
- 
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-07-14T00:00:00+00:00">
-      Mon 14 July 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>An article without a translation.
-Here is a link to an <a class="reference external" href="http://example.com/test/de/pages/untranslated-page-en.html">untranslated page</a></p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/feeds_all.atom.xml b/plugins/i18n_subsites/test_data/output/de/feeds_all.atom.xml
deleted file mode 100644
index b5f596ba811bd99b0000a1d5849768cb5e66ce41..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/feeds_all.atom.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom"><title>Testseite</title><link href="http://example.com/test/de/" rel="alternate"></link><link href="http://example.com/test/feeds_all.atom.xml" rel="self"></link><id>http://example.com/test/de/</id><updated>2014-09-15T00:00:00+00:00</updated><entry><title>Přeložený článek</title><link href="http://example.com/test/de/../cz/translated-article.html" rel="alternate"></link><published>2014-09-15T00:00:00+00:00</published><updated>2014-09-15T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-15:/test/de/../cz/translated-article.html</id><summary type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>Ein übersetzter Artikel</title><link href="http://example.com/test/de/translated-article.html" rel="alternate"></link><published>2014-09-14T00:00:00+00:00</published><updated>2014-09-14T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-14:/test/de/translated-article.html</id><summary type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>A translated article</title><link href="http://example.com/test/de/../translated-article.html" rel="alternate"></link><published>2014-09-13T00:00:00+00:00</published><updated>2014-09-13T00:00:00+00:00</updated><author><name>Der Tester</name></author><id>tag:example.com,2014-09-13:/test/de/../translated-article.html</id><summary type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/de/../images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</content></entry></feed>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/index.html b/plugins/i18n_subsites/test_data/output/de/index.html
deleted file mode 100644
index 8dee6a7203c0a2b33d5d48dfb6fced45f9d83fc0..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/index.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-        <title>Willkommen Sie zur unserer Testseite</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content">
-<h2>All articles</h2>
-
-<ol id="post-list">
-        <li><article class="hentry">
-                <header> <h2 class="entry-title"><a href="http://example.com/test/de/translated-article.html" rel="bookmark" title="Permalink to Ein übersetzter Artikel">Ein übersetzter Artikel</a></h2> </header>
-                <footer class="post-info">
-                    <time class="published" datetime="2014-09-14T00:00:00+00:00"> Sun 14 September 2014 </time>
-                    <address class="vcard author">By
-                        <a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
-                    </address>
-                </footer><!-- /.post-info -->
-                <div class="entry-content"> <p>Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur <a class="reference external" href="http://example.com/test/de/../images/img.png">einigem Bild</a>.</p>
- </div><!-- /.entry-content -->
-        </article></li>
-</ol><!-- /#posts-list -->
-</section><!-- /#content -->
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/pages/404.html b/plugins/i18n_subsites/test_data/output/de/pages/404.html
deleted file mode 100644
index b1721f5cece46a745bed16ec4333210cdb6c4f58..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/pages/404.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-        <title>Eine 404 Seite</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-    <h1>Eine 404 Seite</h1>
-    Translations: 
-<a href="http://example.com/test/de/../cz/pages/404.html">cz</a>
-<a href="http://example.com/test/de/../pages/404.html">en</a>
-
-
-    <p>Eine einfache 404 Seite.</p>
-
-
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/pages/untranslated-page-en.html b/plugins/i18n_subsites/test_data/output/de/pages/untranslated-page-en.html
deleted file mode 100644
index 9873cbd20f490ef8450ff3420a1667ec9e0d88df..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/pages/untranslated-page-en.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-        <title>Untranslated page</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-    <h1>Untranslated page</h1>
-    
-
-    <p>This page has no translation.</p>
-
-
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/de/translated-article.html b/plugins/i18n_subsites/test_data/output/de/translated-article.html
deleted file mode 100644
index bd26a8347b05756e0802b90141ea8f1424ab20fe..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/de/translated-article.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-          <title>Willkommen Sie zur unserer Testseite</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testseite Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/de/../theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/de/">Testseite <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/de/translated-article.html" rel="bookmark"
-         title="Permalink to Ein übersetzter Artikel">Ein übersetzter Artikel</a></h2>
- Translations: 
-<a href="http://example.com/test/de/../cz/translated-article.html">cz</a>
-<a href="http://example.com/test/de/../translated-article.html">en</a>
-
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-09-14T00:00:00+00:00">
-      Sun 14 September 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/de/author/der-tester.html">Der Tester</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur <a class="reference external" href="http://example.com/test/de/../images/img.png">einigem Bild</a>.</p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/feeds_all.atom.xml b/plugins/i18n_subsites/test_data/output/feeds_all.atom.xml
deleted file mode 100644
index 609cf994d9d4e3c305e32666032d95d5860aba07..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/feeds_all.atom.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<feed xmlns="http://www.w3.org/2005/Atom"><title>Testing site</title><link href="http://example.com/test/" rel="alternate"></link><link href="http://example.com/test/feeds_all.atom.xml" rel="self"></link><id>http://example.com/test/</id><updated>2014-09-15T00:00:00+00:00</updated><entry><title>Přeložený článek</title><link href="http://example.com/test/cz/translated-article.html" rel="alternate"></link><published>2014-09-15T00:00:00+00:00</published><updated>2014-09-15T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-15:/test/cz/translated-article.html</id><summary type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Jednoduchý článek s překlady.
-Zde je odkaz na &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;nějaký obrázek&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>Ein übersetzter Artikel</title><link href="http://example.com/test/de/translated-article.html" rel="alternate"></link><published>2014-09-14T00:00:00+00:00</published><updated>2014-09-14T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-14:/test/de/translated-article.html</id><summary type="html">&lt;p&gt;Ein einfacher Artikel mit einer Übersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;Ein einfacher Artikel mit einer Ãœbersetzung.
-Hier ist ein Link zur &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;einigem Bild&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>A translated article</title><link href="http://example.com/test/translated-article.html" rel="alternate"></link><published>2014-09-13T00:00:00+00:00</published><updated>2014-09-13T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-09-13:/test/translated-article.html</id><summary type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;A simple article with a translation.
-Here is a link to &lt;a class="reference external" href="http://example.com/test/images/img.png"&gt;some image&lt;/a&gt;.&lt;/p&gt;
-</content></entry><entry><title>An untranslated article</title><link href="http://example.com/test/an-untranslated-article.html" rel="alternate"></link><published>2014-07-14T00:00:00+00:00</published><updated>2014-07-14T00:00:00+00:00</updated><author><name>The Tester</name></author><id>tag:example.com,2014-07-14:/test/an-untranslated-article.html</id><summary type="html">&lt;p&gt;An article without a translation.
-Here is a link to an &lt;a class="reference external" href="http://example.com/test/pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
-</summary><content type="html">&lt;p&gt;An article without a translation.
-Here is a link to an &lt;a class="reference external" href="http://example.com/test/pages/untranslated-page.html"&gt;untranslated page&lt;/a&gt;&lt;/p&gt;
-</content></entry></feed>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/images/img.png b/plugins/i18n_subsites/test_data/output/images/img.png
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/plugins/i18n_subsites/test_data/output/index.html b/plugins/i18n_subsites/test_data/output/index.html
deleted file mode 100644
index 5779f4f18d0ce4d09173da464175732a574eb072..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-        <title>Welcome to our Testing site</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-            <li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
-        </ul></nav><!-- /#menu -->
-<section id="content">
-<h2>All articles</h2>
-
-<ol id="post-list">
-        <li><article class="hentry">
-                <header> <h2 class="entry-title"><a href="http://example.com/test/translated-article.html" rel="bookmark" title="Permalink to A translated article">A translated article</a></h2> </header>
-                <footer class="post-info">
-                    <time class="published" datetime="2014-09-13T00:00:00+00:00"> Sat 13 September 2014 </time>
-                    <address class="vcard author">By
-                        <a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
-                    </address>
-                </footer><!-- /.post-info -->
-                <div class="entry-content"> <p>A simple article with a translation.
-Here is a link to <a class="reference external" href="http://example.com/test/images/img.png">some image</a>.</p>
- </div><!-- /.entry-content -->
-        </article></li>
-        <li><article class="hentry">
-                <header> <h2 class="entry-title"><a href="http://example.com/test/an-untranslated-article.html" rel="bookmark" title="Permalink to An untranslated article">An untranslated article</a></h2> </header>
-                <footer class="post-info">
-                    <time class="published" datetime="2014-07-14T00:00:00+00:00"> Mon 14 July 2014 </time>
-                    <address class="vcard author">By
-                        <a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
-                    </address>
-                </footer><!-- /.post-info -->
-                <div class="entry-content"> <p>An article without a translation.
-Here is a link to an <a class="reference external" href="http://example.com/test/pages/untranslated-page.html">untranslated page</a></p>
- </div><!-- /.entry-content -->
-        </article></li>
-</ol><!-- /#posts-list -->
-</section><!-- /#content -->
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/pages/404.html b/plugins/i18n_subsites/test_data/output/pages/404.html
deleted file mode 100644
index 05300a333a03a08388af46e8bb49a9a84598efa3..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/pages/404.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-        <title>A 404 page</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-            <li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
-        </ul></nav><!-- /#menu -->
-    <h1>A 404 page</h1>
-    Translations: 
-<a href="http://example.com/test/cz/pages/404.html">cz</a>
-<a href="http://example.com/test/de/pages/404.html">de</a>
-
-
-    <p>A simple 404 page.</p>
-
-
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/pages/untranslated-page.html b/plugins/i18n_subsites/test_data/output/pages/untranslated-page.html
deleted file mode 100644
index d97f63456a823ec4c57f674f59b3f0e8561cf451..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/pages/untranslated-page.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-        <title>Untranslated page</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-            <li class="active"><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
-        </ul></nav><!-- /#menu -->
-    <h1>Untranslated page</h1>
-    
-
-    <p>This page has no translation.</p>
-
-
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/output/theme/style.css b/plugins/i18n_subsites/test_data/output/theme/style.css
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/plugins/i18n_subsites/test_data/output/translated-article.html b/plugins/i18n_subsites/test_data/output/translated-article.html
deleted file mode 100644
index 77188adc5067812aecc2544714ab7a5834dddfaa..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/output/translated-article.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-          <title>Welcome to our Testing site</title>
-        <meta charset="utf-8" />
-        <link href="http://example.com/test/feeds_all.atom.xml" type="application/atom+xml" rel="alternate" title="Testing site Full Atom Feed" />
-
-<link rel="stylesheet" href="http://example.com/test/theme/style.css" />
-
-
-
-</head>
-
-<body id="index" class="home">
-        <header id="banner" class="body">
-                <h1><a href="http://example.com/test/">Testing site <strong></strong></a></h1>
-        </header><!-- /#banner -->
-        <nav id="menu"><ul>
-            <li><a href="http://example.com/test/pages/untranslated-page.html">Untranslated page</a></li>
-        </ul></nav><!-- /#menu -->
-<section id="content" class="body">
-  <header>
-    <h2 class="entry-title">
-      <a href="http://example.com/test/translated-article.html" rel="bookmark"
-         title="Permalink to A translated article">A translated article</a></h2>
- Translations: 
-<a href="http://example.com/test/cz/translated-article.html">cz</a>
-<a href="http://example.com/test/de/translated-article.html">de</a>
-
-  </header>
-  <footer class="post-info">
-    <time class="published" datetime="2014-09-13T00:00:00+00:00">
-      Sat 13 September 2014
-    </time>
-    <address class="vcard author">
-      By           <a class="url fn" href="http://example.com/test/author/the-tester.html">The Tester</a>
-    </address>
-  </footer><!-- /.post-info -->
-  <div class="entry-content">
-    <p>A simple article with a translation.
-Here is a link to <a class="reference external" href="http://example.com/test/images/img.png">some image</a>.</p>
-
-  </div><!-- /.entry-content -->
-</section>
-        <footer id="contentinfo" class="body">
-                <address id="about" class="vcard body">
-                Proudly powered by <a href="http://getpelican.com/">Pelican</a>,
-                which takes great advantage of <a href="http://python.org">Python</a>.
-                </address><!-- /#about -->
-        </footer><!-- /#contentinfo -->
-</body>
-</html>
\ No newline at end of file
diff --git a/plugins/i18n_subsites/test_data/pelicanconf.py b/plugins/i18n_subsites/test_data/pelicanconf.py
deleted file mode 100644
index 55018f27101df879c31f57903dad4e6c9e88201f..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_data/pelicanconf.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*- #
-from __future__ import unicode_literals
-
-AUTHOR = 'The Tester'
-SITENAME = 'Testing site'
-SITEURL = 'http://example.com/test'
-
-# to make the test suite portable
-TIMEZONE = 'UTC'
-
-DEFAULT_LANG = 'en'
-LOCALE = 'en_US.UTF-8'
-
-# Generate only one feed
-FEED_ALL_ATOM = 'feeds_all.atom.xml'
-CATEGORY_FEED_ATOM = None
-TRANSLATION_FEED_ATOM = None
-AUTHOR_FEED_ATOM = None
-AUTHOR_FEED_RSS = None
-
-# Disable unnecessary pages
-CATEGORY_SAVE_AS = ''
-TAG_SAVE_AS = ''
-AUTHOR_SAVE_AS = ''
-ARCHIVES_SAVE_AS = ''
-AUTHORS_SAVE_AS = ''
-CATEGORIES_SAVE_AS = ''
-TAGS_SAVE_AS = ''
-
-PLUGIN_PATHS = ['../../']
-PLUGINS = ['i18n_subsites']
-
-THEME = 'localized_theme'
-JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
-
-from blinker import signal
-tmpsig = signal('tmpsig')
-I18N_FILTER_SIGNALS = [tmpsig]
-
-I18N_SUBSITES = {
-    'de': {
-        'SITENAME': 'Testseite',
-        'AUTHOR': 'Der Tester',
-        'LOCALE': 'de_DE.UTF-8',
-        },
-    'cz': {
-        'SITENAME': 'Testovací stránka',
-        'AUTHOR': 'Test Testovič',
-        'I18N_UNTRANSLATED_PAGES': 'remove',
-        'I18N_UNTRANSLATED_ARTICLES': 'keep',
-        },
-    }
diff --git a/plugins/i18n_subsites/test_i18n_subsites.py b/plugins/i18n_subsites/test_i18n_subsites.py
deleted file mode 100644
index c6c1d6ac8a5e981a8c747578fe273797c13009fc..0000000000000000000000000000000000000000
--- a/plugins/i18n_subsites/test_i18n_subsites.py
+++ /dev/null
@@ -1,139 +0,0 @@
-'''Unit tests for the i18n_subsites plugin'''
-
-import os
-import locale
-import unittest
-import subprocess
-from tempfile import mkdtemp
-from shutil import rmtree
-
-from . import i18n_subsites as i18ns
-from pelican import Pelican
-from pelican.tests.support import get_settings
-from pelican.settings import read_settings
-
-
-class TestTemporaryLocale(unittest.TestCase):
-    '''Test the temporary locale context manager'''
-
-    def test_locale_restored(self):
-        '''Test that the locale is restored after exiting context'''
-        orig_locale = locale.setlocale(locale.LC_ALL)
-        with i18ns.temporary_locale():
-            locale.setlocale(locale.LC_ALL, 'C')
-            self.assertEqual(locale.setlocale(locale.LC_ALL), 'C')
-        self.assertEqual(locale.setlocale(locale.LC_ALL), orig_locale)
-
-    def test_temp_locale_set(self):
-        '''Test that the temporary locale is set'''
-        with i18ns.temporary_locale('C'):
-            self.assertEqual(locale.setlocale(locale.LC_ALL), 'C')
-
-
-class TestSettingsManipulation(unittest.TestCase):
-    '''Test operations on settings dict'''
-
-    def setUp(self):
-        '''Prepare default settings'''
-        self.settings = get_settings()
-
-    def test_get_pelican_cls_class(self):
-        '''Test that we get class given as an object'''
-        self.settings['PELICAN_CLASS'] = object
-        cls = i18ns.get_pelican_cls(self.settings)
-        self.assertIs(cls, object)
-        
-    def test_get_pelican_cls_str(self):
-        '''Test that we get correct class given by string'''
-        cls = i18ns.get_pelican_cls(self.settings)
-        self.assertIs(cls, Pelican)
-        
-
-class TestSitesRelpath(unittest.TestCase):
-    '''Test relative path between sites generation'''
-
-    def setUp(self):
-        '''Generate some sample siteurls'''
-        self.siteurl = 'http://example.com'
-        i18ns._SITE_DB['en'] = self.siteurl
-        i18ns._SITE_DB['de'] = self.siteurl + '/de'
-
-    def tearDown(self):
-        '''Remove sites from db'''
-        i18ns._SITE_DB.clear()
-
-    def test_get_site_path(self):
-        '''Test getting the path within a site'''
-        self.assertEqual(i18ns.get_site_path(self.siteurl), '/')
-        self.assertEqual(i18ns.get_site_path(self.siteurl + '/de'), '/de')
-
-    def test_relpath_to_site(self):
-        '''Test getting relative paths between sites'''
-        self.assertEqual(i18ns.relpath_to_site('en', 'de'), 'de')
-        self.assertEqual(i18ns.relpath_to_site('de', 'en'), '..')
-
-        
-class TestRegistration(unittest.TestCase):
-    '''Test plugin registration'''
-
-    def test_return_on_missing_signal(self):
-        '''Test return on missing required signal'''
-        i18ns._SIGNAL_HANDLERS_DB['tmp_sig'] = None
-        i18ns.register()
-        self.assertNotIn(id(i18ns.save_generator),
-                         i18ns.signals.generator_init.receivers)
-
-    def test_registration(self):
-        '''Test registration of all signal handlers'''
-        i18ns.register()
-        for sig_name, handler in i18ns._SIGNAL_HANDLERS_DB.items():
-            sig = getattr(i18ns.signals, sig_name)
-            self.assertIn(id(handler), sig.receivers)
-            # clean up
-            sig.disconnect(handler)
-        
-
-class TestFullRun(unittest.TestCase):
-    '''Test running Pelican with the Plugin'''
-
-    def setUp(self):
-        '''Create temporary output and cache folders'''
-        self.temp_path = mkdtemp(prefix='pelicantests.')
-        self.temp_cache = mkdtemp(prefix='pelican_cache.')
-
-    def tearDown(self):
-        '''Remove output and cache folders'''
-        rmtree(self.temp_path)
-        rmtree(self.temp_cache)
-
-    def test_sites_generation(self):
-        '''Test generation of sites with the plugin
-
-        Compare with recorded output via ``git diff``.
-        To generate output for comparison run the command
-        ``pelican -o test_data/output -s test_data/pelicanconf.py \
-        test_data/content``
-        Remember to remove the output/ folder before that.
-        '''
-        base_path = os.path.dirname(os.path.abspath(__file__))
-        base_path = os.path.join(base_path, 'test_data')
-        content_path = os.path.join(base_path, 'content')
-        output_path = os.path.join(base_path, 'output')
-        settings_path = os.path.join(base_path, 'pelicanconf.py')
-        settings = read_settings(path=settings_path, override={
-            'PATH': content_path,
-            'OUTPUT_PATH': self.temp_path,
-            'CACHE_PATH': self.temp_cache,
-            'PLUGINS': [i18ns],
-            }
-        )
-        pelican = Pelican(settings)
-        pelican.run()
-
-        # compare output
-        out, err = subprocess.Popen(
-            ['git', 'diff', '--no-ext-diff', '--exit-code', '-w', output_path,
-             self.temp_path], env={'PAGER': ''},
-            stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
-        self.assertFalse(out, 'non-empty `diff` stdout:\n{}'.format(out))
-        self.assertFalse(err, 'non-empty `diff` stderr:\n{}'.format(out))
diff --git a/plugins/math_render b/plugins/math_render
deleted file mode 160000
index 4aa206eda5af3626203b80062e0d2fbe3971fd82..0000000000000000000000000000000000000000
--- a/plugins/math_render
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4aa206eda5af3626203b80062e0d2fbe3971fd82
diff --git a/plugins/tag_cloud/README.rst b/plugins/tag_cloud/README.rst
deleted file mode 100644
index 39b9dd041aefce5a5332900237b9ce0c6c525b2b..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/README.rst
+++ /dev/null
@@ -1,98 +0,0 @@
-tag_cloud
-=========
-
-This plugin generates a tag-cloud.
-
-Installation
-------------
-
-In order to use to use this plugin, you have to edit(*) or create(+) the following files::
-
-      blog/
-        ├── pelicanconf.py *
-        ├── content
-        ├── plugins +
-        │     └── tag_cloud.py +
-        └── themes
-              └── mytheme
-                    ├── templates
-                    │      └── base.html *
-                    └── static
-                          └── css
-                               └── style.css *
-
-In **pelicanconf.py** you have to activate the plugin::
-
-    PLUGIN_PATHS = ["plugins"]
-    PLUGINS = ["tag_cloud"]
-
-Into your **plugins** folder, you should add tag_cloud.py (from this repository).
-
-In your theme files, you should change **base.html** to apply formats (and sizes) defined in **style.css**, as specified in "Settings", below.
-
-Settings
---------
-
-================================================    =====================================================
-Setting name (followed by default value)            What does it do?
-================================================    =====================================================
-``TAG_CLOUD_STEPS = 4``                             Count of different font sizes in the tag
-                                                    cloud.
-``TAG_CLOUD_MAX_ITEMS = 100``                       Maximum number of tags in the cloud.
-``TAG_CLOUD_SORTING = 'random'``                    The tag cloud ordering scheme.  Valid values:
-                                                    random, alphabetically, alphabetically-rev, size and
-                                                    size-rev
-``TAG_CLOUD_BADGE = True``                          Optionnal setting : can bring **badges**, which mean
-                                                    say : display the number of each tags present
-                                                    on all articles.
-================================================    =====================================================
-
-The default theme does not include a tag cloud, but it is pretty easy to add one::
-
-    <ul class="tagcloud">
-        {% for tag in tag_cloud %}
-            <li class="tag-{{ tag.1 }}">
-                <a href="{{ SITEURL }}/{{ tag.0.url }}">
-                {{ tag.0 }}
-                    {% if TAG_CLOUD_BADGE %}
-                        <span class="badge">{{ tag.2 }}</span>
-                    {% endif %}
-                </a>
-            </li>
-        {% endfor %}
-    </ul>
-
-You should then also define CSS styles with appropriate classes (tag-1 to tag-N,
-where N matches ``TAG_CLOUD_STEPS``), tag-1 being the most frequent, and
-define a ``ul.tagcloud`` class with appropriate list-style to create the cloud.
-You should copy/paste this **badge** CSS rule ``ul.tagcloud .list-group-item <span>.badge``
-if you're using ``TAG_CLOUD_BADGE`` setting. (this rule, potentially long , is suggested to avoid
-conflicts with CSS libs as twitter Bootstrap)
-
-For example::
-
-    ul.tagcloud {
-      list-style: none;
-        padding: 0;
-    }
-
-    ul.tagcloud li {
-        display: inline-block;
-    }
-
-    li.tag-1 {
-        font-size: 150%;
-    }
-
-    li.tag-2 {
-        font-size: 120%;
-    }
-
-    ...
-
-    ul.tagcloud .list-group-item <span>.badge {
-        background-color: grey;
-        color: white;
-    }
-
-By default the tags in the cloud are sorted randomly, but if you prefers to have it alphabetically use the `alphabetically` (ascending) and `alphabetically-rev` (descending). Also is possible to sort the tags by it's size (number of articles with this specific tag) using the values `size` (ascending) and `size-rev` (descending).
\ No newline at end of file
diff --git a/plugins/tag_cloud/__init__.py b/plugins/tag_cloud/__init__.py
deleted file mode 100644
index a7004f504c8bb1f1c168b97633231099752a0f56..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from .tag_cloud import *
-
diff --git a/plugins/tag_cloud/tag_cloud.py b/plugins/tag_cloud/tag_cloud.py
deleted file mode 100644
index 8a3bcf93582105a400808141844ef42fb8f7255c..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/tag_cloud.py
+++ /dev/null
@@ -1,89 +0,0 @@
-'''
-tag_cloud
-===================================
-
-This plugin generates a tag cloud from available tags
-'''
-from __future__ import unicode_literals
-
-from collections import defaultdict
-from operator import itemgetter
-
-import logging
-import math
-import random
-
-from pelican import signals
-
-logger = logging.getLogger(__name__)
-
-
-def set_default_settings(settings):
-    settings.setdefault('TAG_CLOUD_STEPS', 4)
-    settings.setdefault('TAG_CLOUD_MAX_ITEMS', 100)
-    settings.setdefault('TAG_CLOUD_SORTING', 'random')
-    settings.setdefault('TAG_CLOUD_BADGE', False)
-
-
-def init_default_config(pelican):
-    from pelican.settings import DEFAULT_CONFIG
-    set_default_settings(DEFAULT_CONFIG)
-    if(pelican):
-            set_default_settings(pelican.settings)
-
-
-def generate_tag_cloud(generator):
-    tag_cloud = defaultdict(int)
-    for article in generator.articles:
-        for tag in getattr(article, 'tags', []):
-            tag_cloud[tag] += 1
-
-    tag_cloud = sorted(tag_cloud.items(), key=itemgetter(1), reverse=True)
-    tag_cloud = tag_cloud[:generator.settings.get('TAG_CLOUD_MAX_ITEMS')]
-
-    tags = list(map(itemgetter(1), tag_cloud))
-    if tags:
-        max_count = max(tags)
-    steps = generator.settings.get('TAG_CLOUD_STEPS')
-
-    # calculate word sizes
-    def generate_tag(tag, count):
-        tag = (
-            tag,
-            int(math.floor(steps - (steps - 1) * math.log(count)
-                / (math.log(max_count)or 1)))
-        )
-        if generator.settings.get('TAG_CLOUD_BADGE'):
-            tag += (count,)
-        return tag
-
-    tag_cloud = [
-        generate_tag(tag, count)
-        for tag, count in tag_cloud
-    ]
-
-    sorting = generator.settings.get('TAG_CLOUD_SORTING')
-
-    if sorting == 'alphabetically':
-        tag_cloud.sort(key=lambda elem: elem[0].name)
-    elif sorting == 'alphabetically-rev':
-        tag_cloud.sort(key=lambda elem: elem[0].name, reverse=True)
-    elif sorting == 'size':
-        tag_cloud.sort(key=lambda elem: elem[1])
-    elif sorting == 'size-rev':
-        tag_cloud.sort(key=lambda elem: elem[1], reverse=True)
-    elif sorting == 'random':
-        random.shuffle(tag_cloud)
-    else:
-        logger.warning("setting for TAG_CLOUD_SORTING not recognized: %s, "
-                       "falling back to 'random'", sorting)
-        random.shuffle(tag_cloud)
-
-    # make available in context
-    generator.tag_cloud = tag_cloud
-    generator._update_context(['tag_cloud'])
-
-
-def register():
-    signals.initialized.connect(init_default_config)
-    signals.article_generator_finalized.connect(generate_tag_cloud)
diff --git a/plugins/tag_cloud/test_data/article_1.md b/plugins/tag_cloud/test_data/article_1.md
deleted file mode 100644
index bb44efefdcbfd8eb718ccc36eeaa2cc4796b621f..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_data/article_1.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Title: Article1
-tags: fun, pelican, plugins
-
-content, yeah!
\ No newline at end of file
diff --git a/plugins/tag_cloud/test_data/article_2.md b/plugins/tag_cloud/test_data/article_2.md
deleted file mode 100644
index 74dbb6346f3acce2570ba870e4656b13727f8375..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_data/article_2.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Title: Article2
-tags: pelican, plugins, python
-
-content2, yeah!
-
diff --git a/plugins/tag_cloud/test_data/article_3.md b/plugins/tag_cloud/test_data/article_3.md
deleted file mode 100644
index bc0cd5aa1f9ff807ceec20bf7a10aa5d3362c920..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_data/article_3.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Title: Article3
-tags: pelican, plugins
-
-content3, yeah!
-
diff --git a/plugins/tag_cloud/test_data/article_4.md b/plugins/tag_cloud/test_data/article_4.md
deleted file mode 100644
index 9a3132062427e4420ce692b7e5722a1be0d6ab2f..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_data/article_4.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Title: Article4
-tags: pelican, fun
-
-content4, yeah!
-
diff --git a/plugins/tag_cloud/test_data/article_5.md b/plugins/tag_cloud/test_data/article_5.md
deleted file mode 100644
index 1d3f2ffa72d378575489bf9c01674859ecef514a..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_data/article_5.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Title: Article5
-tags: plugins, pelican, fun
-
-content5, yeah!
-
diff --git a/plugins/tag_cloud/test_tag_cloud.py b/plugins/tag_cloud/test_tag_cloud.py
deleted file mode 100644
index 210c15fe2993845e0179f71b4dd51d4265bbcc03..0000000000000000000000000000000000000000
--- a/plugins/tag_cloud/test_tag_cloud.py
+++ /dev/null
@@ -1,103 +0,0 @@
-import unittest
-import os
-import six
-import tag_cloud
-
-from pelican.generators import ArticlesGenerator
-from pelican.tests.support import get_settings
-from pelican.urlwrappers import Tag
-
-CUR_DIR = os.path.dirname(__file__)
-CONTENT_DIR = os.path.join(CUR_DIR, 'test_data')
-
-
-class TestTagCloudGeneration(unittest.TestCase):
-
-    @classmethod
-    def setUpClass(cls):
-        cls._settings = get_settings(filenames={})
-        cls._settings['DEFAULT_CATEGORY'] = 'Default'
-        cls._settings['DEFAULT_DATE'] = (1970, 1, 1)
-        cls._settings['READERS'] = {'asc': None}
-        cls._settings['CACHE_CONTENT'] = False
-        tag_cloud.set_default_settings(cls._settings)
-
-        cls.generator = ArticlesGenerator(
-            context=cls._settings.copy(), settings=cls._settings,
-            path=CONTENT_DIR, theme=cls._settings['THEME'], output_path=None)
-        cls.generator.generate_context()
-
-    def test_tag_cloud_random(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_BADGE'] = False
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('pelican', self._settings), 1),
-            (Tag('plugins', self._settings), 2),
-            (Tag('fun', self._settings), 3),
-            (Tag('python', self._settings), 10)
-        ]
-        six.assertCountEqual(self, self.generator.tag_cloud, expected)
-
-    def test_tag_cloud_badge(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_BADGE'] = True
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('pelican', self._settings), 1, 5),
-            (Tag('plugins', self._settings), 2, 4),
-            (Tag('fun', self._settings), 3, 3),
-            (Tag('python', self._settings), 10, 1)
-        ]
-        six.assertCountEqual(self, self.generator.tag_cloud, expected)
-
-    def test_tag_cloud_alphabetical(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_SORTING'] = 'alphabetically'
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('fun', self._settings), 3),
-            (Tag('pelican', self._settings), 1),
-            (Tag('plugins', self._settings), 2),
-            (Tag('python', self._settings), 10)
-        ]
-        self.assertEqual(self.generator.tag_cloud, expected)
-
-    def test_tag_cloud_alphabetical_rev(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_SORTING'] = 'alphabetically-rev'
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('python', self._settings), 10),
-            (Tag('plugins', self._settings), 2),
-            (Tag('pelican', self._settings), 1),
-            (Tag('fun', self._settings), 3)
-        ]
-        self.assertEqual(self.generator.tag_cloud, expected)
-
-    def test_tag_cloud_size(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_SORTING'] = 'size'
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('pelican', self._settings), 1),
-            (Tag('plugins', self._settings), 2),
-            (Tag('fun', self._settings), 3),
-            (Tag('python', self._settings), 10)
-        ]
-        self.assertEqual(self.generator.tag_cloud, expected)
-
-    def test_tag_cloud_size_rev(self):
-        self.generator.settings['TAG_CLOUD_STEPS'] = 10
-        self.generator.settings['TAG_CLOUD_SORTING'] = 'size-rev'
-        tag_cloud.generate_tag_cloud(self.generator)
-        expected = [
-            (Tag('python', self._settings), 10),
-            (Tag('fun', self._settings), 3),
-            (Tag('plugins', self._settings), 2),
-            (Tag('pelican', self._settings), 1)
-        ]
-        self.assertEqual(self.generator.tag_cloud, expected)
-
-if __name__ == "__main__":
-    unittest.main()
diff --git a/requirements.txt b/requirements.txt
index 4e64cd4e0261ecdd15f289645ac2fab6eb6723ac..c9c998382983773aa63e44dacde09528df645cbb 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,19 +1,5 @@
-appdirs==1.4.3
-beautifulsoup4==4.5.3
-blinker==1.4
-docutils==0.13.1
-feedgenerator==1.9
-Jinja2==2.9.5
-lxml
-Markdown
-MarkupSafe==0.23
-packaging==16.8
-pelican==3.7.1
-Pygments==2.2.0
-pyparsing==2.2.0
-python-dateutil==2.6.0
-pytz==2016.10
-six==1.10.0
-smartypants==2.0.0
-typogrify==2.0.7
-Unidecode==0.4.20
+pelican
+pelican-i18n-subsites
+pelican-render-math
+pelican-tag-cloud
+beautifulsoup4