diff --git a/lib/config/index.js b/lib/config/index.js
index e5c6c336105fdd82327fd10e9e79932401042ee0..eabcd9b04ad15313d9f720dd00a78ee837406309 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -1,60 +1,69 @@
 const logger = require('winston');
 const program = require('commander');
 
-logger.debug('Generating config');
+let config = null;
 
-// Get configs
-const defaultConfig = require('./default');
-const fileConfig = require('./file');
-const cliConfig = require('./cli');
-const envConfig = require('./env');
+function parseConfigs() {
+  logger.debug('Parsing configs');
 
-// Get global config
-const config = Object.assign({}, defaultConfig, fileConfig, envConfig, cliConfig);
+  // Get configs
+  /* eslint-disable global-require */
+  const defaultConfig = require('./default');
+  const fileConfig = require('./file');
+  const cliConfig = require('./cli');
+  const envConfig = require('./env');
+  /* eslint-enable global-require */
 
-// Set log level
-logger.level = config.logLevel;
+  // Get global config
+  config = Object.assign({}, defaultConfig, fileConfig, envConfig, cliConfig);
 
-// Check for token
-if (typeof config.token === 'undefined') {
-  logger.error('A GitHub token must be configured');
-  program.outputHelp();
-  process.exit(1);
-}
-// We need at least one repository defined
-if (!config.repositories || config.repositories.length === 0) {
-  logger.error('At least one repository must be configured');
-  program.outputHelp();
-  process.exit(1);
-}
-// Convert any repository strings to objects
-config.repositories.forEach((repo, index) => {
-  if (typeof repo === 'string') {
-    config.repositories[index] = { repository: repo };
+  // Set log level
+  logger.level = config.logLevel;
+
+  // Save default templates
+  config.defaultTemplates = defaultConfig.templates;
+
+  // Check for token
+  if (typeof config.token === 'undefined') {
+    logger.error('A GitHub token must be configured');
+    program.outputHelp();
+    process.exit(1);
   }
-});
-// Add 'package.json' if missing
-config.repositories.forEach((repo, index) => {
-  if (!repo.packageFiles || !repo.packageFiles.length) {
-    config.repositories[index].packageFiles = ['package.json'];
+  // We need at least one repository defined
+  if (!config.repositories || config.repositories.length === 0) {
+    logger.error('At least one repository must be configured');
+    program.outputHelp();
+    process.exit(1);
   }
-});
-// Expand packageFile format
-config.repositories.forEach((repo, index) => {
-  config.repositories[index].packageFiles = repo.packageFiles.map((packageFile) => {
-    if (typeof packageFile === 'string') {
-      return { fileName: packageFile };
+  // Convert any repository strings to objects
+  config.repositories.forEach((repo, index) => {
+    if (typeof repo === 'string') {
+      config.repositories[index] = { repository: repo };
     }
-    return packageFile;
   });
-});
-// Print config
-logger.verbose(`config=${JSON.stringify(config)}`);
+  // Add 'package.json' if missing
+  config.repositories.forEach((repo, index) => {
+    if (!repo.packageFiles || !repo.packageFiles.length) {
+      config.repositories[index].packageFiles = ['package.json'];
+    }
+  });
+  // Expand packageFile format
+  config.repositories.forEach((repo, index) => {
+    config.repositories[index].packageFiles = repo.packageFiles.map((packageFile) => {
+      if (typeof packageFile === 'string') {
+        return { fileName: packageFile };
+      }
+      return packageFile;
+    });
+  });
+  // Print config
+  logger.verbose(`config=${JSON.stringify(config)}`);
+}
 
 function getCascadedConfig(repo, packageFile) {
   const cascadedConfig = Object.assign({}, config, repo, packageFile);
   // Fill in any missing templates with defaults
-  cascadedConfig.templates = Object.assign({}, defaultConfig.templates, cascadedConfig.templates);
+  cascadedConfig.templates = Object.assign({}, config.defaultTemplates, cascadedConfig.templates);
   // Remove unnecessary fields
   delete cascadedConfig.repositories;
   delete cascadedConfig.repository;
@@ -69,4 +78,5 @@ function getGlobalConfig() {
 module.exports = {
   getCascadedConfig,
   getGlobalConfig,
+  parseConfigs,
 };
diff --git a/lib/index.js b/lib/index.js
index 74b8f691c01c04270b77389362505bfeceaec653..2701965ad2642d6ee1c47764084ef9087af1ba2c 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -9,6 +9,9 @@ module.exports = {
 };
 
 function start() {
+  // Parse config
+  config.parseConfigs();
+
   // Initialize our promise chain
   let p = Promise.resolve();