diff --git a/.travis.yml b/.travis.yml
index 29b0192..7fa7de6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,12 +2,13 @@
 sudo: false
 
 node_js: 
-    - "6"
-    - "8"
-    - "10"
+    - 6
+    - 8
+    - 10
+    - 12
 
 install: 
-    - "npm install"
+    - npm install
 
 script:
-    - "npm test"
+    - npm test
diff --git a/appveyor.yml b/appveyor.yml
index f34dfbd..6fd0acd 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -3,9 +3,14 @@
 
 environment:
   matrix:
-  - nodejs_version: "6"
-  - nodejs_version: "8"
-  - nodejs_version: "10"
+  - nodejs_version: 6
+  - nodejs_version: 8
+  - nodejs_version: 10
+  - nodejs_version: 12
+
+matrix:
+  allow_failures:
+    - nodejs_version: 12
 
 install:
   - ps: Install-Product node $env:nodejs_version
diff --git a/docs/platforms-release-process.md b/docs/platforms-release-process.md
index 69abc5d..d50f81d 100644
--- a/docs/platforms-release-process.md
+++ b/docs/platforms-release-process.md
@@ -21,24 +21,22 @@
 
 # Release Process for Cordova Platforms
 
-This page describes the technical steps for doing a `Platforms Release`.
+This page describes the technical steps for doing a Platforms Release.
 
 ## Table of contents
 
-It describes the following steps:
-
 - [General instructions](#general-instructions)
   * [Read first](#read-first)
   * [Repository setup](#repository-setup)
 - [Before you start](#before-you-start)
-  * [Read through Apache release policy](#read-through-apache-release-policy)
+  * [Choose a Release Identifier](#choose-a-release-identifier)
   * [Request buy-in](#request-buy-in)
 - [Before Release](#before-release)
-  * [npm audit check](#npm-audit-check)
+  * [Make sure you're up-to-date](#make-sure-youre-up-to-date)
   * [Check dependencies](#check-dependencies)
-  * [Resolve any outdated dependencies](#resolve-any-outdated-dependencies)
+    - [Resolve any outdated dependencies](#resolve-any-outdated-dependencies)
+  * [`npm audit` check](#npm-audit-check)
   * [License Check](#license-check)
-  * [Create JIRA issue](#create-jira-issue)
 - [Prepare Release](#prepare-release)
   * [Optional: Set release version in `package.json`](#optional-set-release-version-in-packagejson)
     - [Remove the `-dev` suffix from version](#remove-the--dev-suffix-from-version)
@@ -56,7 +54,7 @@
   * [4) `cordova-lib` tests](#4-cordova-lib-tests)
   * [5) Clean up](#5-clean-up)
   * [When a regression is found](#when-a-regression-is-found)
-  * [To submit a fix](#to-submit-a-fix)
+    - [To submit a fix](#to-submit-a-fix)
 - [Push Changes](#push-changes)
   * [Push commits](#push-commits)
   * [Tag and push tag](#tag-and-push-tag)
@@ -68,14 +66,13 @@
   * [Start VOTE Thread](#start-vote-thread)
   * [Email the result of the vote](#email-the-result-of-the-vote)
   * [If the Vote does *not* Pass](#if-the-vote-does-not-pass)
-  * [Otherwise: Publish real release to `dist/` & npm](#otherwise-publish-real-release-to-dist--npm)
+  * [Otherwise: Publish release to `dist/` & npm](#otherwise-publish-release-to-dist--npm)
   * [(Android only) Uploading to Bintray](#android-only-uploading-to-bintray)
   * [Add permanent Apache release tag to repository](#add-permanent-apache-release-tag-to-repository)
 - [Follow up steps](#follow-up-steps)
   * [Tell Apache about Release](#tell-apache-about-release)
   * [Email a release announcement to the mailing list](#email-a-release-announcement-to-the-mailing-list)
   * [Announce It!](#announce-it)
-  * [Close JIRA issue](#close-jira-issue)
   * [Finally](#finally)
 - [Other stuff that should be reviewed and moved up to the appropriate places](#other-stuff-that-should-be-reviewed-and-moved-up-to-the-appropriate-places)
   * [Update the Docs](#update-the-docs)
@@ -83,7 +80,6 @@
     
 <!-- created with https://ecotrust-canada.github.io/markdown-toc/ and some manual fixing -->
 
-(Yes this list is long and scary, but represents the content below)
 
 ## General instructions
 
@@ -98,11 +94,22 @@
 You should have your platform repository checked out in a folder where you also have checked out all/most/some of the other Cordova repositories. If you followed the [Cloning/Updating Cordova repositories
 ](../README.md#cloningupdating-cordova-repositories) instructions of `cordova-coho`, this should already be the case.
 
+
 ## Before you start
 
-### Read through Apache release policy
 
-Read through the [Apache Releases Policy](http://www.apache.org/dev/release) as stated above. 
+### Choose a Release Identifier
+
+Releases are identified by a "Release Identifier" that is used in commit messages and for temporary folders. 
+
+Good choices are unique and have a direct relation to the release you are about to perform. Examples for valid identifiers would be `android20190506` or `android@503`. You can also create a release issue and use that (including the repository name): `cordova-android#123`.
+
+Then set it as an environment variable:
+
+```
+RELEASE=android20190506
+echo $RELEASE
+```
 
 ### Request buy-in
 
@@ -121,19 +128,16 @@
 
 Note that it would be possible to continue with some of the [Before Release](#before-release) items while waiting for a possible response.
 
+
 ## Before Release
 
-### npm audit check
-
-Ensure that the latest version of npm is installed (using a command such as `npm i npm@latest`), `package-lock.json` is present (do `npm i --package-lock-only` if needed), and then check:
-
-    (cd cordova-android && npm audit)
-
-### Check dependencies
+### Make sure you're up-to-date
 
 Ensure your checkout of the repository is up-to-date:
 
-    coho repo-update -r android
+    coho repo-update -r android   # updates the repos
+
+### Check dependencies
 
 See if any dependencies are outdated
 
@@ -141,16 +145,24 @@
 
 (The `--depth=0` prevents from listing dependencies of dependencies.)
 
-### Resolve any outdated dependencies
+#### Resolve any outdated dependencies
 
 **Alternative 1:**
 
 - Explicitly pin the outdated dependency versions in the `dependencies` section of `package.json`.
-- Raise a new JIRA issue to update the dependencies in an upcoming release.
+- Raise a new issue to update the dependencies in an upcoming release.
 
 **Alternative 2:**
 
-Within a new JIRA issue: update any outdated dependencies in the project's `package.json` file. Be sure to run through the test section below for compatibility issues.
+Within a new Pull Request: update any outdated dependencies in the project's `package.json` file. Be sure to run through the test section below for compatibility issues.
+
+### `npm audit` check
+
+Ensure that the latest version of npm is installed (using a command such as `npm i npm@latest`), `package-lock.json` is present (do `npm i --package-lock-only` if needed), and then check:
+
+    (cd cordova-android && npm audit)
+
+TODO Get rid of package-lock.json afterwards
 
 ### License Check
 
@@ -162,21 +174,6 @@
 
     coho check-license -r android
 
-### Create JIRA issue
-
-After waiting for any possible objections from the email sent according to the [Request buy-in](#request-buy-in) section above:
-
- * Create a JIRA issue to track the status of the release.
-   - Make it of type "Task"
-   - Title should be "Cordova-Android Platform Release _August 21, 2014_"
-   - Description should be: "Following steps at https://github.com/apache/cordova-coho/blob/master/docs/platforms-release-process.md"
- * Comments should be added to this bug after each top-level step below is taken
- * Set a variable in your terminal for use later on
-
-
-```
-JIRA="CB-????" # Set this to the release bug.
-```
 
 ## Prepare Release
 
@@ -211,6 +208,7 @@
     coho update-release-notes -r android
 
 (`--from-tag` and/or `--to-tag` may be needed in case of non-master branch)
+TODO what does that mean? Examples.
 
 Then curate:
 
@@ -222,9 +220,9 @@
 
 Commit these changes together in a single commit (one commit).
 
-    (cd cordova-android && v="$(grep '"version"' package.json | cut -d'"' -f4)" && git commit -am "$JIRA Update RELEASENOTES & version for release $v")
+    (cd cordova-android && v="$(grep '"version"' package.json | cut -d'"' -f4)" && git commit -am "Update RELEASENOTES & version for release $v ($RELEASE)")
 
-(Should be "$JIRA Update RELEASENOTES.md for release $v" in case `version` is not yet updated in `package.json`.)
+(Should be `Update RELEASENOTES.md for release $v ($RELEASE)` in case `version` is not yet updated in `package.json`.)
 
 ### Special Case 1: Release notes in release branch for patch release
 
@@ -246,7 +244,7 @@
 1. Creates a release branch `5.0.x` (if it doesn't already exist)
 2. Updates `cordova.js` snapshot on both `5.0.x` and `master`
 3. Propagates version number from `--version` argument (or from `package.json` if there is no `--version` argument) to all other files (`VERSION` and similar [e.g. `build.gradle` for Android]) on the release branch `5.0.x`
-4. Prepares `master` for future development already: It gives version (`package.json`, `VERSION` and similar) a minor bump and adds `-dev` (=> `5.1.0-dev`) again
+4. Prepares `master` for future development already: It gives version (`package.json`, `VERSION` and similar) a minor bump and adds `-dev` (=> `5.1.0-dev`) back
 
 Run the following command (make sure to replace the version below with what is listed inside `package.json`).
 
@@ -322,9 +320,9 @@
 
 ### When a regression is found
 
-Create a JIRA issue for it, and mark it as a blocker.
+Create an issue for it and fix it via a Pull Request before continuing.
 
-### To submit a fix
+#### To submit a fix
 
     git checkout master
     git commit -am 'Your commit message'
@@ -372,15 +370,15 @@
 
 Create archives from your tags:
 
-    coho create-archive -r android --dest cordova-dist-dev/$JIRA --tag 5.0.0
+    coho create-archive -r android --dest cordova-dist-dev/$RELEASE --tag 5.0.0
 
 Sanity Check:
 
-    coho verify-archive cordova-dist-dev/$JIRA/*.tgz
+    coho verify-archive cordova-dist-dev/$RELEASE/*.tgz
 
 Upload:
 
-    (cd cordova-dist-dev && svn add $JIRA && svn commit -m "$JIRA Uploading release candidates for android release")
+    (cd cordova-dist-dev && svn add $RELEASE && svn commit -m "Uploading release candidates for android release ($RELEASE)")
 
 If everything went well the Release Candidate will show up here: https://dist.apache.org/repos/dist/dev/cordova/
 
@@ -414,10 +412,8 @@
     Please review and vote on this 5.0.0 Android Release
     by replying to this email (and keep discussion on the DISCUSS thread)
 
-    Release issue: https://issues.apache.org/jira/browse/CB-XXXX
-
     The archive has been published to dist/dev:
-    https://dist.apache.org/repos/dist/dev/cordova/CB-XXXX
+    https://dist.apache.org/repos/dist/dev/cordova/XXX/
 
     The package was published from its corresponding git tag:
     ### PASTE OUTPUT OF: coho print-tags -r android --tag 5.0.0 ###
@@ -472,10 +468,11 @@
 * Revert adding of `-dev`
 * Address the concerns
 * Re-tag release using `git tag -f`
+TODO this seems to be missing a few steps here
 * Add back `-dev`
 * Start a new vote
 
-### Otherwise: Publish real release to `dist/` & npm
+### Otherwise: Publish release to `dist/` & npm
 
 First move the release package files to `dist/`:
 
@@ -484,9 +481,9 @@
     cd cordova-dist
     svn up
     svn rm platforms/cordova-android*
-    cp ../cordova-dist-dev/$JIRA/cordova-android* platforms/
+    cp ../cordova-dist-dev/$RELEASE/cordova-android* platforms/
     svn add platforms/cordova-android*
-    svn commit -m "$JIRA Published android release to dist"
+    svn commit -m "Published android release to dist ($RELEASE)"
 
 Now you can find your release here: https://dist.apache.org/repos/dist/release/cordova/
 
@@ -494,11 +491,11 @@
 
     cd ../cordova-dist-dev
     svn up
-    svn rm $JIRA
-    svn commit -m "$JIRA Removing release candidates from dist/dev"
+    svn rm $RELEASE
+    svn commit -m "Removing release candidates from dist/dev ($RELEASE)"
     cd ..
 
-And finally you can publish your package to `npm`:
+And finally you can publish your package to npm:
 
     cd cordova-dist
     npm publish platforms/cordova-android-5.0.0.tgz
@@ -559,11 +556,6 @@
 * Publish the release blog post
 * Tweet it on https://twitter.com/apachecordova
    
-### Close JIRA Issue
-
-- Double check that the issue includes comments that record the steps you took
-- Mark it as fixed
-
 ### Finally
 
 - Update these instructions if they were missing anything.
diff --git a/docs/plugins-release-process.md b/docs/plugins-release-process.md
index b3b0516..ef2be5e 100644
--- a/docs/plugins-release-process.md
+++ b/docs/plugins-release-process.md
@@ -19,34 +19,80 @@
 #
 -->
 
-# Release Process for ''Core Plugins''
+# Release Process for Cordova Core Plugins
 
-Before cutting any releases, read the Apache's [Releases Policy](http://www.apache.org/dev/release)
+This page describes the steps for doing a Plugins Release.
 
-If you have not done so already, create a GPG key (see: [setting-up-gpg.md](setting-up-gpg.md)).
+## Table of Contents
 
-Core Plugins are released at most weekly (see: [versioning-and-release-strategy.md](versioning-and-release-strategy.md)).
+- [General Instructions](#general-instructions)
+  * [Read first](#read-first)
+  * [Repository setup](#repository-setup)
+- [Interactive Plugins Release](#interactive-plugins-release)
+- [Manual](#manual)
+  * [Before you start](#before-you-start)
+    + [Identify which plugins have changes](#identify-which-plugins-have-changes)
+    + [Choose a Release Identifier](#choose-a-release-identifier)
+    + [Request buy-in](#request-buy-in)
+  * [Before Release](#before-release)
+    + [Make sure you're up-to-date](#make-sure-youre-up-to-date)
+    + [Check dependencies](#check-dependencies)
+      - [Resolve any outdated dependencies](#resolve-any-outdated-dependencies)
+    + [`npm audit` check](#npm-audit-check)
+    + [License Check](#license-check)
+  * [Prepare Release](#prepare-release)
+    + [Update Version](#update-version)
+    + [Create Release Notes](#create-release-notes)
+    + [Commit Release Notes and optional version changes together](#commit-release-notes-and-optional-version-changes-together)
+  * [Testing](#testing)
+  * [Push Changes](#push-changes)
+    + [Tag](#tag)
+    + [Create Release Branch](#create-release-branch)
+    + [Update version to add back `-dev` suffix](#update-version-to-add-back--dev-suffix)
+    + [Push tags, branches and changes](#push-tags-branches-and-changes)
+  * [Publish Release Candidate to `dist/dev`](#publish-release-candidate-to-distdev)
+  * [Documentation and Communication](#documentation-and-communication)
+    + [Prepare Blog Post](#prepare-blog-post)
+  * [Voting and Release](#voting-and-release)
+    + [Start VOTE Thread](#start-vote-thread)
+    + [Voting](#voting)
+    + [Email the result of the vote](#email-the-result-of-the-vote)
+    + [If the Vote does *not* Pass](#if-the-vote-does-not-pass)
+    + [Otherwise: Publish release to `dist/` & npm](#otherwise-publish-release-to-dist--npm)
+    + [Add permanent Apache release tag to repository](#add-permanent-apache-release-tag-to-repository)
+  * [Follow up steps](#follow-up-steps)
+    + [Tell Apache about Release](#tell-apache-about-release)
+    + [Publish the prepared blog post](#publish-the-prepared-blog-post)
+    + [Email a release announcement to the mailing list](#email-a-release-announcement-to-the-mailing-list)
+    + [Finally:](#finally)
 
-A plugins release is performed by a single person each week. We call this person the "Release Manager". How to select the Release Manager is still TDB.
+<!--<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>-->
 
-TODO: We may want to be using [signed tags](http://git-scm.com/book/en/Git-Basics-Tagging), or at least annotated tags.
 
-TODO: Add step about ensuring plugman owner
-  * Note: can base this on: https://github.com/MobileChromeApps/mobile-chrome-apps/blob/master/dev-bin/check-published-plugin.js
+## General Instructions
 
-TODO: Add step about releasing cordova-plugins
+### Read first
 
-TODO: Should not mention testing other than checking medic
+- Before cutting any releases, read the Apache's [Releases Policy](http://www.apache.org/dev/release)
+- If you have not done so already, create a GPG key (see: [setting-up-gpg.md](setting-up-gpg.md)).
+- Core Plugins are released at most weekly (see: [versioning-and-release-strategy.md](versioning-and-release-strategy.md)).
 
-# Interactive Plugins Release
+Important: This whole release process does _not_ work in **Windows** Command Prompt or Powershell. If you really want to do this release process on Windows, you have to use [Git Bash](https://gitforwindows.org/#bash) or similar.
 
-Though we are still working out some kinks, it is recommended to try the new coho interactive plugins release command which will handle many of the manual steps listed below.
+### Repository setup
+
+You should have your platform repository checked out in a folder where you also have checked out all/most/some of the other Cordova repositories. If you followed the [Cloning/Updating Cordova repositories
+](../README.md#cloningupdating-cordova-repositories) instructions of `cordova-coho`, and used `coho repo-clone`, this should already be the case.
+
+## Interactive Plugins Release
+
+The coho interactive plugins release command which will handle many of the manual steps listed below.
 
 `coho prepare-plugins-release`
 
 This will do the following:
 
-* Create JIRA issue
+* Ask for Release Identifier
 * Update repos
 * Let you select which repos to release
 * Let you modify release notes and finalize version to release
@@ -54,157 +100,280 @@
 * Increment version on master with `-dev`
 * Create svn dist archives for you to share with the cordova list for voting purposes.
 
-# Manual
+(Caution: This interactive process still has some kinks)
+
+## Manual
 
 Try to the interactive plugins release process. If you struggle with, use the manual process which is documented below. 
 
-## Get Buy-in
 
- 1. Email the dev mailing-list and see if anyone has reason to postpone the release.
-   * Subject should be "[DISCUSS] Plugins release
-   * If so, agree upon a branching date / time.
+### Before you start
 
-## Create JIRA issues
+#### Identify which plugins have changes
 
- * Create a JIRA issue to track the status of the release.
-   * Make it of type "Task"
-   * Subject should be "Plugins Release _Feb 2, 2014_" (Use the current date, not the expected release date)
-   * Description should be: "Following steps at https://github.com/apache/cordova-coho/blob/master/docs/plugins-release-process.md"
-   * Assignee should be the Release Manager
- * Comments should be added to this bug after each top-level step below is taken
- * Set an environment variable in your terminal for use later on:
-
-
-    JIRA="CB-????" # Set this to the release bug.
-
-
-## Make sure you're up-to-date
-
-    # Update your repos
-    coho repo-status -r plugins -b master
-    coho repo-update -r plugins
-    coho repo-clone -r plugins
-    coho foreach -r plugins "git checkout master"
-
-## Identify which plugins have changes
+This whole process depends on the `ACTIVE` environment variable being set and containing a list of the plugins you want to release. This command can automatically select the plugins that need a release:
 
     ACTIVE=$(for l in cordova-plugin-*; do ( cd $l; last_release=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD); git log --pretty=format:'* %s' --topo-order --no-merges $last_release..master | grep -v "Incremented plugin version" > /dev/null && echo $l); done | xargs echo)
     echo $ACTIVE
 
-If you don't want to release all plugins, but you have specific plugins you want to release, you need to set `ACTIVE` equal to them.
+If you don't want to release all plugins, but you have specific plugins you want to release, you need to set `ACTIVE` equal to them:
 
     ACTIVE="cordova-plugin-camera cordova-plugin-contacts cordova-plugin-device-motion"
     echo $ACTIVE
 
-## Ensure license headers are present everywhere:
+#### Choose a Release Identifier
+
+Releases are identified by a "Release Identifier" that is used in commit messages and for temporary folders. 
+
+Good choices are unique and have a direct relation to the release you are about to perform. Examples for valid identifiers would be `plugins20190506` or `splashscreen@503`. You can also create a release issue and use that (including the repository name): `cordova-plugin-splashscreen#123`.
+
+You set it similar to the active plugins:
+
+```
+RELEASE=plugins20190506
+echo $RELEASE
+```
+
+#### Request buy-in
+
+Email the dev mailing-list at <dev@cordova.apache.org> and see if anyone has reason to postpone the release.
+
+E.g.:
+
+    Subject: [DISCUSS] Cordova Plugins Release
+
+    Does anyone have any reason to delay a Cordova plugins release?
+    Any outstanding patches to land?
+
+    If not, I will start the release tomorrow.
+
+Make sure to adapt the subject and content to the actual plugins you want to release.
+
+Note that it would be possible to continue with some of the [Before Release](#before-release) items while waiting for a possible response.
+
+
+### Before Release
+
+#### Make sure you're up-to-date
+
+    # Update your repos
+    coho repo-status -r plugins -b master           # check if there are any unpushed changes in the repos
+    coho repo-update -r plugins                     # updates the repos
+    coho repo-clone -r plugins                      # clone any possibly missing plugin repos
+    coho foreach -r plugins "git checkout master"   # make sure all plugins have master checked out
+
+TODO How to do only for active? => See `${ACTIVE// //` foo below
+
+#### Check dependencies
+
+TODO How to run for many repo folders?
+
+See if any dependencies are outdated
+
+    (cd ... && npm outdated --depth=0)
+
+(The `--depth=0` prevents from listing dependencies of dependencies.)
+
+##### Resolve any outdated dependencies
+
+**Alternative 1:**
+
+- Explicitly pin the outdated dependency versions in the `dependencies` section of `package.json`.
+- Raise a new issue to update the dependencies in an upcoming release.
+
+**Alternative 2:**
+
+Within a new Pull Request: update any outdated dependencies in the project's `package.json` file. Be sure to run through the test section below for compatibility issues.
+
+#### `npm audit` check
+
+Ensure that the latest version of npm is installed (using a command such as `npm i npm@latest`), `package-lock.json` is present (do `npm i --package-lock-only` if needed), and then check:
+
+    (cd cordova-plugin-splashscreen && npm audit)
+    
+TODO How to run `npm audit` for many repo folders?
+TODO Get rid of package-lock.json afterwards
+
+#### License Check
+
+Ensure license headers are present everywhere. For reference, see this [background](http://www.apache.org/legal/src-headers.html). Expect some noise in the output, for example some files from test fixtures will show up.
 
     coho audit-license-headers -r active-plugins | less
-    # Tip: Skim by searching for "Unknown Licenses"
+    
+TODO only run for $ACTIVE, not for all active-plugins
+    
+Tip: Skim by searching for "Unknown Licenses" where the number infront it not 0.
 
-For reference, see this [background](http://www.apache.org/legal/src-headers.html)
-
-## Ensure all dependencies and subdependencies have Apache-compatible licenses
+Ensure all dependencies and subdependencies have Apache-compatible licenses.
 
     coho check-license -r active-plugins
+ 
+TODO only run for $ACTIVE, not for all active-plugins
 
-## Update RELEASENOTES.md & Version
-Remove the ''-dev'' suffix on the version in plugin.xml.
+### Prepare Release
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; v2="${v%-dev}"; if [ "$v" != "$v2" ]; then echo "$l: Setting version in plugin.xml to $v2"; sed -i '' -E s:"version=\"$v\":version=\"$v2\":" plugin.xml; fi) ; done
+#### Update Version
 
-Remove the ''-dev'' suffix on the version in package.json.
+Remove the `-dev` suffix on the version in `plugin.xml`:
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; if [[ $v = *-dev ]]; then v2="${v%-dev}"; echo "$l: Setting version in package.json to $v2"; sed -i '' -E '1,/version":.*/s/version":.*/version": "'$v2'",/' package.json; fi) ; done
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; v2="${v%-dev}"; if [ "$v" != "$v2" ]; then echo "$l: Setting version in plugin.xml to $v2"; sed -i -E s:"version=\"$v\":version=\"$v2\":" plugin.xml; fi) ; done
 
-If the changes merit it, manually bump the major / minor version instead of the micro. Manual process, but list the changes via:
+Remove the `-dev` suffix on the version in `package.json`:
 
-    for l in $ACTIVE; do ( cd $l; echo $l; last_release=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD); git log --pretty=format:'* %s' --topo-order --no-merges $last_release..master | grep -v "Incremented plugin version" ); done
+    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; if [[ $v = *-dev ]]; then v2="${v%-dev}"; echo "$l: Setting version in package.json to $v2"; sed -i -E '1,/version":.*/s/version":.*/version": "'$v2'",/' package.json; fi) ; done
 
 For each of the plugins that have a test project inside it, update the version number there (`cordova-plugin-*/tests/plugin.xml`) to match the version of the plugin itself (`cordova-plugin-*/plugin.xml`).
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; vt="$(grep version= tests/plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version to $v"; sed -i '' -E s:"version=\"$vt\":version=\"$v\":" tests/plugin.xml; fi); done
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; vt="$(grep version= tests/plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version in tests/plugin.xml to $v"; sed -i -E s:"version=\"$vt\":version=\"$v\":" tests/plugin.xml; fi); done
 
-Update its RELEASENOTES.md file with changes.
+And same for `cordova-plugin-*/tests/package.json` and `cordova-plugin-*/package.json`:
+
+    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; vt="$(grep -m 1 '"version"' tests/package.json | cut -d'"' -f4)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version in tests/package.json to $v"; sed -i -E '1,/version":.*/s/version":.*/version": "'$v'",/' tests/package.json; fi); done
+
+TODO Output how many files were edited for success control
+
+##### Minor or Major version update
+
+If the changes merit it, manually bump the major / minor version instead of the patch version. Manual process, but list the changes via:
+
+    for l in $ACTIVE; do ( cd $l; echo $l; last_release=$(git describe --tags --abbrev=0 2>/dev/null || git rev-list --max-parents=0 HEAD); git log --pretty=format:'* %s' --topo-order --no-merges $last_release..master | grep -v "Incremented plugin version" ); done
+
+If this justifies or requires a major / minor version update, manually edit the version numbers in the files that currently already have uncommitted changes.
+
+TODO Decide _before_ updating version numbers
+
+#### Create Release Notes
+
+Update their `RELEASENOTES.md` files with changes since the last release:
 
     for l in $ACTIVE; do (coho update-release-notes -r $l); done
-    # Then curate:
+
+Then curate:
+
     vim ${ACTIVE// //RELEASENOTES.md }/RELEASENOTES.md
 
-Commit these changes together (plugin.xml, RELEASENOTES.md, tests/plugin.xml)
+or use your favorite text editor manually.
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; git commit -am "$JIRA Updated version and RELEASENOTES.md for release $v"); done
+#### Commit Release Notes and optional version changes together
+
+Commit these changes (`plugin.xml`, `package.json`, `RELEASENOTES.md`, `tests/plugin.xml`) together:
+
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; git commit -am "Updated version and RELEASENOTES.md for release $v ($RELEASE)"); done
 
 Reply to the DISCUSS thread with a link to the updated release notes.
 
-## Tag
+### Testing
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; echo "Tagging $l to $v"; git tag "$v" ); done
+TODO This will only work if you have _all_ the Cordova plugins checked out via Coho, not just a few of them
 
-## Test
- Create mobilespec and sanity check all plugins on at least one platform (preferably, a released version of the platform and not master). Run through mobilespec, ensuring to do manual tests that relate to changes in the RELEASENOTES.md
-
+Create mobilespec and sanity check all plugins on at least one platform (preferably, a released version of the platform and not master). Run through mobilespec, ensuring to do manual tests that relate to changes in the `RELEASENOTES.md`:
 
     cordova-mobile-spec/createmobilespec/createmobilespec.js --android --ios
     (cd mobilespec && ./cordova build && ./cordova run android --device)
     (cd mobilespec && ./cordova build && ./cordova run ios --device)
 
-## Create Release Branch
+This should start a black-ish app with a "Plugin tests" button. When clicking it you end up in a screen with "Auto Tests" and "Manual Tests" buttons. You should run both and see if all/most/the expected ones succeed.
+
+### Push Changes
+
+#### Tag
+
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; echo "Tagging $l to $v"; git tag "$v" ); done
+
+#### Create Release Branch
+
+If there currently is no release branch (e.g. `5.0.x`) on the remote, you can create one with this command:
 
     for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; b=`expr $v : '^\(....\)'`; x="x"; b=$b$x; git branch $b; echo "Creating branch $b for $l"); done
 
-If a branch already exists, you will have to manually checkout the branch, merge master and then checkout master. 
+##### Update Release Branch
 
-## Update version to add back -dev suffix
+If a release branch already exists on the remote, you will have to manually checkout the branch, merge `master` into it and then checkout `master` again:
 
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; v_no_dev="${v%-dev}"; if [ "$v" = "$v_no_dev" ]; then v2="$(echo $v|awk -F"." '{$NF+=1}{print $0RT}' OFS="." ORS="")-dev"; echo "$l: Setting version in plugin.xml to $v2"; sed -i '' -E s:"version=\"$v\":version=\"$v2\":" plugin.xml; fi) ; done
+    # in each plugin
+    v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; b=`expr $v : '^\(....\)'`; x="x"; b=$b$x;
+    git checkout $b
+    git merge master
+    # fix eventual merge conflicts and commit
+    git checkout master
+
+#### Update version to add back `-dev` suffix
+
+    # update plugin.xml
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; v_no_dev="${v%-dev}"; if [ "$v" = "$v_no_dev" ]; then v2="$(echo $v|awk -F"." '{$NF+=1}{print $0RT}' OFS="." ORS="")-dev"; echo "$l: Setting version in plugin.xml to $v2"; sed -i -E s:"version=\"$v\":version=\"$v2\":" plugin.xml; fi) ; done
+    
     # update package.json
-    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; if [[ $v != *-dev ]]; then v2="$(echo $v|awk -F"." '{$NF+=1}{print $0RT}' OFS="." ORS="")-dev"; echo "$l: Setting version in package.json to $v2"; sed -i '' -E '1,/version":.*/s/version":.*/version": "'$v2'",/' package.json; fi); done
-    # update the nested test
-    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; vt="$(grep version= tests/plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version to $v"; sed -i '' -E s:"version=\"$vt\":version=\"$v\":" tests/plugin.xml; fi); done
-    for l in $ACTIVE; do (cd $l; git commit -am "$JIRA Incremented plugin version." ); done
+    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; if [[ $v != *-dev ]]; then v2="$(echo $v|awk -F"." '{$NF+=1}{print $0RT}' OFS="." ORS="")-dev"; echo "$l: Setting version in package.json to $v2"; sed -i -E '1,/version":.*/s/version":.*/version": "'$v2'",/' package.json; fi); done
+    
+    # update the nested test plugin.xml
+    for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; vt="$(grep version= tests/plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version in tests/plugin.xml to $v"; sed -i -E s:"version=\"$vt\":version=\"$v\":" tests/plugin.xml; fi); done
+    
+    # update the nested test package.json
+    for l in $ACTIVE; do ( cd $l; v="$(grep -m 1 '"version"' package.json | cut -d'"' -f4)"; vt="$(grep -m 1 '"version"' tests/package.json | cut -d'"' -f4)"; if [ "$v" != "$vt" ]; then echo "$l: Setting version in tests/package.json to $v"; sed -i -E '1,/version":.*/s/version":.*/version": "'$v'",/' tests/package.json; fi); done
+    
+    # commit
+    for l in $ACTIVE; do (cd $l; git commit -am "Incremented plugin version. ($RELEASE)" ); done
 
-## Push tags, branches and changes
+#### Push tags, branches and changes
+
+First command shows which commit will be pushed, second one if there are uncommited files in any of the plugin checkouts.
+
     # Sanity check:
     coho repo-status -r plugins
     coho foreach -r plugins "git status -s"
+    
+ Then push the changes (commits in `master`, tag and release branch):
+    
     # Push: (assumes "origin" is apache remote)
     for l in $ACTIVE; do ( cd $l; tag=$(git describe --tags --abbrev=0); echo $l; set -x; git push origin master && git push origin refs/tags/$tag); done
     for l in $ACTIVE; do ( cd $l; v="$(grep version= plugin.xml | grep -v xml | head -n1 | cut -d'"' -f2)"; b=`expr $v : '^\(....\)'`; x="x"; b=$b$x; git push origin $b;); done
+    
+ Finally check it's all pushed now:
+ 
     # Check that it was all successful:
     coho repo-update -r plugins
     coho repo-status -r plugins
 
-## Publish to dist/dev
+### Publish Release Candidate to `dist/dev`
+
+**Attention**: The following steps need [SVN](https://subversion.apache.org/packages.html#windows) installed and [unfortunately don't give an error if it is not, failing silently](https://issues.apache.org/jira/browse/CB-8006). You also need do [have a secret key set up](setting-up-gpg.md) for signing the release.
+
 Ensure you have the svn repos checked out:
 
     coho repo-clone -r dist -r dist/dev
 
 Create archives from your tags:
 
-    coho create-archive -r ${ACTIVE// / -r } --dest cordova-dist-dev/$JIRA
+    coho create-archive -r ${ACTIVE// / -r } --dest cordova-dist-dev/$RELEASE
 
 Sanity Check:
 
     # Manually double check version numbers are correct on the file names
     # Then run:
-    coho verify-archive cordova-dist-dev/$JIRA/*.tgz
+    coho verify-archive cordova-dist-dev/$RELEASE/*.tgz
 
 Upload:
 
-    (cd cordova-dist-dev && svn up && svn add $JIRA && svn commit -m "$JIRA Uploading release candidates for plugins release")
+    (cd cordova-dist-dev && svn up && svn add $RELEASE && svn commit -m "Uploading release candidates for plugins release ($RELEASE)")
 
-* Find your release here: https://dist.apache.org/repos/dist/dev/cordova/
+If everything went well the Release Candidate will show up here: https://dist.apache.org/repos/dist/dev/cordova/
 
-## Prepare Blog Post
-Run the following script to get release notes from RELEASENOTS.md.
+### Documentation and Communication
 
-    for l in $ACTIVE; do (cd $l; current_release=$(git describe --tags --abbrev=0); previous_release=$(git describe --abbrev=0 --tags `git rev-list --tags --skip=1 --max-count=1`); echo "$l@$current_release"; awk '/### '$current_release'.*/,/### '$previous_release'.*/ {temp=match($0,/### '$previous_release'/); title=match($0, /### '$current_release'/); if(temp == 0 && title == 0) print $0}' < RELEASENOTES.md); done
+#### Prepare Blog Post
 
- * Combine the output from above into a Release Announcement blog post
-   * Instructions on [sites page README](https://svn.apache.org/repos/asf/cordova/site/README.md)
- * Get blog post proof-read.
+* Gather highlights from `RELEASENOTES.md` into a Release Announcement blog post  
+  This command can do that automatically:
+    
+      for l in $ACTIVE; do (cd $l; current_release=$(git describe --tags --abbrev=0); previous_release=$(git describe --abbrev=0 --tags `git rev-list --tags --skip=1 --max-count=1`); echo "$l@$current_release"; awk '/### '$current_release'.*/,/### '$previous_release'.*/ {temp=match($0,/### '$previous_release'/); title=match($0, /### '$current_release'/); if(temp == 0 && title == 0) print $0}' < RELEASENOTES.md); done
 
-## Start VOTE Thread
+* Instructions on publishing a blog post are on the [`cordova-docs` repo](https://github.com/apache/cordova-docs#writing-a-blog-post)
+* Get blog post proofread by submitting a PR to `cordova-docs` and asking someone on dev list to +1 it.
+
+### Voting and Release
+
+#### Start VOTE Thread
+
 Send an email to dev ML with:
 
 __Subject:__
@@ -216,13 +385,11 @@
     Please review and vote on the release of this plugins release
     by replying to this email (and keep discussion on the DISCUSS thread)
 
-    Release issue: https://issues.apache.org/jira/browse/CB-XXXX
-
     The plugins have been published to dist/dev:
-    https://dist.apache.org/repos/dist/dev/cordova/CB-XXXX/
+    https://dist.apache.org/repos/dist/dev/cordova/$RELEASE/
 
     The packages were published from their corresponding git tags:
-    PASTE OUTPUT OF: coho print-tags -r ${ACTIVE// / -r }
+    ### PASTE OUTPUT OF: coho print-tags -r ${ACTIVE// / -r }
 
     Upon a successful vote I will upload the archives to dist/, upload them to npm, and post the corresponding blog post.
 
@@ -236,28 +403,41 @@
     * Ran coho check-license to ensure all dependencies and subdependencies have Apache-compatible licenses
     * Ensured continuous build was green when repos were tagged
 
+Replace `$RELEASE` and `### ...` line with the actual values!
 
+TODO Include Release notes in email, at least as a link
 
-## Voting
+#### Voting
+
+TODO This needs much better instructions
+
 Steps to verify a plugins release
 
 1) Setup
-Repo clone can be skipped if you have cordova-dist-dev. Warning, this requires svn setup.
+  Repo clone can be skipped if you have cordova-dist-dev. Warning, this requires svn setup.
 
     coho repo-clone -r cordova-dist-dev
     (cd cordova-dist-dev && svn up)
 
 2) Verify
 
-    coho verify-archive cordova-dist-dev/$JIRA/*.tgz
+Verify the release:
+
+    // Verify the archive
+    // $RELEASE should be included in the vote email
+    coho verify-archive cordova-dist-dev/$RELEASE/*.tgz
+    
+    // update local checkouts
     coho repo-update -r plugins
+    
+    // check licences
     coho check-license -r active-plugins
     coho audit-license-headers -r active-plugins | less
-    # Tip: Skim by searching for "Unknown Licenses"
+    // Tip: Skim by searching for "Unknown Licenses"
 
 3) Test
 
-Review [ci.cordova.io](http://ci.cordova.io/).
+Check plugins CI
 
 (Optional locally run `mobile-spec`)
 
@@ -265,16 +445,12 @@
     (cd mobilespec && ./cordova build && ./cordova run android --device)
     (cd mobilespec && ./cordova build && ./cordova run ios --device)
 
+TODO
 
-## Email the result of the vote
+#### Email the result of the vote
+
 Respond to the vote thread with:
 
-__Subject:__
-
-    [RESULT][VOTE] Plugins Release
-
-__Body:__
-
     The vote has now closed. The results are:
 
     Positive Binding Votes: (# of PMC members that +1'ed)
@@ -303,81 +479,78 @@
 
 _Note: list of PMC members: http://people.apache.org/phonebook.html?pmc=cordova_
 
-## If the Vote does *not* Pass
-* Revert adding of `-dev` on master branch
+#### If the Vote does *not* Pass
+
+* Revert commit adding `-dev` on master branch
 * Address the concerns (on master branch)
 * Re-tag release using `git tag -f`
+* 
 * Add back `-dev`
 * Start a new vote
 
+#### Otherwise: Publish release to `dist/` & npm
 
-## Publish to dist/
+If you've lost your list of ACTIVE, you can recreate it from the voted on release:
 
-If you've lost your list of ACTIVE:
-
-    ACTIVE=$(cd cordova-dist-dev/$JIRA; ls *.tgz | sed -E 's:-[^-]*$::')
+    ACTIVE=$(cd cordova-dist-dev/$RELEASE; ls *.tgz | sed -E 's:-[^-]*$::')
 
 Publish:
 
     cd cordova-dist
     svn up
     for l in $ACTIVE; do ( svn rm plugins/$l* ); done
-    cp ../cordova-dist-dev/$JIRA/* plugins/
+    cp ../cordova-dist-dev/$RELEASE/* plugins/
     svn add plugins/*
-    svn commit -m "$JIRA Published plugins release to dist"
-
-    cd ../cordova-dist-dev
-    svn up
-    svn rm $JIRA
-    svn commit -m "$JIRA Removing release candidates from dist/dev"
-    cd ..
+    svn commit -m "Published plugins release to dist ($RELEASE)"
 
 Find your release here: https://dist.apache.org/repos/dist/release/cordova/plugins/
 
-### Tell Apache about Release
+Then you can also remove the release candidate from `dist-dev/`:
 
-TODO: Please someone write a coho helper for doing this POST request!
+    cd ../cordova-dist-dev
+    svn up
+    svn rm $RELEASE
+    svn commit -m "Removing release candidates from dist/dev ($RELEASE)"
+    cd ..
 
-1. Go to: https://reporter.apache.org/addrelease.html?cordova
-2. Use version "cordova-plugin-$FOO@x.x.x"
-
-## Publish to npm
+And finally you can publish your package to npm:
 
     cd cordova-dist/plugins
     for l in $ACTIVE; do (
         npm publish $l-*.tgz
     ) done;
 
-## Add new apache release tags
+#### Add permanent Apache release tag to repository
 
-Make a copy of your released tag with a prefix of `rel\YOURTAG`. These are permanent release tags for Apache. 
+Make a copy of your released tag with a prefix of `rel\YOURTAG`:
 
     for l in $ACTIVE; do ( cd $l; tag=$(git describe --tags --abbrev=0); git checkout $tag; git tag 'rel/'$tag; git push origin refs/tags/'rel/'$tag; git checkout master); done
-
-## Post blog Post
-
-See instructions in the cordova-docs [README](https://github.com/apache/cordova-docs#writing-a-blog-post)
-
-## Do other announcements
-
-    Do the same things regarding announcements as described in cadence-release-process, where they make sense.
-
-Send email to dev list with a subject [ANNOUNCE] Plugin Release and include blog post and tweet links
-
-__Subject:__
     
-    [ANNOUNCE] Plugin Release
+These are permanent release tags for Apache.
 
-__Body:__
- 
+    
+### Follow up steps
+
+#### Tell Apache about Release
+
+1. Go to: https://reporter.apache.org/addrelease.html?cordova
+2. Use `cordova-plugin-$FOO@x.x.x` as "Full version name"
+3. Click "Update release data" to submit it to the list
+
+#### Publish the prepared blog post
+
+Merge the prepare Pull Request with the blog post to publish it on the Cordova Blog.
+
+#### Email a release announcement to the mailing list
+
+    Subject: [ANNOUNCE] Plugin Release
+    
+    cordova-plugin-xxx@VERSION has been released!
+    
     Blog: http://cordova.apache.org/news/YYYY/MM/DD/plugin-release.html
     Tweet: https://twitter.com/apachecordova/status/xxxxxxxxxxxx
 
-## Close JIRA Issue
- * Double check that the issue has comments that record the steps you took
- * Mark it as fixed
-
-## Finally:
+#### Finally:
 
  * Update *these instructions* if they were missing anything.
 
diff --git a/docs/tools-release-process.md b/docs/tools-release-process.md
index 9f37240..c8a21ab 100644
--- a/docs/tools-release-process.md
+++ b/docs/tools-release-process.md
@@ -36,6 +36,8 @@
 
 ### cordova-common singleton rule
 
+**Does not apply since Cordova 9 (cordova-common@3.1.0):**
+
 The most important rule is that packages such as `cordova-lib` and `cordova-cli` should not use multiple versions of `cordova-common` through the chain of dependencies. This rule is due to the use of multiple singletons in `cordova-common`. This means that if `cordova-common` is updated it should be released before other packages such as `cordova-fetch`, `cordova-create`, `cordova-lib`, `cordova-cli`, etc.
 
 ### Alternative approaches
diff --git a/src/check-npm-install-util.js b/src/check-npm-install-util.js
new file mode 100644
index 0000000..dbb9dd0
--- /dev/null
+++ b/src/check-npm-install-util.js
@@ -0,0 +1,31 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+try {
+    // Ensure npm install has been run.
+    Object.keys(require('../package').dependencies).forEach(require);
+} catch (e) {
+    const path = require('path'); // Built-in Node.js module
+    console.log(
+        'Please run "npm install" from this directory:\n\t' +
+        path.join(__dirname, '..')); // correct path
+    process.exit(2);
+}
+
+module.exports = {};
diff --git a/src/lazy-require-util.js b/src/lazy-require-util.js
new file mode 100644
index 0000000..f327b62
--- /dev/null
+++ b/src/lazy-require-util.js
@@ -0,0 +1,28 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+function * lazyRequire (name, opt_prop) {
+    if (opt_prop) {
+        yield require(name)[opt_prop];
+    } else {
+        yield require(name);
+    }
+}
+
+module.exports = lazyRequire;
diff --git a/src/main.js b/src/main.js
index 070fbbd..de3c14f 100644
--- a/src/main.js
+++ b/src/main.js
@@ -17,29 +17,19 @@
 under the License.
 */
 
-var executil = require('./executil');
+// Verify that npm install was run before importing anything else
+require('./check-npm-install-util');
 
-try {
-    var co = require('co');
-    var optimist = require('optimist');
-    // Ensure npm install has been run.
-    Object.keys(require('../package').dependencies).forEach(require);
-} catch (e) {
-    console.log('Please run "npm install" from this directory:\n\t' + __dirname); // eslint-disable-line no-path-concat
-    process.exit(2);
-}
-var apputil = require('./apputil');
+const co = require('co');
+const optimist = require('optimist');
 
-function * lazyRequire (name, opt_prop) {
-    if (opt_prop) {
-        yield require(name)[opt_prop];
-    } else {
-        yield require(name);
-    }
-}
+const executil = require('./executil');
+const apputil = require('./apputil');
+
+const lazyRequire = require('./lazy-require-util');
 
 module.exports = function () {
-    var repoCommands = [
+    const repoCommands = [
         {
             name: 'repo-clone',
             desc: 'Clones git repositories as siblings of cordova-coho (unless --no-chdir or --global is used).',
@@ -69,7 +59,8 @@
             desc: 'Update specified git remote to point to corresponding apache github repo',
             entryPoint: lazyRequire('./remote-update')
         }];
-    var releaseCommands = [{
+
+    const releaseCommands = [{
         name: 'prepare-platform-release-branch',
         desc: 'Branches, updates JS, updates VERSION. Safe to run multiple times.',
         entryPoint: lazyRequire('./platform-release', 'prepareReleaseBranchCommand')
@@ -130,7 +121,8 @@
         desc: 'Unpublishes last nightly versions for all specified repositories',
         entryPoint: lazyRequire('./npm-publish', 'unpublishNightly')
     }];
-    var otherCommands = [{
+
+    const otherCommands = [{
         name: 'list-pulls',
         desc: 'Shows a list of GitHub pull requests for all specified repositories.',
         entryPoint: lazyRequire('./list-pulls')
@@ -171,9 +163,9 @@
             console.log(require('../package').version);
             yield Promise.resolve();
         }
-    }
-    ];
-    var commandMap = {};
+    }];
+
+    const commandMap = {};
     function addToCommandMap (cmd) {
         commandMap[cmd.name] = cmd;
     }
@@ -183,7 +175,7 @@
     // aliases:
     commandMap['foreach'] = commandMap['for-each'];
 
-    var usage = 'Usage: $0 command [options]\n\n';
+    let usage = 'Usage: $0 command [options]\n\n';
     function addCommandUsage (cmd) {
         usage += '    ' + cmd.name + ': ' + cmd.desc + '\n';
     }
@@ -203,8 +195,9 @@
     usage += '    ./cordova-coho/coho for-each -r plugins "git clean -fd"\n';
     usage += '    ./cordova-coho/coho last-week --me';
 
-    var command = commandMap[optimist.argv._[0]];
-    var opts = optimist
+    const command = commandMap[optimist.argv._[0]];
+
+    let opts = optimist
         .usage(usage)
         .options('verbose', {
             desc: 'Enable verbose logging',
@@ -232,8 +225,9 @@
             default: true
         });
     }
-    var argv = opts.check(function (argv) {
-        var commandName = argv._[0];
+
+    const argv = opts.check(function (argv) {
+        const commandName = argv._[0];
         if (!commandName) {
             throw 'No command specified.';
         }
@@ -244,6 +238,7 @@
             throw 'No repositories specified, see list-repos';
         }
     }).argv;
+
     if (!command.noChdir) {
         // Change directory to be a sibling of coho.
         apputil.initWorkingDir(argv.chdir);
@@ -254,6 +249,7 @@
     if (argv.verbose) {
         executil.verbose = true;
     }
-    var entry = command.entryPoint;
+
+    const entry = command.entryPoint;
     co(entry).then();
 };
