diff --git a/.travis.yml b/.travis.yml
index b7110f065..5a49bf106 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,13 +13,14 @@ matrix:
   include:
     - python: '3.5'
       env:
-        - TOXENV=du13
+        - TOXENV=du12
     - python: '3.6'
       env:
-        - TOXENV=py36
-        - PYTEST_ADDOPTS="--cov ./ --cov-append --cov-config setup.cfg"
+        - TOXENV=du13
     - python: '3.7'
-      env: TOXENV=py37
+      env:
+        - TOXENV=py37
+        - PYTEST_ADDOPTS="--cov ./ --cov-append --cov-config setup.cfg"
     - python: 'nightly'
       env: TOXENV=py38
     - python: '3.6'
diff --git a/CHANGES b/CHANGES
index e266c50da..28e99a44d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,9 +1,51 @@
-Release 2.0.0 (in development)
+Release 2.1.0 (in development)
 ==============================
 
 Dependencies
 ------------
 
+Incompatible changes
+--------------------
+
+Deprecated
+----------
+
+Features added
+--------------
+
+Bugs fixed
+----------
+
+Testing
+--------
+
+Release 2.0.0 beta2 (in development)
+====================================
+
+Dependencies
+------------
+
+Incompatible changes
+--------------------
+
+Deprecated
+----------
+
+Features added
+--------------
+
+Bugs fixed
+----------
+
+Testing
+--------
+
+Release 2.0.0 beta1 (in development)
+====================================
+
+Dependencies
+------------
+
 * LaTeX builder now depends on TeX Live 2015 or above.
 * LaTeX builder (with ``'pdflatex'`` :confval:`latex_engine`) will process
   Unicode Greek letters in text (not in math mark-up) via the text font and
@@ -23,7 +65,9 @@ Dependencies
 
   - sphinxcontrib.applehelp
   - sphinxcontrib.devhelp
+  - sphinxcontrib.htmlhelp
   - sphinxcontrib.jsmath
+  - sphinxcontrib.serializinghtml
   - sphinxcontrib.qthelp
 
 Incompatible changes
@@ -59,12 +103,17 @@ Incompatible changes
   from LaTeX preamble now get overwritten.  Use ``\sphinxtableofcontentshook``
   to insert custom user definitions.  See :ref:`latex-macros`.
 * quickstart: Simplify generated ``conf.py``
+* #4148: quickstart: some questions are removed.  They are still able to specify
+  via command line options
 * websupport: unbundled from sphinx core. Please use sphinxcontrib-websupport
 * C++, the visibility of base classes is now always rendered as present in the
   input. That is, ``private`` is now shown, where it was ellided before.
 * LaTeX: graphics inclusion of oversized images rescales to not exceed
   the text width and height, even if width and/or height option were used.
   (refs: #5956)
+* epub: ``epub_title`` defaults to the :confval:`project` option
+* #4550: All tables and figures without ``align`` option are displayed to center
+* #4587: html: Output HTML5 by default
 
 Deprecated
 ----------
@@ -75,6 +124,10 @@ Deprecated
   ``EpubBuilder.build_container()``, ``EpubBuilder.bulid_content()``,
   ``EpubBuilder.build_toc()`` and ``EpubBuilder.build_epub()``
 * The arguments of ``Epub3Builder.build_navigation_doc()``
+* The config variables
+
+  - :confval:`html_experimental_html5_writer`
+
 * The ``encoding`` argument of ``autodoc.Documenter.get_doc()``,
   ``autodoc.DocstringSignatureMixin.get_doc()``,
   ``autodoc.DocstringSignatureMixin._find_signature()``, and
@@ -108,21 +161,30 @@ Deprecated
 * ``sphinx.io.SphinxFileInput.supported``
 * ``sphinx.io.SphinxRSTFileInput``
 * ``sphinx.registry.SphinxComponentRegistry.add_source_input()``
+* ``sphinx.roles.abbr_role()``
+* ``sphinx.roles.emph_literal_role()``
+* ``sphinx.roles.menusel_role()``
+* ``sphinx.roles.index_role()``
+* ``sphinx.roles.indexmarkup_role()``
 * ``sphinx.testing.util.remove_unicode_literal()``
 * ``sphinx.util.attrdict``
 * ``sphinx.util.force_decode()``
 * ``sphinx.util.get_matching_docs()``
 * ``sphinx.util.inspect.Parameter``
+* ``sphinx.util.jsonimpl``
 * ``sphinx.util.osutil.EEXIST``
 * ``sphinx.util.osutil.EINVAL``
 * ``sphinx.util.osutil.ENOENT``
 * ``sphinx.util.osutil.EPIPE``
 * ``sphinx.util.osutil.walk()``
 * ``sphinx.util.PeekableIterator``
+* ``sphinx.util.pycompat.NoneType``
 * ``sphinx.util.pycompat.TextIOWrapper``
 * ``sphinx.util.pycompat.UnicodeMixin``
 * ``sphinx.util.pycompat.htmlescape``
 * ``sphinx.util.pycompat.indent``
+* ``sphinx.util.pycompat.sys_encoding``
+* ``sphinx.util.pycompat.terminal_safe()``
 * ``sphinx.util.pycompat.u``
 * ``sphinx.writers.latex.ExtBabel``
 * ``sphinx.writers.latex.LaTeXTranslator._make_visit_admonition()``
@@ -154,6 +216,11 @@ Features added
 
 * #4182: autodoc: Support :confval:`suppress_warnings`
 * #5533: autodoc: :confval:`autodoc_default_options` supports ``member-order``
+* #5394: autodoc: Display readable names in type annotations for mocked objects
+* #5459: autodoc: :confval:`autodoc_default_options` accepts ``True`` as a value
+* #1148: autodoc: Add :rst:dir:`autodecorator` directive for decorators
+* #5635: autosummary: Add :confval:`autosummary_mock_imports` to mock external
+  libraries on importing targets
 * #4018: htmlhelp: Add :confval:`htmlhelp_file_suffix` and
   :confval:`htmlhelp_link_suffix`
 * #5559: text: Support complex tables (colspan and rowspan)
@@ -173,10 +240,17 @@ Features added
 * #4611: epub: Show warning for duplicated ToC entries
 * #1851: Allow to omit an argument for :rst:dir:`code-block` directive.  If
   omitted, it follows :rst:dir:`highlight` or :confval:`highlight_language`
+* #4587: html: Add :confval:`html4_writer` to use old HTML4 writer
 * #6016: HTML search: A placeholder for the search summary prevents search
   result links from changing their position when the search terminates.  This
   makes navigating search results easier.
-  
+* #5196: linkcheck also checks remote images exist
+* #5924: githubpages: create CNAME file for custom domains when
+  :confval:`html_baseurl` set
+* #4261: autosectionlabel: restrict the labeled sections by new config value;
+  :confval:`autosectionlabel_maxdepth`
+
+
 Bugs fixed
 ----------
 
@@ -225,6 +299,10 @@ Bugs fixed
 ----------
 
 * LaTeX: Remove extraneous space after author names on PDF title page (refs: #6004)
+* #6026: LaTeX: A cross reference to definition list does not work
+* #6046: LaTeX: ``TypeError`` is raised when invalid latex_elements given
+* #6019: imgconverter: Including multipage PDF fails
+* #6047: autodoc: ``autofunction`` emits a warning for method objects
 
 Testing
 --------
diff --git a/bindep.txt b/bindep.txt
new file mode 100644
index 000000000..b99782017
--- /dev/null
+++ b/bindep.txt
@@ -0,0 +1,15 @@
+texlive [platform:rpm]
+texlive-fncychap [platform:rpm]
+texlive-titlesec [platform:rpm]
+texlive-tabulary [platform:rpm]
+texlive-framed [platform:rpm]
+texlive-wrapfig [platform:rpm]
+texlive-upquote [platform:rpm]
+texlive-capt-of [platform:rpm]
+texlive-needspace [platform:rpm]
+texlive-polyglossia [platform:rpm]
+texlive-luatex85 [platform:rpm]
+texlive-anyfontsize [platform:rpm]
+texlive-ctablestack [platform:rpm]
+texlive-gnu-freefont [platform:rpm]
+latexmk [platform:rpm]
diff --git a/doc/_themes/sphinx13/static/sphinx13.css b/doc/_themes/sphinx13/static/sphinx13.css
index 6315800f7..3dadf8168 100644
--- a/doc/_themes/sphinx13/static/sphinx13.css
+++ b/doc/_themes/sphinx13/static/sphinx13.css
@@ -337,7 +337,7 @@ a tt:hover {
 }
 
 pre {
-    font-family: 'Consolas', 'DejaVu Sans Mono',
+    font-family: 'Consolas', 'Courier New', 'DejaVu Sans Mono',
                  'Bitstream Vera Sans Mono', monospace;
     font-size: 13px;
     letter-spacing: 0.015em;
@@ -388,32 +388,29 @@ div.admonition, div.warning {
     padding: 0;
 }
 
-div.admonition p, div.warning p {
+div.admonition > p, div.warning > p {
     margin: 0.5em 1em 0.5em 1em;
     padding: 0;
 }
 
-div.admonition pre, div.warning pre {
+div.admonition > pre, div.warning > pre {
     margin: 0.4em 1em 0.4em 1em;
 }
 
-div.admonition p.admonition-title,
-div.warning p.admonition-title {
-    margin-top: 1em;
-    padding-top: 0.5em;
+div.admonition > p.admonition-title,
+div.warning > p.admonition-title {
+    margin-top: 0.5em;
     font-weight: bold;
 }
 
 div.warning {
     border: 1px solid #940000;
-/*    background-color: #FFCCCF;*/
 }
 
-div.warning p.admonition-title {
-}
-
-div.admonition ul, div.admonition ol,
-div.warning ul, div.warning ol {
+div.admonition > ul,
+div.admonition > ol,
+div.warning > ul,
+div.warning > ol {
     margin: 0.1em 0.5em 0.5em 3em;
     padding: 0;
 }
diff --git a/doc/extdev/index.rst b/doc/extdev/index.rst
index 95564936c..7b4bbc692 100644
--- a/doc/extdev/index.rst
+++ b/doc/extdev/index.rst
@@ -290,11 +290,36 @@ The following is a list of deprecated interfaces.
      - 4.0
      - ``sphinx.builders.epub3.validate_config_values()``
 
+   * - ``sphinx.builders.html.JSONHTMLBuilder``
+     - 2.0
+     - 4.0
+     - ``sphinx.builders.serializinghtml.JSONHTMLBuilder``
+
+   * - ``sphinx.builders.html.PickleHTMLBuilder``
+     - 2.0
+     - 4.0
+     - ``sphinx.builders.serializinghtml.PickleHTMLBuilder``
+
+   * - ``sphinx.builders.html.SerializingHTMLBuilder``
+     - 2.0
+     - 4.0
+     - ``sphinx.builders.serializinghtml.SerializingHTMLBuilder``
+
    * - ``sphinx.builders.html.SingleFileHTMLBuilder``
      - 2.0
      - 4.0
      - ``sphinx.builders.singlehtml.SingleFileHTMLBuilder``
 
+   * - ``sphinx.builders.html.WebHTMLBuilder``
+     - 2.0
+     - 4.0
+     - ``sphinx.builders.serializinghtml.PickleHTMLBuilder``
+
+   * - ``sphinx.builders.htmlhelp``
+     - 2.0
+     - 4.0
+     - ``sphinxcontrib.htmlhelp``
+
    * - ``sphinx.builders.htmlhelp.HTMLHelpBuilder.open_file()``
      - 2.0
      - 4.0
@@ -370,6 +395,31 @@ The following is a list of deprecated interfaces.
      - 4.0
      - ``sphinxcontrib.jsmath``
 
+   * - ``sphinx.roles.abbr_role()``
+     - 2.0
+     - 4.0
+     - ``sphinx.roles.Abbreviation``
+
+   * - ``sphinx.roles.emph_literal_role()``
+     - 2.0
+     - 4.0
+     - ``sphinx.roles.EmphasizedLiteral``
+
+   * - ``sphinx.roles.menusel_role()``
+     - 2.0
+     - 4.0
+     - ``sphinx.roles.GUILabel`` or ``sphinx.roles.MenuSelection``
+
+   * - ``sphinx.roles.index_role()``
+     - 2.0
+     - 4.0
+     - ``sphinx.roles.Index``
+
+   * - ``sphinx.roles.indexmarkup_role()``
+     - 2.0
+     - 4.0
+     - ``sphinx.roles.PEP`` or ``sphinx.roles.RFC``
+
    * - ``sphinx.testing.util.remove_unicode_literal()``
      - 2.0
      - 4.0
@@ -395,6 +445,11 @@ The following is a list of deprecated interfaces.
      - 3.0
      - N/A
 
+   * - ``sphinx.util.jsonimpl``
+     - 2.0
+     - 4.0
+     - ``sphinxcontrib.serializinghtml.jsonimpl``
+
    * - ``sphinx.util.osutil.EEXIST``
      - 2.0
      - 4.0
@@ -420,6 +475,11 @@ The following is a list of deprecated interfaces.
      - 4.0
      - ``os.walk()``
 
+   * - ``sphinx.util.pycompat.NoneType``
+     - 2.0
+     - 4.0
+     - ``sphinx.util.typing.NoneType``
+
    * - ``sphinx.util.pycompat.TextIOWrapper``
      - 2.0
      - 4.0
@@ -440,6 +500,16 @@ The following is a list of deprecated interfaces.
      - 4.0
      - ``textwrap.indent()``
 
+   * - ``sphinx.util.pycompat.sys_encoding``
+     - 2.0
+     - 4.0
+     - ``sys.getdefaultencoding()``
+
+   * - ``sphinx.util.pycompat.terminal_safe()``
+     - 2.0
+     - 4.0
+     - ``sphinx.util.console.terminal_safe()``
+
    * - ``sphinx.util.pycompat.u``
      - 2.0
      - 4.0
diff --git a/doc/extdev/utils.rst b/doc/extdev/utils.rst
index ebf05629e..3aac51ed9 100644
--- a/doc/extdev/utils.rst
+++ b/doc/extdev/utils.rst
@@ -18,5 +18,11 @@ components (e.g. :class:`.Config`, :class:`.BuildEnvironment` and so on) easily.
 .. autoclass:: sphinx.util.docutils.SphinxDirective
    :members:
 
+.. autoclass:: sphinx.util.docutils.SphinxRole
+   :members:
+
+.. autoclass:: sphinx.util.docutils.ReferenceRole
+   :members:
+
 .. autoclass:: sphinx.transforms.post_transforms.images.ImageConverter
    :members:
diff --git a/doc/usage/builders/index.rst b/doc/usage/builders/index.rst
index 5cc6df31c..3b74a02e1 100644
--- a/doc/usage/builders/index.rst
+++ b/doc/usage/builders/index.rst
@@ -28,6 +28,7 @@ The builder's "name" must be given to the **-b** command-line option of
 
    .. autoattribute:: supported_image_types
 
+.. module:: sphinx.builders.dirhtml
 .. class:: DirectoryHTMLBuilder
 
    This is a subclass of the standard HTML builder.  Its output is a directory
@@ -45,6 +46,7 @@ The builder's "name" must be given to the **-b** command-line option of
 
    .. versionadded:: 0.6
 
+.. module:: sphinx.builders.singlehtml
 .. class:: SingleFileHTMLBuilder
 
    This is an HTML builder that combines the whole project in one output file.
@@ -297,7 +299,7 @@ name is ``rinoh``. Refer to the `rinohtype manual`_ for details.
    .. versionadded:: 1.1
 
 
-.. currentmodule:: sphinx.builders.html
+.. currentmodule:: sphinxcontrib.serializinghtml
 .. class:: SerializingHTMLBuilder
 
    This builder uses a module that implements the Python serialization API
diff --git a/doc/usage/configuration.rst b/doc/usage/configuration.rst
index 8b82147c1..ada9efefc 100644
--- a/doc/usage/configuration.rst
+++ b/doc/usage/configuration.rst
@@ -1331,6 +1331,12 @@ that use Sphinx's HTMLWriter class.
 
    .. versionadded:: 1.6
 
+   .. deprecated:: 2.0
+
+.. confval:: html4_writer
+
+   Output is processed with HTML4 writer.  Default is ``False``.
+
 Options for Single HTML output
 -------------------------------
 
@@ -1561,7 +1567,11 @@ the `Dublin Core metadata `_.
 .. confval:: epub_title
 
    The title of the document.  It defaults to the :confval:`html_title` option
-   but can be set independently for epub creation.
+   but can be set independently for epub creation.  It defaults to the
+   :confval:`project` option.
+
+   .. versionchanged:: 2.0
+      It defaults to the ``project`` option.
 
 .. confval:: epub_description
 
diff --git a/doc/usage/extensions/autodoc.rst b/doc/usage/extensions/autodoc.rst
index 36d497543..cb41cb07d 100644
--- a/doc/usage/extensions/autodoc.rst
+++ b/doc/usage/extensions/autodoc.rst
@@ -237,6 +237,7 @@ inserting them into the page source under a suitable :rst:dir:`py:module`,
 
 
 .. rst:directive:: autofunction
+                   autodecorator
                    autodata
                    automethod
                    autoattribute
@@ -293,10 +294,11 @@ inserting them into the page source under a suitable :rst:dir:`py:module`,
       docstrings.
    .. versionchanged:: 1.1
       Comment docs are now allowed on the same line after an assignment.
-
    .. versionchanged:: 1.2
       :rst:dir:`autodata` and :rst:dir:`autoattribute` have an ``annotation``
       option.
+   .. versionchanged:: 2.0
+      :rst:dir:`autodecorator` added.
 
    .. note::
 
@@ -376,12 +378,12 @@ There are also new config values that you can set:
            'members': 'var1, var2',
            'member-order': 'bysource',
            'special-members': '__init__',
-           'undoc-members': None,
+           'undoc-members': True,
            'exclude-members': '__weakref__'
        }
 
-   Setting ``None`` is equivalent to giving the option name in the list format
-   (i.e. it means "yes/true/on").
+   Setting ``None`` or ``True`` to the value is equivalent to giving only the
+   option name to the directives.
 
    The supported options are ``'members'``, ``'member-order'``,
    ``'undoc-members'``, ``'private-members'``, ``'special-members'``,
@@ -390,6 +392,9 @@ There are also new config values that you can set:
 
    .. versionadded:: 1.8
 
+   .. versionchanged:: 2.0
+      Accepts ``True`` as a value.
+
 .. confval:: autodoc_docstring_signature
 
    Functions imported from C modules cannot be introspected, and therefore the
diff --git a/doc/usage/extensions/autosectionlabel.rst b/doc/usage/extensions/autosectionlabel.rst
index 20b15ca20..caaa5db26 100644
--- a/doc/usage/extensions/autosectionlabel.rst
+++ b/doc/usage/extensions/autosectionlabel.rst
@@ -38,3 +38,10 @@ Configuration
    called ``Introduction`` that appears in document ``index.rst``.  Useful for
    avoiding ambiguity when the same section heading appears in different
    documents.
+
+.. confval:: autosectionlabel_maxdepth
+
+   If set, autosectionlabel chooses the sections for labeling by its depth. For
+   example, when set 1 to ``autosectionlabel_maxdepth``, labels are generated
+   only for top level sections, and deeper sections are not labeled.  It
+   defaults to ``None`` (disabled).
diff --git a/doc/usage/extensions/autosummary.rst b/doc/usage/extensions/autosummary.rst
index c9d04dda8..2bf8a7d1d 100644
--- a/doc/usage/extensions/autosummary.rst
+++ b/doc/usage/extensions/autosummary.rst
@@ -181,6 +181,12 @@ Packages can be explored recursively when generating stub pages.
 
    .. versionadded:: 2.0
 
+.. confval:: autosummary_mock_imports
+
+   This value contains a list of modules to be mocked up.  See
+   :confval:`autodoc_mock_imports` for more details.  It defaults to
+   :confval:`autodoc_mock_imports`.
+
 Customizing templates
 ---------------------
 
diff --git a/doc/usage/extensions/githubpages.rst b/doc/usage/extensions/githubpages.rst
index f19666ef1..6d56a3036 100644
--- a/doc/usage/extensions/githubpages.rst
+++ b/doc/usage/extensions/githubpages.rst
@@ -6,5 +6,11 @@
 
 .. versionadded:: 1.4
 
+.. versionchanged:: 2.0
+   Support ``CNAME`` file
+
 This extension creates ``.nojekyll`` file on generated HTML directory to publish
 the document on GitHub Pages.
+
+It also creates a ``CNAME`` file for custom domains when :confval:`html_baseurl`
+set.
diff --git a/setup.py b/setup.py
index 5b2c38e8c..79c466321 100644
--- a/setup.py
+++ b/setup.py
@@ -18,6 +18,8 @@ install_requires = [
     'sphinxcontrib-applehelp',
     'sphinxcontrib-devhelp',
     'sphinxcontrib-jsmath',
+    'sphinxcontrib-htmlhelp',
+    'sphinxcontrib-serializinghtml',
     'sphinxcontrib-qthelp',
     'Jinja2>=2.3',
     'Pygments>=2.0',
diff --git a/sphinx/__init__.py b/sphinx/__init__.py
index bfa5297d5..0a6f26584 100644
--- a/sphinx/__init__.py
+++ b/sphinx/__init__.py
@@ -32,8 +32,8 @@ if 'PYTHONWARNINGS' not in os.environ:
 warnings.filterwarnings('ignore', "'U' mode is deprecated",
                         DeprecationWarning, module='docutils.io')
 
-__version__ = '2.0.0+'
-__released__ = '2.0.0'  # used when Sphinx builds its own docs
+__version__ = '2.1.0+'
+__released__ = '2.1.0'  # used when Sphinx builds its own docs
 
 #: Version info for better programmatic use.
 #:
@@ -43,7 +43,7 @@ __released__ = '2.0.0'  # used when Sphinx builds its own docs
 #:
 #: .. versionadded:: 1.2
 #:    Before version 1.2, check the string ``sphinx.__version__``.
-version_info = (2, 0, 0, 'beta', 0)
+version_info = (2, 1, 0, 'beta', 0)
 
 package_dir = path.abspath(path.dirname(__file__))
 
diff --git a/sphinx/application.py b/sphinx/application.py
index cce9926b5..6d553333b 100644
--- a/sphinx/application.py
+++ b/sphinx/application.py
@@ -37,7 +37,6 @@ from sphinx.registry import SphinxComponentRegistry
 from sphinx.util import docutils
 from sphinx.util import import_object, progress_message
 from sphinx.util import logging
-from sphinx.util import pycompat  # noqa: F401
 from sphinx.util.build_phase import BuildPhase
 from sphinx.util.console import bold  # type: ignore
 from sphinx.util.docutils import directive_helper
@@ -68,7 +67,6 @@ builtin_extensions = (
     'sphinx.builders.dummy',
     'sphinx.builders.gettext',
     'sphinx.builders.html',
-    'sphinx.builders.htmlhelp',
     'sphinx.builders.latex',
     'sphinx.builders.linkcheck',
     'sphinx.builders.manpage',
@@ -108,6 +106,8 @@ builtin_extensions = (
     # 1st party extensions
     'sphinxcontrib.applehelp',
     'sphinxcontrib.devhelp',
+    'sphinxcontrib.htmlhelp',
+    'sphinxcontrib.serializinghtml',
     'sphinxcontrib.qthelp',
     # Strictly, alabaster theme is not a builtin extension,
     # but it is loaded automatically to use it as default theme.
diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py
index c8cd44e55..335880ef0 100644
--- a/sphinx/builders/__init__.py
+++ b/sphinx/builders/__init__.py
@@ -19,7 +19,7 @@ from sphinx.environment.adapters.asset import ImageAdapter
 from sphinx.errors import SphinxError
 from sphinx.io import read_doc
 from sphinx.locale import __
-from sphinx.util import i18n, import_object, logging, rst, status_iterator
+from sphinx.util import i18n, import_object, logging, rst, progress_message, status_iterator
 from sphinx.util.build_phase import BuildPhase
 from sphinx.util.console import bold  # type: ignore
 from sphinx.util.docutils import sphinx_domains
@@ -351,16 +351,14 @@ class Builder:
         if updated_docnames:
             # save the environment
             from sphinx.application import ENV_PICKLE_FILENAME
-            logger.info(bold(__('pickling environment... ')), nonl=True)
-            with open(path.join(self.doctreedir, ENV_PICKLE_FILENAME), 'wb') as f:
-                pickle.dump(self.env, f, pickle.HIGHEST_PROTOCOL)
-            logger.info(__('done'))
+            with progress_message(__('pickling environment')):
+                with open(path.join(self.doctreedir, ENV_PICKLE_FILENAME), 'wb') as f:
+                    pickle.dump(self.env, f, pickle.HIGHEST_PROTOCOL)
 
             # global actions
             self.app.phase = BuildPhase.CONSISTENCY_CHECK
-            logger.info(bold(__('checking consistency... ')), nonl=True)
-            self.env.check_consistency()
-            logger.info(__('done'))
+            with progress_message(__('checking consistency')):
+                self.env.check_consistency()
         else:
             if method == 'update' and not docnames:
                 logger.info(bold(__('no targets are out of date.')))
@@ -559,9 +557,8 @@ class Builder:
                     docnames.add(tocdocname)
         docnames.add(self.config.master_doc)
 
-        logger.info(bold(__('preparing documents... ')), nonl=True)
-        self.prepare_writing(docnames)
-        logger.info(__('done'))
+        with progress_message(__('preparing documents')):
+            self.prepare_writing(docnames)
 
         if self.parallel_ok:
             # number of subprocesses is parallel-1 because the main process
diff --git a/sphinx/builders/_epub_base.py b/sphinx/builders/_epub_base.py
index 5516fdaf8..00fa7187d 100644
--- a/sphinx/builders/_epub_base.py
+++ b/sphinx/builders/_epub_base.py
@@ -134,8 +134,6 @@ class EpubBuilder(StandaloneHTMLBuilder):
     html_scaled_image_link = False
     # don't generate search index or include search page
     search = False
-    # use html5 translator by default
-    default_html5_translator = True
 
     coverpage_name = COVERPAGE_NAME
     toctree_template = TOCTREE_TEMPLATE
@@ -655,7 +653,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
         if incr:
             self.playorder += 1
         self.tocid += 1
-        return NavPoint(self.esc('navPoint%d' % self.tocid), self.playorder,
+        return NavPoint('navPoint%d' % self.tocid, self.playorder,
                         node['text'], node['refuri'], [])
 
     def build_navpoints(self, nodes):
diff --git a/sphinx/builders/epub3.py b/sphinx/builders/epub3.py
index 83088bb45..f97d96396 100644
--- a/sphinx/builders/epub3.py
+++ b/sphinx/builders/epub3.py
@@ -269,7 +269,7 @@ def setup(app):
     app.add_config_value('epub_version', 3.0, 'epub')  # experimental
     app.add_config_value('epub_theme', 'epub', 'epub')
     app.add_config_value('epub_theme_options', {}, 'epub')
-    app.add_config_value('epub_title', lambda self: self.html_title, 'epub')
+    app.add_config_value('epub_title', lambda self: self.project, 'epub')
     app.add_config_value('epub_author', lambda self: self.author, 'epub')
     app.add_config_value('epub_language', lambda self: self.language or 'en', 'epub')
     app.add_config_value('epub_publisher', lambda self: self.author, 'epub')
diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py
index 09ba8d677..2c5ebcd4d 100644
--- a/sphinx/builders/html.py
+++ b/sphinx/builders/html.py
@@ -9,16 +9,13 @@
 """
 
 import html
-import pickle
 import posixpath
 import re
 import sys
-import types
 import warnings
 from hashlib import md5
 from os import path
 
-import docutils
 from docutils import nodes
 from docutils.core import publish_parts
 from docutils.frontend import OptionParser
@@ -26,7 +23,6 @@ from docutils.io import DocTreeInput, StringOutput
 from docutils.utils import relative_path
 
 from sphinx import package_dir, __display_version__
-from sphinx.application import ENV_PICKLE_FILENAME
 from sphinx.builders import Builder
 from sphinx.deprecation import (
     RemovedInSphinx30Warning, RemovedInSphinx40Warning, deprecated_alias
@@ -39,15 +35,14 @@ from sphinx.highlighting import PygmentsBridge
 from sphinx.locale import _, __
 from sphinx.search import js_index
 from sphinx.theming import HTMLThemeFactory
-from sphinx.util import jsonimpl, logging, status_iterator
+from sphinx.util import logging, status_iterator
 from sphinx.util.console import bold  # type: ignore
 from sphinx.util.docutils import is_html5_writer_available, new_document
 from sphinx.util.fileutil import copy_asset
 from sphinx.util.i18n import format_date
 from sphinx.util.inventory import InventoryFile
 from sphinx.util.matching import patmatch, Matcher, DOTFILES
-from sphinx.util.osutil import SEP, os_path, relative_uri, ensuredir, \
-    movefile, copyfile
+from sphinx.util.osutil import os_path, relative_uri, ensuredir, movefile, copyfile
 from sphinx.writers.html import HTMLWriter, HTMLTranslator
 
 if False:
@@ -58,7 +53,7 @@ if False:
     from sphinx.domains import Domain, Index, IndexEntry  # NOQA
     from sphinx.util.tags import Tags  # NOQA
 
-# Experimental HTML5 Writer
+# HTML5 Writer is avialable or not
 if is_html5_writer_available():
     from sphinx.writers.html5 import HTML5Translator
     html5_ready = True
@@ -67,8 +62,6 @@ else:
 
 #: the filename for the inventory of objects
 INVENTORY_FILENAME = 'objects.inv'
-#: the filename for the "last build" file (for serializing builders)
-LAST_BUILD_FILENAME = 'last_build'
 
 logger = logging.getLogger(__name__)
 return_codes_re = re.compile('[\r\n]+')
@@ -116,24 +109,24 @@ class JSContainer(list):
     """The container for JavaScript scripts."""
     def insert(self, index, obj):
         # type: (int, str) -> None
-        warnings.warn('builder.script_files is deprecated. '
-                      'Please use app.add_js_file() instead.',
-                      RemovedInSphinx30Warning, stacklevel=2)
+        warnings.warn('To modify script_files in the theme is deprecated. '
+                      'Please insert a