diff --git a/doc/RELEASE_WALKTHROUGH.rst.txt b/doc/RELEASE_WALKTHROUGH.rst.txt
index 9d69eb2db64c..df8c9c45a383 100644
--- a/doc/RELEASE_WALKTHROUGH.rst.txt
+++ b/doc/RELEASE_WALKTHROUGH.rst.txt
@@ -11,8 +11,8 @@ Building the release
 Checkout the branch for the release, make sure it is up to date, and clean the
 repository::
 
-    $ git checkout maintenance/1.12.x
-    $ git pull upstream maintenance/1.12.x
+    $ git checkout maintenance/1.14.x
+    $ git pull upstream maintenance/1.14.x
     $ git submodule update
     $ git clean -xdf
 
@@ -20,12 +20,12 @@ Look at the git log to get the hash of the last commit in the release, then
 check it out::
 
     $ git log
-    $ git checkout f59a2fbbd497dbaf3a2e405a41e52dc5e331bfa7
+    $ git checkout 7849751173fb47a5f17761b3515b42b4d8ce1197
 
 Edit pavement.py and setup.py as detailed in HOWTO_RELEASE::
 
     $ gvim pavement.py setup.py
-    $ git commit -a -m"REL: NumPy 1.12.0 release."
+    $ git commit -a -m"REL: NumPy 1.14.1 release."
 
 Sanity check::
 
@@ -34,86 +34,102 @@ Sanity check::
 
 Tag it,and build the source distribution archives::
 
-    $ git tag -s v1.12.0
+    $ git tag -s v1.14.1
     $ paver sdist # sdist will do a git clean -xdf, so we omit that
 
 Check that the files in ``release/installers`` have the correct versions, then
 push the tag upstream; generation of the wheels for PyPI needs it::
 
-    $ git push upstream v1.12.0
+    $ git push upstream v1.14.1
 
 Trigger the wheels build. This can take a while. The numpy-wheels repository is
 cloned from `<https://github.com/MacPython/numpy-wheels>`_. Start with a pull
 as the repo may have been accessed and changed by someone else and a push will
-fail. The ``.travis.yml`` and ``appveyor.yml`` files need to be edited to make
-sure they have the correct version, search for ``BUILD_COMMIT``. If you get
-nervous at the amount of time taken -- the builds can take several hours-- you
-can check the build progress by following the links provided at
-`<https://github.com/MacPython/numpy-wheels>`_ to check the travis and appveyor
-build status.
+fail.
 
     $ cd ../numpy-wheels
     $ git pull origin master
+    $ git branch <new version>  # only when starting new numpy version
+    $ git checkout v1.14.x  # v1.14.x already existed for the 1.14.1 release
+
+The ``.travis.yml`` and ``appveyor.yml`` files need to be edited to make
+sure they have the correct version, search for ``BUILD_COMMIT``.
+
     $ gvim .travis.yml appveyor.yml
     $ git commit -a
     $ git push origin HEAD
 
-Upload to PyPI
---------------
+Now wait. If you get nervous at the amount of time taken -- the builds can take
+several hours-- you can check the build progress by following the links
+provided at `<https://github.com/MacPython/numpy-wheels>`_ to check the travis
+and appveyor build status. Check if all the needed wheels have been built and
+uploaded before proceeding. There should currently be 22 of them at
+`<https://wheels.scipy.org>`_, 4 for Mac, 8 for Windows, and 10 for Linux.
 
-Upload to PyPI using the ``wheel-uploader``. The terryfy repository is
-cloned from `<https://github.com/MacPython/terryfy>`_. Uploading can be a
-hassle due to the site itself having problems. If you get strange messages, put
-it off for the next day. To begin, check if all the needed wheels have been
-built. There should be 22 of them at `<https://wheels.scipy.org>`_, 4 for Mac,
-8 for Windows, and 10 for Linux. Here the wheelhouse directory is in the home
-directory. Then upload the wheels. You will need to sign every file separately
-in the process, keeping the pass phrase in the clipboard and pasting it in will
-make that easier::
+
+Download wheels
+---------------
+
+When the wheels have all been built, download them using the ``wheel-uploader``
+in the ``terryfy`` repository.  The terryfy repository may be cloned from
+`<https://github.com/MacPython/terryfy>`_ if you don't already have it.  The
+wheels can also be uploaded using the ``wheel-uploader``, but we prefer to
+download all the wheels to the ``../numpy/release/installers`` directory and
+upload later using ``twine``.
 
     $ cd ../terryfy
     $ git pull origin master
     $ CDN_URL=https://3f23b170c54c2533c070-1c8a9b3114517dc5fe17b7c3f8c63a43.ssl.cf2.rackcdn.com
-    $ ./wheel-uploader -r warehouse -u $CDN_URL -s -v -w ~/wheelhouse -t win numpy 1.12.0
-    $ ./wheel-uploader -r warehouse -u $CDN_URL -s -v -w ~/wheelhouse -t manylinux1 numpy 1.12.0
-    $ ./wheel-uploader -r warehouse -u $CDN_URL -s -v -w ~/wheelhouse -t macosx numpy 1.12.0
+    $ NPY_WHLS=../numpy/release/installers
+    $ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t win numpy 1.14.1
+    $ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t manylinux1 numpy 1.14.1
+    $ ./wheel-uploader -u $CDN_URL -n -v -w $NPY_WHLS -t macosx numpy 1.14.1
+
+If you do this often, consider making CDN_URL and NPY_WHLS part of your default
+environment.
 
-If one of the commands breaks in the middle, you may need to manually upload
-the rest of the files using twine because wheel-uploader always starts from the
-beginning and PyPI does not allow the same file to be uploaded twice.
 
-The source files should be uploaded last to avoid problems. PyPI will only allow
-a single source distribution, here it is the zip archive::
+Upload to PyPI
+--------------
+
+Upload to PyPI using ``twine``.  The choice here is to sign the files, so will
+need to sign every file separately when they are uploaded, keeping the gpg pass
+phrase in the clipboard and pasting it in will make that easier. We may chose
+to forgo the signing in the future::
 
     $ cd ../numpy
-    $ twine upload -s release/installers/numpy-1.12.0.zip
+    $ twine upload -s release/installers/*.whl
+    $ twine upload -s release/installers/numpy-1.14.1.zip  # Upload last.
+
+If one of the commands breaks in the middle, which is not uncommon, you may
+need to selectively upload the remaining files becuase PyPI does not allow the
+same file to be uploaded twice. The source file should be uploaded last to
+avoid synchronization problems if pip users access the files while this is in
+process. Note that PyPI only allows a single source distribution, here we have
+chosen the zip archive.
 
 If this is not a final release, log into PyPI and hide the new directory while
-making sure the last final release is visible.
+making sure the last stable release is visible.
 
-Upload tarballs to github
--------------------------
-We want to post the hash values for the files uploaded to PyPI in the release
-generated README file, so first copy the wheels into the installers directory
-and remove the now unneeded signature files::
 
-    $ cp ~/wheelhouse/numpy-1.12.0* release/installers
-    $ rm release/installers/*.asc
+Upload files to github
+----------------------
 
-Generate the ``release/Changelog`` and ``release/README`` files::
+Generate the ``release/README`` files::
 
+    $ rm release/installers/*.asc
     $ paver write_release_and_log
 
-Go to `<https://github.com/numpy/numpy/releases>`_, there should be a
-``v1.12.0 tag``, hit the edit button for that tag. There are two ways to add
-files, using an editable text window and as binary uploads.
+Go to `<https://github.com/numpy/numpy/releases>`_, there should be a ``v1.14.1
+tag``, click on it and hit the edit button for that tag. There are two ways to
+add files, using an editable text window and as binary uploads.
 
-- Cut-and-paste the ``release/README.md`` file contents into the text window.
+- Cut and paste the ``release/README.md`` file contents into the text window.
 - Upload ``release/installers/numpy-1.12.0.tar.gz`` as a binary file.
 - Upload ``release/installers/numpy-1.12.0.zip`` as a binary file.
 - Upload ``release/README`` as a binary file.
-- Upload ``release/Changelog`` as a binary file (maybe).
-- Check the pre-release button for pre-releases.
+- Upload ``doc/changelog/1.14.1-changelog.rst`` as a binary file.
+- Check the pre-release button if this is a pre-releases.
 - Hit the ``{Publish,Update} release`` button at the bottom.
 
 
@@ -127,7 +143,7 @@ upload the documentation. Otherwise::
 
     $ pushd doc
     $ make dist
-    $ make upload USERNAME=<yourname> RELEASE=v1.12.0
+    $ make upload USERNAME=<yourname> RELEASE=v1.14.1
     $ popd
 
 If the release series is a new one, you will need to rebuild and upload the
@@ -148,7 +164,7 @@ This assumes that you have forked `<https://github.com/scipy/scipy.org>`_::
     $ cd ../scipy.org
     $ git checkout master
     $ git pull upstream master
-    $ git checkout -b numpy-1.12.0
+    $ git checkout -b numpy-1.14.1
     $ gvim www/index.rst # edit the News section
     $ git commit -a
     $ git push origin HEAD
@@ -164,7 +180,7 @@ announcements for the basic template. The contributor list can be generated as
 follows::
 
     $ cd ../numpy
-    $ ./tools/announce.py  $GITHUB v1.11.0..v1.12.0 > tmp.rst
+    $ ./tools/changelog.py  $GITHUB v1.14.0..v1.14.1 > tmp.rst
 
 The contents of ``tmp.rst`` can then be cut and pasted into the announcement
 email.
diff --git a/doc/changelog/1.14.1-changelog.rst b/doc/changelog/1.14.1-changelog.rst
new file mode 100644
index 000000000000..71424cb15350
--- /dev/null
+++ b/doc/changelog/1.14.1-changelog.rst
@@ -0,0 +1,63 @@
+
+Contributors
+============
+
+A total of 14 people contributed to this release.  People with a "+" by their
+names contributed a patch for the first time.
+
+* Allan Haldane
+* Charles Harris
+* Daniel Smith
+* Dennis Weyland +
+* Eric Larson
+* Eric Wieser
+* Jarrod Millman
+* Kenichi Maehashi +
+* Marten van Kerkwijk
+* Mathieu Lamarre
+* Sebastian Berg
+* Simon Conseil
+* Simon Gibbons
+* xoviat
+
+Pull requests merged
+====================
+
+A total of 36 pull requests were merged for this release.
+
+* `#10339 <https://github.com/numpy/numpy/pull/10339>`__: BUG: restrict the __config__ modifications to win32
+* `#10368 <https://github.com/numpy/numpy/pull/10368>`__: MAINT: Adjust type promotion in linalg.norm
+* `#10375 <https://github.com/numpy/numpy/pull/10375>`__: BUG: add missing paren and remove quotes from repr of fieldless...
+* `#10395 <https://github.com/numpy/numpy/pull/10395>`__: MAINT: Update download URL in setup.py.
+* `#10396 <https://github.com/numpy/numpy/pull/10396>`__: BUG: fix einsum issue with unicode input and py2
+* `#10397 <https://github.com/numpy/numpy/pull/10397>`__: BUG: fix error message not formatted in einsum
+* `#10398 <https://github.com/numpy/numpy/pull/10398>`__: DOC: add documentation about how to handle new array printing
+* `#10403 <https://github.com/numpy/numpy/pull/10403>`__: BUG: Set einsum optimize parameter default to `False`.
+* `#10424 <https://github.com/numpy/numpy/pull/10424>`__: ENH: Fix repr of np.record objects to match np.void types #10412
+* `#10425 <https://github.com/numpy/numpy/pull/10425>`__: MAINT: Update zesty to artful for i386 testing
+* `#10431 <https://github.com/numpy/numpy/pull/10431>`__: REL: Add 1.14.1 release notes template
+* `#10435 <https://github.com/numpy/numpy/pull/10435>`__: MAINT: Use ValueError for duplicate field names in lookup (backport)
+* `#10534 <https://github.com/numpy/numpy/pull/10534>`__: BUG: Provide a better error message for out-of-order fields
+* `#10536 <https://github.com/numpy/numpy/pull/10536>`__: BUG: Resize bytes_ columns in genfromtxt (backport of #10401)
+* `#10537 <https://github.com/numpy/numpy/pull/10537>`__: BUG: multifield-indexing adds padding bytes: revert for 1.14.1
+* `#10539 <https://github.com/numpy/numpy/pull/10539>`__: BUG: fix np.save issue with python 2.7.5
+* `#10540 <https://github.com/numpy/numpy/pull/10540>`__: BUG: Add missing DECREF in Py2 int() cast
+* `#10541 <https://github.com/numpy/numpy/pull/10541>`__: TST: Add circleci document testing to maintenance/1.14.x
+* `#10542 <https://github.com/numpy/numpy/pull/10542>`__: BUG: complex repr has extra spaces, missing + (1.14 backport)
+* `#10550 <https://github.com/numpy/numpy/pull/10550>`__: BUG: Set missing exception after malloc
+* `#10557 <https://github.com/numpy/numpy/pull/10557>`__: BUG: In numpy.i, clear CARRAY flag if wrapped buffer is not C_CONTIGUOUS.
+* `#10558 <https://github.com/numpy/numpy/pull/10558>`__: DEP: Issue FutureWarning when malformed records detected.
+* `#10559 <https://github.com/numpy/numpy/pull/10559>`__: BUG: Fix einsum optimize logic for singleton dimensions
+* `#10560 <https://github.com/numpy/numpy/pull/10560>`__: BUG: Fix calling ufuncs with a positional output argument.
+* `#10561 <https://github.com/numpy/numpy/pull/10561>`__: BUG: Fix various Big-Endian test failures (ppc64)
+* `#10562 <https://github.com/numpy/numpy/pull/10562>`__: BUG: Make dtype.descr error for out-of-order fields.
+* `#10563 <https://github.com/numpy/numpy/pull/10563>`__: BUG: arrays not being flattened in `union1d`
+* `#10607 <https://github.com/numpy/numpy/pull/10607>`__: MAINT: Update sphinxext submodule hash.
+* `#10608 <https://github.com/numpy/numpy/pull/10608>`__: BUG: Revert sort optimization in np.unique.
+* `#10609 <https://github.com/numpy/numpy/pull/10609>`__: BUG: infinite recursion in str of 0d subclasses
+* `#10610 <https://github.com/numpy/numpy/pull/10610>`__: BUG: Align type definition with generated lapack
+* `#10612 <https://github.com/numpy/numpy/pull/10612>`__: BUG/ENH: Improve output for structured non-void types
+* `#10622 <https://github.com/numpy/numpy/pull/10622>`__: BUG: deallocate recursive closure in arrayprint.py (1.14 backport)
+* `#10624 <https://github.com/numpy/numpy/pull/10624>`__: BUG: Correctly identify comma seperated dtype strings
+* `#10629 <https://github.com/numpy/numpy/pull/10629>`__: BUG: deallocate recursive closure in arrayprint.py (backport...
+* `#10630 <https://github.com/numpy/numpy/pull/10630>`__: REL: Prepare for 1.14.1 release.
diff --git a/doc/release/1.14.1-notes.rst b/doc/release/1.14.1-notes.rst
index d0512f9b1caa..c280c94cd4cb 100644
--- a/doc/release/1.14.1-notes.rst
+++ b/doc/release/1.14.1-notes.rst
@@ -2,20 +2,91 @@
 NumPy 1.14.1 Release Notes
 ==========================
 
-This is a bugfix release for some problems found since 1.14.0. This release
-includes fixes to the spacing in the str and repr of complex values.
+This is a bugfix release for some problems reported following the 1.14.0 release. The major
+problems fixed are the following.
 
-The Python versions supported are 2.7 and 3.4 - 3.6. The Python 3.6 wheels
-available from PIP are built with Python 3.6.2 and should be compatible with
-all previous versions of Python 3.6. It was cythonized with Cython 0.26.1,
-which should be free of the bugs found in 0.27 while also being compatible with
-Python 3.7-dev.
+* Problems with the new array printing, particularly the printing of complex
+  values, Please report any additional problems that may turn up.
+* Problems with ``np.einsum`` due to the new ``optimized=True`` default. Some
+  fixes for optimization have been applied and ``optimize=False`` is now the
+  default.
+* The sort order in ``np.unique`` when ``axis=<some-number>`` will now always
+  be lexicographic in the subarray elements. In previous NumPy versions there
+  was an optimization that could result in sorting the subarrays as unsigned
+  byte strings.
+* The change in 1.14.0 that multi-field indexing of structured arrays returns a
+  view instead of a copy has been reverted but remains on track for NumPy 1.15.
+  Affected users should read the 1.14.1 Numpy User Guide section
+  "basics/structured arrays/accessing multiple fields" for advice on how to
+  manage this transition.
+
+The Python versions supported in this release are 2.7 and 3.4 - 3.6. The Python
+3.6 wheels available from PIP are built with Python 3.6.2 and should be
+compatible with all previous versions of Python 3.6. The source releases were
+cythonized with Cython 0.26.1, which is known to **not** support the upcoming
+Python 3.7 release.  People who wish to run Python 3.7 should check out the
+NumPy repo and try building with the, as yet, unreleased master branch of
+Cython.
 
 Contributors
 ============
 
-A total of xx people contributed to this release.  People with a "+" by their
+A total of 14 people contributed to this release.  People with a "+" by their
 names contributed a patch for the first time.
 
+* Allan Haldane
+* Charles Harris
+* Daniel Smith
+* Dennis Weyland +
+* Eric Larson
+* Eric Wieser
+* Jarrod Millman
+* Kenichi Maehashi +
+* Marten van Kerkwijk
+* Mathieu Lamarre
+* Sebastian Berg
+* Simon Conseil
+* Simon Gibbons
+* xoviat
+
 Pull requests merged
 ====================
+
+A total of 36 pull requests were merged for this release.
+
+* `#10339 <https://github.com/numpy/numpy/pull/10339>`__: BUG: restrict the __config__ modifications to win32
+* `#10368 <https://github.com/numpy/numpy/pull/10368>`__: MAINT: Adjust type promotion in linalg.norm
+* `#10375 <https://github.com/numpy/numpy/pull/10375>`__: BUG: add missing paren and remove quotes from repr of fieldless...
+* `#10395 <https://github.com/numpy/numpy/pull/10395>`__: MAINT: Update download URL in setup.py.
+* `#10396 <https://github.com/numpy/numpy/pull/10396>`__: BUG: fix einsum issue with unicode input and py2
+* `#10397 <https://github.com/numpy/numpy/pull/10397>`__: BUG: fix error message not formatted in einsum
+* `#10398 <https://github.com/numpy/numpy/pull/10398>`__: DOC: add documentation about how to handle new array printing
+* `#10403 <https://github.com/numpy/numpy/pull/10403>`__: BUG: Set einsum optimize parameter default to `False`.
+* `#10424 <https://github.com/numpy/numpy/pull/10424>`__: ENH: Fix repr of np.record objects to match np.void types #10412
+* `#10425 <https://github.com/numpy/numpy/pull/10425>`__: MAINT: Update zesty to artful for i386 testing
+* `#10431 <https://github.com/numpy/numpy/pull/10431>`__: REL: Add 1.14.1 release notes template
+* `#10435 <https://github.com/numpy/numpy/pull/10435>`__: MAINT: Use ValueError for duplicate field names in lookup (backport)
+* `#10534 <https://github.com/numpy/numpy/pull/10534>`__: BUG: Provide a better error message for out-of-order fields
+* `#10536 <https://github.com/numpy/numpy/pull/10536>`__: BUG: Resize bytes_ columns in genfromtxt (backport of #10401)
+* `#10537 <https://github.com/numpy/numpy/pull/10537>`__: BUG: multifield-indexing adds padding bytes: revert for 1.14.1
+* `#10539 <https://github.com/numpy/numpy/pull/10539>`__: BUG: fix np.save issue with python 2.7.5
+* `#10540 <https://github.com/numpy/numpy/pull/10540>`__: BUG: Add missing DECREF in Py2 int() cast
+* `#10541 <https://github.com/numpy/numpy/pull/10541>`__: TST: Add circleci document testing to maintenance/1.14.x
+* `#10542 <https://github.com/numpy/numpy/pull/10542>`__: BUG: complex repr has extra spaces, missing + (1.14 backport)
+* `#10550 <https://github.com/numpy/numpy/pull/10550>`__: BUG: Set missing exception after malloc
+* `#10557 <https://github.com/numpy/numpy/pull/10557>`__: BUG: In numpy.i, clear CARRAY flag if wrapped buffer is not C_CONTIGUOUS.
+* `#10558 <https://github.com/numpy/numpy/pull/10558>`__: DEP: Issue FutureWarning when malformed records detected.
+* `#10559 <https://github.com/numpy/numpy/pull/10559>`__: BUG: Fix einsum optimize logic for singleton dimensions
+* `#10560 <https://github.com/numpy/numpy/pull/10560>`__: BUG: Fix calling ufuncs with a positional output argument.
+* `#10561 <https://github.com/numpy/numpy/pull/10561>`__: BUG: Fix various Big-Endian test failures (ppc64)
+* `#10562 <https://github.com/numpy/numpy/pull/10562>`__: BUG: Make dtype.descr error for out-of-order fields.
+* `#10563 <https://github.com/numpy/numpy/pull/10563>`__: BUG: arrays not being flattened in `union1d`
+* `#10607 <https://github.com/numpy/numpy/pull/10607>`__: MAINT: Update sphinxext submodule hash.
+* `#10608 <https://github.com/numpy/numpy/pull/10608>`__: BUG: Revert sort optimization in np.unique.
+* `#10609 <https://github.com/numpy/numpy/pull/10609>`__: BUG: infinite recursion in str of 0d subclasses
+* `#10610 <https://github.com/numpy/numpy/pull/10610>`__: BUG: Align type definition with generated lapack
+* `#10612 <https://github.com/numpy/numpy/pull/10612>`__: BUG/ENH: Improve output for structured non-void types
+* `#10622 <https://github.com/numpy/numpy/pull/10622>`__: BUG: deallocate recursive closure in arrayprint.py (1.14 backport)
+* `#10624 <https://github.com/numpy/numpy/pull/10624>`__: BUG: Correctly identify comma seperated dtype strings
+* `#10629 <https://github.com/numpy/numpy/pull/10629>`__: BUG: deallocate recursive closure in arrayprint.py (backport...
+* `#10630 <https://github.com/numpy/numpy/pull/10630>`__: REL: Prepare for 1.14.1 release.
diff --git a/doc/source/release.rst b/doc/source/release.rst
index 977369a7c14c..0bb759dce3e7 100644
--- a/doc/source/release.rst
+++ b/doc/source/release.rst
@@ -3,6 +3,7 @@ Release Notes
 *************
 
 .. include:: ../release/1.15.0-notes.rst
+.. include:: ../release/1.14.1-notes.rst
 .. include:: ../release/1.14.0-notes.rst
 .. include:: ../release/1.13.3-notes.rst
 .. include:: ../release/1.13.2-notes.rst