diff --git a/config/install/drupal_coverage_core.settings.yml b/config/install/drupal_coverage_core.settings.yml
index ea9898b..1695886 100644
--- a/config/install/drupal_coverage_core.settings.yml
+++ b/config/install/drupal_coverage_core.settings.yml
@@ -1,11 +1,116 @@
 modules:
   drupal7:
-    - aggregator:
-        name: Aggregator
-        test_group: Aggregator
-    - block:
-        name: Block
-        test_group: Block
-    - blog:
-        name: Blog
-        test_group: Blog
+    aggregator:
+      name: Aggregator
+      test_group: Aggregator
+    block:
+      name: Block
+      test_group: Block
+    blog:
+      name: Blog
+      test_group: Blog
+    book:
+      name: Book
+      test_group: Book
+    color:
+      name: Color
+      test_group: Color
+    comment:
+      name: Comment
+      test_group: Comment
+    contact:
+      name: Contact
+      test_group: Contact
+    contextual:
+      name: Contextual
+      test_group: Contextual
+    dashboard:
+      name: Dashboard
+      test_group: Dashboard
+    dblog:
+      name: DBLog
+      test_group: DBLog
+    field:
+      name: Field
+      test_group: Field API # @todo allow multiple groups (Also Entity)
+    field_ui:
+      name: Field UI
+      test_group: Field UI
+    file:
+      name: File
+      test_group: File
+    filter:
+      name: Filter
+      test_group: Filter
+    forum:
+      name: Forum
+      test_group: Forum
+    help:
+      name: Help
+      test_group: Help
+    image:
+      name: Image
+      test_group: Image
+    locale:
+      name: Locale
+      test_group: Locale
+    menu:
+      name: Menu
+      test_group: Menu
+    node:
+      name: Node
+      test_group: Node
+    openid:
+      name: OpenID
+      test_group: OpenID
+    overlay:
+      name: OpenID
+      test_group: OpenID
+    path:
+      name: Path
+      test_group: Path
+    php:
+      name: PHP
+      test_group: PHP
+    poll:
+      name: Poll
+      test_group: Poll
+    profile:
+      name: Profile
+      test_group: Profile
+    rdf:
+      name: RDF
+      test_group: RDF
+    search:
+      name: Search
+      test_group: Search
+    shortcut:
+      name: Shortcut
+      test_group: Shortcut
+    statistics:
+      name: Statistics
+      test_group: Statistics
+    syslog:
+      name: Syslog
+      test_group: Syslog
+    system:
+      name: System
+      test_group: System # & Module
+    taxonomy:
+      name: Taxonomy
+      test_group: Taxonomy
+    tracker:
+      name: Tracker
+      test_group: Tracker
+    translation:
+      name: Translation
+      test_group: Translation
+    trigger:
+      name: Trigger
+      test_group: Trigger
+    update:
+      name: Update
+      test_group: Update
+    user:
+      name: User
+      test_group: User
\ No newline at end of file
diff --git a/config/schema/drupal_coverage_core.schema.yml b/config/schema/drupal_coverage_core.schema.yml
index 977f531..2c36c23 100644
--- a/config/schema/drupal_coverage_core.schema.yml
+++ b/config/schema/drupal_coverage_core.schema.yml
@@ -11,19 +11,13 @@ drupal_coverage_core.settings:
         type: sequence
         label: 'List of core modules'
         sequence:
-          type: sequence
+          type: mapping
           label: 'Core module'
-          sequence:
-            type: sequence
-            label: 'Core module'
-            sequence:
+          mapping:
+            name:
               type: string
-              label: 'Core module'
-              mapping:
-                name:
-                  type: string
-                  label: 'The (human readable) name of the core module'
-                test_group:
-                  type: string
-                  label: 'Test group'
-                  description: 'The name of the test group that will be tested'
+              label: 'The (human readable) name of the core module'
+            test_group:
+              type: string
+              label: 'Test group'
+              description: 'The name of the test group that will be tested'
diff --git a/drupal_coverage_core.services.yml b/drupal_coverage_core.services.yml
index 2ac2697..cfe6895 100644
--- a/drupal_coverage_core.services.yml
+++ b/drupal_coverage_core.services.yml
@@ -5,7 +5,7 @@ services:
 
   drupal_coverage_core.module_manager:
     class: Drupal\drupal_coverage_core\ModuleManager
-    arguments: [ '@drupal_coverage_core.analysis_manager', '@drupal_coverage_core.module_manager_storage' ]
+    arguments: [ '@drupal_coverage_core.analysis_manager', '@drupal_coverage_core.module_manager_storage', '@config.factory' ]
 
   drupal_coverage_core.travis_client:
     class: Drupal\drupal_coverage_core\Client\TravisClient
diff --git a/src/Exception/InvalidModuleTypeException.php b/src/Exception/InvalidModuleTypeException.php
index 2570386..7c1f65a 100644
--- a/src/Exception/InvalidModuleTypeException.php
+++ b/src/Exception/InvalidModuleTypeException.php
@@ -1,9 +1,8 @@
 <?php
-/**
- * @file
- * Contains
- */
 
 namespace Drupal\drupal_coverage_core\Exception;
 
+/**
+ * An exception thrown for invalid module types.
+ */
 class InvalidModuleTypeException extends \Exception {}
diff --git a/src/Exception/ModuleDoesNotExistException.php b/src/Exception/ModuleDoesNotExistException.php
new file mode 100644
index 0000000..a49d1ce
--- /dev/null
+++ b/src/Exception/ModuleDoesNotExistException.php
@@ -0,0 +1,11 @@
+<?php
+
+namespace Drupal\drupal_coverage_core\Exception;
+
+/**
+ * An exception thrown for non-exsting modules.
+ *
+ * Examples could be when a core module does not exist or when a contrib module
+ * does not exist.
+ */
+class ModuleDoesNotExistException extends \Exception {}
diff --git a/src/Exception/UnableToDetermineBuildStatusException.php b/src/Exception/UnableToDetermineBuildStatusException.php
index 145fb0b..1102c2f 100644
--- a/src/Exception/UnableToDetermineBuildStatusException.php
+++ b/src/Exception/UnableToDetermineBuildStatusException.php
@@ -1,9 +1,8 @@
 <?php
-/**
- * @file
- * Contains
- */
 
 namespace Drupal\drupal_coverage_core\Exception;
 
+/**
+ * An exception thrown when no connection with TravisCI was possible.
+ */
 class UnableToDetermineBuildStatusException extends \Exception {}
diff --git a/src/Form/AnalyseForm.php b/src/Form/AnalyseForm.php
index 40832e5..72b04a2 100644
--- a/src/Form/AnalyseForm.php
+++ b/src/Form/AnalyseForm.php
@@ -1,12 +1,7 @@
 <?php
-/**
- * @file
- * Contains \Drupal\code_coverage\Form\AnalyseForm.
- */
 
 namespace Drupal\drupal_coverage_core\Form;
 
-use Drupal\Core\Entity\Entity;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\drupal_coverage_core\AnalysisManager;
@@ -16,6 +11,9 @@ use Drupal\drupal_coverage_core\ModuleManager;
 use Drupal\node\Entity\Node;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
+/**
+ * Provides the analysis form.
+ */
 class AnalyseForm extends FormBase {
 
   /**
@@ -113,6 +111,11 @@ class AnalyseForm extends FormBase {
       '#default_value' => $form_state->getValue('module'),
       '#title' => $this->t('Core module'),
     ];
+
+    $form['type'] = [
+      '#type' => 'hidden',
+      '#value' => ModuleManager::TYPE_CORE,
+    ];
   }
 
   /**
@@ -143,7 +146,13 @@ class AnalyseForm extends FormBase {
       '#required' => TRUE,
       '#description' => t('Specify the branch you want to analyse. This needs to be an existing branch inside the drupal.org repository.'),
     ];
+
+    $form['type'] = [
+      '#type' => 'hidden',
+      '#value' => ModuleManager::TYPE_CONTRIB,
+    ];
   }
+
   /**
    * {@inheritdoc}
    */
@@ -188,11 +197,23 @@ class AnalyseForm extends FormBase {
     $build_data = new BuildData();
     $build_data->setModuleType(ModuleManager::TYPE_CORE);
 
-    $build_data->setModule(
-      $this->moduleManager->getCoreModule($form_state->getValue('module'))
-    );
+    // @todo Group is not specified.
+    $module = $this->moduleManager->getCoreModule($form_state->getValue('module'));
+    $build_data->setModule($module);
 
-    $this->analysisManager->startBuild($build_data);
+    try {
+      $this->analysisManager->startBuild($build_data);
+      $url = $module->toUrl();
+      $this->redirect($url->getRouteName(), $url->getRouteParameters(), $url->getOptions());
+      drupal_set_message(t('The analysis for %module has been initiated.',
+        ['%module' => $build_data->getModule()->title->getString()]));
+    }
+    catch (UnableToDetermineBuildStatusException $e) {
+      drupal_set_message($this->t('Unable to determine the TravisCI build status. Please try again later.'), 'error');
+    }
+    catch (\Exception $e) {
+      drupal_set_message($this->t('An error occured.'), 'error');
+    }
   }
 
   /**
@@ -203,11 +224,11 @@ class AnalyseForm extends FormBase {
    */
   protected function getCoreModules() {
     $config = \Drupal::config('drupal_coverage_core.settings');
-    $module_data = $config->get('modules')['drupal7'];
+    $module_list = $config->get('modules')['drupal7'];
     $modules = [];
 
-    foreach ($module_data as $module) {
-      $modules[] = $module['name'];
+    foreach ($module_list as $machine_name => $module) {
+      $modules[$machine_name] = $module['name'];
     }
 
     return $modules;
@@ -242,7 +263,10 @@ class AnalyseForm extends FormBase {
       }
     }
     catch (UnableToDetermineBuildStatusException $e) {
-      drupal_set_message(t('Unable to determine the TravisCI build status. Please try again later.'), 'error');
+      drupal_set_message($this->t('Unable to determine the TravisCI build status. Please try again later.'), 'error');
+    }
+    catch (\Exception $e) {
+      drupal_set_message($this->t('An error occured.'), 'error');
     }
   }
 
diff --git a/src/Generator.php b/src/Generator.php
index db8f7cf..cfdfc7c 100644
--- a/src/Generator.php
+++ b/src/Generator.php
@@ -161,9 +161,15 @@ class Generator {
 
     if ($build_data->getModuleType() == ModuleManager::TYPE_CONTRIB) {
       $body['request']['config']['before_install'][] = 'git clone --branch ' . $build_data->getBranch() . ' https://git.drupal.org/project/$DRUPAL_TI_MODULE_NAME.git $TRAVIS_BUILD_DIR/$DRUPAL_TI_MODULE_NAME';
+      $body['request']['config']['before_install'][] = 'export DRUPAL_TI_ANALYSE_CORE=0';
+    }
+    else {
+      $body['request']['config']['before_install'][] = 'export DRUPAL_TI_ANALYSE_CORE=1';
     }
 
     $body['request']['config']['before_install'][] = 'drupal-ti before_install';
+
+    return $body;
   }
 
   /**
diff --git a/src/ModuleManager.php b/src/ModuleManager.php
index e8103b1..100a0b5 100644
--- a/src/ModuleManager.php
+++ b/src/ModuleManager.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\drupal_coverage_core;
 
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\drupal_coverage_core\Exception\ModuleDoesNotExistException;
 use Drupal\node\Entity\Node;
 
 /**
@@ -28,6 +30,13 @@ class ModuleManager {
    */
   protected $moduleManagerStorage;
 
+  /**
+   * The configuration factory.
+   *
+   * @var \Drupal\Core\Config\ImmutableConfig
+   */
+  protected $configFactory;
+
   const TYPE_CORE = "Core";
   const TYPE_CONTRIB = "Contrib";
 
@@ -39,9 +48,10 @@ class ModuleManager {
    * @param ModuleManagerStorageInterface $module_manager_storage
    *   The storage used for this object.
    */
-  public function __construct(AnalysisManager $analysis_manager, ModuleManagerStorageInterface $module_manager_storage) {
+  public function __construct(AnalysisManager $analysis_manager, ModuleManagerStorageInterface $module_manager_storage, ConfigFactoryInterface $config_factory) {
     $this->analysisManager = $analysis_manager;
     $this->moduleManagerStorage = $module_manager_storage;
+    $this->configFactory = $config_factory;
   }
 
   /**
@@ -108,7 +118,11 @@ class ModuleManager {
       'title' => $name,
       'field_testcase' => $test_group,
     ];
-    return Node::create($data);
+
+    $module = Node::create($data);
+    $module->save();
+
+    return $module;
   }
 
   /**
@@ -121,7 +135,17 @@ class ModuleManager {
    *   The module.
    */
   public function getCoreModule($title) {
-    return $this->moduleManagerStorage->getCoreModule($title);
+    try {
+      return $this->moduleManagerStorage->getCoreModule($title);
+    }
+    catch (ModuleDoesNotExistException $e) {
+      $modules = $this->configFactory
+        ->get('drupal_coverage_core.settings')
+        ->get('modules')['drupal7'];
+
+      $test_groups = $modules[self::cleanModuleName($title)]['test_group'];
+      return $this->createCoreModule($title, $test_groups);
+    }
   }
 
   /**
diff --git a/src/ModuleManagerStorage.php b/src/ModuleManagerStorage.php
index 4dfe8f8..001624f 100644
--- a/src/ModuleManagerStorage.php
+++ b/src/ModuleManagerStorage.php
@@ -3,6 +3,7 @@
 namespace Drupal\drupal_coverage_core;
 
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\drupal_coverage_core\Exception\ModuleDoesNotExistException;
 use Drupal\node\Entity\Node;
 
 /**
@@ -66,10 +67,7 @@ class ModuleManagerStorage implements ModuleManagerStorageInterface {
     }
 
     if (!is_object($module)) {
-      $config = \Drupal::config('drupal_coverage_core.settings');
-      $modules = $config->get('modules')['drupal7'];
-
-      //$module = $this->createCoreModule($title, $modules[self::cleanModuleName($module)['test_groups']);
+      throw new ModuleDoesNotExistException();
     }
 
     return $module;
diff --git a/src/ModuleManagerStorageInterface.php b/src/ModuleManagerStorageInterface.php
index e1bcd79..cd4b938 100644
--- a/src/ModuleManagerStorageInterface.php
+++ b/src/ModuleManagerStorageInterface.php
@@ -47,6 +47,9 @@ interface ModuleManagerStorageInterface {
    *
    * @return EntityInterface
    *   Returns the module based on a title.
+   *
+   * @throws \Drupal\drupal_coverage_core\Exception\ModuleDoesNotExistException
+   *   When the module does not exist and needs to be created.
    */
   public function getCoreModule($title);
 
diff --git a/tests/src/Unit/ModuleManagerTest.php b/tests/src/Unit/ModuleManagerTest.php
index 1e462b2..5af3b3a 100644
--- a/tests/src/Unit/ModuleManagerTest.php
+++ b/tests/src/Unit/ModuleManagerTest.php
@@ -47,16 +47,27 @@ class ModuleManagerTest extends UnitTestCase {
   protected $dateFormatter;
 
   /**
+   * The client that will interact with TravisCI.
+   *
    * @var TravisClient
    */
   protected $travisClient;
 
   /**
+   * The generator used for generating build data.
+   *
    * @var Generator
    */
   protected $generator;
 
   /**
+   * The mocked config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactory|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $configFactory;
+
+  /**
    * {@inheritdoc}
    */
   public function setUp() {
@@ -66,9 +77,9 @@ class ModuleManagerTest extends UnitTestCase {
       ->setConstructorArgs([$this->travisClient])
       ->getMock();
     $this->moduleManagerStorage = $this->getMock(ModuleManagerStorageInterface::class);
-
+    $this->configFactory = $this->getConfigFactoryStub(array());
     $this->analysisManager = new AnalysisManager($this->dateFormatter, $this->travisClient, $this->generator);
-    $this->moduleManager = new ModuleManager($this->analysisManager, $this->moduleManagerStorage);
+    $this->moduleManager = new ModuleManager($this->analysisManager, $this->moduleManagerStorage, $this->configFactory);
   }
 
   /**
