diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index c64da713dbbd4e7c8050f9ba525e8dc66b69c0e1..ec13c0a6c936390be87d085df3d2e4538d231f2c 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -1,4 +1,16 @@
-// const logger = require('winston');
+const fs = require('fs');
+const path = require('path');
+
+function template(name) {
+  const shortName = `${name.replace(/([A-Z])/g, '-$1').toLowerCase()}.hbs`;
+  const hbsContents = fs.readFileSync(
+    // Long path is so that it works whether code is run from lib or dist
+    path.resolve(__dirname, '../../lib/config/templates/', shortName),
+    'utf8'
+  );
+  // Strip off any trailing line break
+  return hbsContents.replace(/\n$/, '');
+}
 
 module.exports = {
   getOptions,
@@ -124,30 +136,28 @@ const options = [
     name: 'branchName',
     description: 'Branch name template',
     type: 'string',
-    default: 'renovate/{{depName}}-{{newVersionMajor}}.x',
+    default: template('branchName'),
     cli: false,
   },
   {
     name: 'commitMessage',
     description: 'Commit message template',
     type: 'string',
-    default: 'Update dependency {{depName}} to version {{newVersion}}',
+    default: template('commitMessage'),
     cli: false,
   },
   {
     name: 'prTitle',
     description: 'Pull Request title template',
     type: 'string',
-    default:
-      '{{#if isPin}}Pin{{else}}Update{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}',
+    default: template('prTitle'),
     cli: false,
   },
   {
     name: 'prBody',
     description: 'Pull Request body template',
     type: 'string',
-    default:
-      'This Pull Request updates dependency {{depName}} from version `{{currentVersion}}` to `{{newVersion}}`\n\n{{changelog}}',
+    default: template('prBody'),
     cli: false,
   },
   // Yarn Lock Maintenance
@@ -217,28 +227,28 @@ const options = [
     name: 'groupBranchName',
     description: 'Branch name template for the group',
     type: 'string',
-    default: 'renovate/{{groupSlug}}',
+    default: template('groupBranchName'),
     cli: false,
   },
   {
     name: 'groupCommitMessage',
     description: 'Group commit message',
     type: 'string',
-    default: 'Renovate {{groupName}} packages',
+    default: template('groupCommitMessage'),
     cli: false,
   },
   {
     name: 'groupPrTitle',
     description: 'Pull Request title template for the group',
     type: 'string',
-    default: 'Renovate {{groupName}} packages',
+    default: template('groupPrTitle'),
     cli: false,
   },
   {
     name: 'groupPrBody',
     description: 'Pull Request body template for the group',
     type: 'string',
-    default: 'This PR renovates the package group "{{groupName}}".',
+    default: template('groupPrBody'),
     cli: false,
   },
   // Pull Request options
diff --git a/lib/config/templates/branch-name.hbs b/lib/config/templates/branch-name.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..0ce7efa5e4c6a86f40331e5e49f1b7ae21f6fbd4
--- /dev/null
+++ b/lib/config/templates/branch-name.hbs
@@ -0,0 +1 @@
+renovate/{{depName}}-{{newVersionMajor}}.x
diff --git a/lib/config/templates/commit-message.hbs b/lib/config/templates/commit-message.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..2128aff862892443f6849f02d8d4a2699b2e7e44
--- /dev/null
+++ b/lib/config/templates/commit-message.hbs
@@ -0,0 +1 @@
+Update dependency {{depName}} to version {{newVersion}}
diff --git a/lib/config/templates/group-branch-name.hbs b/lib/config/templates/group-branch-name.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..9b288fa914f2ed9a60ebe475c07fdd264b4e050f
--- /dev/null
+++ b/lib/config/templates/group-branch-name.hbs
@@ -0,0 +1 @@
+renovate/{{groupSlug}}
diff --git a/lib/config/templates/group-commit-message.hbs b/lib/config/templates/group-commit-message.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..468a723413b038b75b7f0f0961c0126e5b69cec4
--- /dev/null
+++ b/lib/config/templates/group-commit-message.hbs
@@ -0,0 +1 @@
+Renovate {{groupName}} packages
diff --git a/lib/config/templates/group-pr-body.hbs b/lib/config/templates/group-pr-body.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..80f03083c5bf668b79f2d3b5c19a231b932a02a6
--- /dev/null
+++ b/lib/config/templates/group-pr-body.hbs
@@ -0,0 +1 @@
+This PR renovates the package group "{{groupName}}".
diff --git a/lib/config/templates/group-pr-title.hbs b/lib/config/templates/group-pr-title.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..468a723413b038b75b7f0f0961c0126e5b69cec4
--- /dev/null
+++ b/lib/config/templates/group-pr-title.hbs
@@ -0,0 +1 @@
+Renovate {{groupName}} packages
diff --git a/lib/config/templates/pr-body.hbs b/lib/config/templates/pr-body.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..7d4a3e29713bb1f5403e00741c352855bf6df6c6
--- /dev/null
+++ b/lib/config/templates/pr-body.hbs
@@ -0,0 +1,3 @@
+This Pull Request updates dependency {{depName}} from version `{{currentVersion}}` to `{{newVersion}}`
+
+{{changelog}}
diff --git a/lib/config/templates/pr-title.hbs b/lib/config/templates/pr-title.hbs
new file mode 100644
index 0000000000000000000000000000000000000000..7b6f9ef2d7a5ec6255ea8d12303be3e8a8d0d3ec
--- /dev/null
+++ b/lib/config/templates/pr-title.hbs
@@ -0,0 +1 @@
+{{#if isPin}}Pin{{else}}Update{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}
diff --git a/test/helpers/npm.spec.js b/test/helpers/npm.spec.js
index 6ee4476ed3141a4afae86f0d57ddf2d335f9ec85..7a71e2dc823bbd3c59d90db353ad99afb386eb23 100644
--- a/test/helpers/npm.spec.js
+++ b/test/helpers/npm.spec.js
@@ -1,5 +1,4 @@
 const npmHelper = require('../../lib/helpers/npm');
-const defaultConfig = require('../../lib/config/defaults').getConfig();
 
 jest.mock('fs');
 jest.mock('child_process');
@@ -57,7 +56,7 @@ describe('getLockFile(packageJson, config)', () => {
 describe('maintainLockFile(inputConfig)', () => {
   let config;
   beforeEach(() => {
-    config = Object.assign({}, defaultConfig);
+    config = {};
     config.packageFile = 'package.json';
     config.api = {
       getFileContent: jest.fn(),
diff --git a/test/helpers/yarn.spec.js b/test/helpers/yarn.spec.js
index 7856efacf00f6ae4966392eb555ee021fd7c7d26..8ba85f918caad1b174188ca83418cebe7d8211ef 100644
--- a/test/helpers/yarn.spec.js
+++ b/test/helpers/yarn.spec.js
@@ -1,5 +1,4 @@
 const yarnHelper = require('../../lib/helpers/yarn');
-const defaultConfig = require('../../lib/config/defaults').getConfig();
 
 jest.mock('fs');
 jest.mock('child_process');
@@ -60,7 +59,7 @@ describe('getLockFile(packageJson, config)', () => {
 describe('maintainLockFile(inputConfig)', () => {
   let config;
   beforeEach(() => {
-    config = Object.assign({}, defaultConfig);
+    config = {};
     config.packageFile = 'package.json';
     config.api = {
       getFileContent: jest.fn(),