diff --git a/config/schema/monitoring.schema.yml b/config/schema/monitoring.schema.yml
index 7c02443..604f817 100644
--- a/config/schema/monitoring.schema.yml
+++ b/config/schema/monitoring.schema.yml
@@ -147,7 +147,7 @@ monitoring.settings.core_requirements:
     module:
       type: string
       label: 'Module name'
-    exclude keys:
+    exclude_keys:
       type: sequence
       label: 'Exclude list'
       sequence:
diff --git a/monitoring.install b/monitoring.install
index 9d02694..92388e8 100644
--- a/monitoring.install
+++ b/monitoring.install
@@ -165,14 +165,14 @@ function monitoring_install() {
       'settings' => array(
         'module' => $module,
         // List requirements keys which reports will be suppressed.
-        'exclude keys' => array(),
+        'exclude_keys' => array(),
       ),
       'dependencies' => array('module' => $module),
     ));
     // Ignore the cron key for system requirements, as we have a separate
     // sensor for this.
     if ($module == 'system') {
-      $sensor->settings['exclude keys'][] = 'cron';
+      $sensor->settings['exclude_keys'][] = 'cron';
     }
     $sensor->save();
   }
diff --git a/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php b/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php
index 67ec717..5c62d3b 100644
--- a/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php
+++ b/src/Plugin/monitoring/SensorPlugin/CoreRequirementsSensorPlugin.php
@@ -9,6 +9,7 @@ namespace Drupal\monitoring\Plugin\monitoring\SensorPlugin;
 use Drupal\Component\Utility\String;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\monitoring\Result\SensorResultInterface;
+use Drupal\monitoring\SensorPlugin\ExtendedInfoSensorPluginInterface;
 use Drupal\monitoring\SensorPlugin\SensorPluginBase;
 use Drupal\Core\Entity\DependencyTrait;
 
@@ -24,7 +25,7 @@ use Drupal\Core\Entity\DependencyTrait;
  *
  * @todo Shorten sensor message and add improved verbose output.
  */
-class CoreRequirementsSensorPlugin extends SensorPluginBase {
+class CoreRequirementsSensorPlugin extends SensorPluginBase implements ExtendedInfoSensorPluginInterface {
 
   use DependencyTrait;
 
@@ -38,11 +39,94 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase {
   /**
    * {@inheritdoc}
    */
+  public function resultVerbose(SensorResultInterface $result) {
+    $output = [];
+
+    $requirements = $this->getRequirements($this->sensorConfig->getSetting('module'));
+    $excluded_keys = $this->sensorConfig->getSetting('exclude_keys');
+    if (empty($excluded_keys)) {
+      $excluded_keys = array();
+    }
+
+    $rows = [];
+    foreach ($requirements as $key => $value) {
+      // Make sure all keys are present.
+      $value += array(
+        'severity' => NULL,
+      );
+
+      // Map column key.
+      $row['key'] = $key;
+
+      // Map column excluded.
+      if (in_array($key, $excluded_keys)) {
+        $row['excluded'] = 'Yes';
+      }
+      else {
+        $row['excluded'] = '';
+      }
+
+      // Map column severity.
+      $severity = $value['severity'];
+      if ($severity == REQUIREMENT_ERROR) {
+        $severity  = 'Error';
+      }
+      elseif ($severity == REQUIREMENT_WARNING) {
+        $severity  = 'Warning';
+      }
+      else {
+        $severity  = 'OK';
+      }
+      $row['severity'] = $severity;
+
+      // Map column message with title and description.
+      $title = '';
+      if (isset($value['title'])) {
+        $title .= $value['title'];
+      }
+      if (isset($value['value'])) {
+        $title .= $value['value'];
+      }
+      $description = '';
+      if (isset($value['description'])) {
+        $description = $value['description'];
+      }
+      $message = array(
+        '#type' => 'item',
+        '#title' => $title,
+        '#markup' => $description,
+      );
+      $row['message'] = drupal_render($message);
+
+      $rows[] = array(
+        'data' => $row,
+      );
+    }
+
+    if (count($rows) > 0) {
+      $header = [];
+      $header['key'] = t('Key');
+      $header['excluded'] = t('Excluded');
+      $header['severity'] = t('Severity');
+      $header['message'] = t('Message');
+
+      $output['requirements'] = array(
+        '#theme' => 'table',
+        '#header' => $header,
+        '#rows' => $rows,
+      );
+    }
+    return $output;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function runSensor(SensorResultInterface $result) {
     $requirements = $this->getRequirements($this->sensorConfig->getSetting('module'));
 
     // Ignore requirements that were explicitly excluded.
-    foreach ($this->sensorConfig->getSetting('exclude keys', array()) as $exclude_key) {
+    foreach ($this->sensorConfig->getSetting('exclude_keys', array()) as $exclude_key) {
       if (isset($requirements[$exclude_key])) {
         unset($requirements[$exclude_key]);
       }
@@ -52,6 +136,26 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+
+    $form['exclude_keys'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Keys to be excluded.'),
+      '#description' => t('Seperate the keys by a new line.'),
+    );
+
+    if ($this->sensorConfig->getSetting('exclude_keys')) {
+      $form['exclude_keys']['#default_value']  = implode("\n", $this->sensorConfig->getSetting('exclude_keys'));
+    }
+    return $form;
+  }
+
+
+
+  /**
    * Extracts the highest severity from the requirements array.
    *
    * Replacement for drupal_requirements_severity(), which ignores
@@ -152,4 +256,15 @@ class CoreRequirementsSensorPlugin extends SensorPluginBase {
     $this->addDependency('module', $module);
     return $this->dependencies;
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $keys = array_filter(explode("\n", $form_state->getValue(array('settings', 'exclude_keys'))));
+    $keys = array_map('trim', $keys);
+    $this->sensorConfig->settings['exclude_keys'] = $keys;
+    return $form_state;
+  }
+
 }
diff --git a/src/Tests/MonitoringCoreTest.php b/src/Tests/MonitoringCoreTest.php
index 028c801..97d498b 100644
--- a/src/Tests/MonitoringCoreTest.php
+++ b/src/Tests/MonitoringCoreTest.php
@@ -141,6 +141,9 @@ class MonitoringCoreTest extends MonitoringTestBase {
   /**
    * Tests requirements sensors.
    *
+   * The module monitoring_test implements custom requirements injected through
+   * state monitoring_test.requirements.
+   *
    * @see CoreRequirementsSensorPlugin
    */
   protected function doTestCoreRequirementsSensorPlugin() {
@@ -157,7 +160,7 @@ class MonitoringCoreTest extends MonitoringTestBase {
     $this->assertTrue($result->isOk());
     $this->assertEqual($result->getMessage(), 'Requirements check OK');
 
-    // Set basic requirements saying that all is ok.
+    // Set basic requirements saying that all is OK.
     $requirements = array(
       'requirement1' => array(
         'title' => 'requirement1',
@@ -177,11 +180,11 @@ class MonitoringCoreTest extends MonitoringTestBase {
     // Set requirements exclude keys into the sensor settings.
     $sensor_config = SensorConfig::load('core_requirements_monitoring_test');
     $settings = $sensor_config->getSettings();
-    $settings['exclude keys'] = array('requirement_excluded');
+    $settings['exclude_keys'] = array('requirement_excluded');
     $sensor_config->settings = $settings;
     $sensor_config->save();
 
-    // We still should have OK status but with different message.
+    // We still have OK status but with different message.
     $result = $this->runSensor('core_requirements_monitoring_test');
     // We expect OK status as REQUIREMENT_ERROR is set by excluded requirement.
     $this->assertTrue($result->isOk());
@@ -195,7 +198,7 @@ class MonitoringCoreTest extends MonitoringTestBase {
     );
     \Drupal::state()->set('monitoring_test.requirements', $requirements);
 
-    // Now the sensor should have escalated to the requirement in warning state.
+    // Now the sensor escalates to the requirement in warning state.
     $result = $this->runSensor('core_requirements_monitoring_test');
     $this->assertTrue($result->isWarning());
     $this->assertEqual($result->getMessage(), 'requirement2, requirement2 description');
@@ -208,10 +211,22 @@ class MonitoringCoreTest extends MonitoringTestBase {
     );
     \Drupal::state()->set('monitoring_test.requirements', $requirements);
 
-    // Now the sensor should have escalated to the requirement in critical state.
+    // Now the sensor escalates to the requirement in critical state.
     $result = $this->runSensor('core_requirements_monitoring_test');
     $this->assertTrue($result->isCritical());
     $this->assertEqual($result->getMessage(), 'requirement3, requirement3 description');
+
+    // Check verbose message. All output should be part of it.
+
+    $verbose_output = $result->getVerboseOutput();
+    $this->setRawContent(drupal_render($verbose_output));
+    $this->assertText('requirement1');
+    $this->assertText('requirement1 description');
+    $this->assertText('requirement_excluded');
+    $this->assertText('excluded requirement');
+    $this->assertText('requirement that should be excluded from monitoring by the sensor');
+    $this->assertText('requirement2');
+    $this->assertText('requirement2 description');
   }
 
   /**
@@ -284,11 +299,10 @@ class MonitoringCoreTest extends MonitoringTestBase {
     $this->assertTrue(strpos($result->getMessage(), $file->getFileUri()) !== FALSE);
     $this->assertTrue($result->isWarning());
     $verbose_output = $result->getVerboseOutput();
-    $this->assertTrue(strpos(drupal_render($verbose_output), 'monitoring_test') !== FALSE);
-    $verbose_output = $result->getVerboseOutput();
-    $this->assertTrue(strpos(drupal_render($verbose_output), 'test_object') !== FALSE);
-    $verbose_output = $result->getVerboseOutput();
-    $this->assertTrue(strpos(drupal_render($verbose_output), '123456789') !== FALSE);
+    $this->setRawContent(drupal_render($verbose_output));
+    $this->assertText('monitoring_test');
+    $this->assertText('test_object');
+    $this->assertText('123456789');
   }
 
   /**
@@ -363,7 +377,8 @@ class MonitoringCoreTest extends MonitoringTestBase {
     $this->assertTrue($result->isCritical());
     // The verbose output should contain the cmd output.
     $verbose_output = $result->getVerboseOutput();
-    $this->assertTrue(strpos(drupal_render($verbose_output), 'dummy output') !== FALSE);
+    $this->setRawContent(drupal_render($verbose_output));
+    $this->assertText('dummy output');
     // Two lines of cmd output.
     $this->assertEqual($result->getValue(), 2);
     // If exec() is disabed on an environment, make it visible in output.
@@ -924,10 +939,11 @@ class MonitoringCoreTest extends MonitoringTestBase {
    */
   protected function createVocabulary() {
     // Create a vocabulary.
-    $vocabulary = entity_create('taxonomy_vocabulary');
-    $vocabulary->vid = Unicode::strtolower($this->randomMachineName());
-    $vocabulary->name = $this->randomMachineName();
-    $vocabulary->description = $this->randomMachineName();
+    $vocabulary = entity_create('taxonomy_vocabulary', array(
+      'vid' => Unicode::strtolower($this->randomMachineName()),
+      'name' => $this->randomMachineName(),
+      'description' => $this->randomMachineName(),
+    ));
     $vocabulary->save();
     return $vocabulary;
   }
diff --git a/src/Tests/MonitoringUITest.php b/src/Tests/MonitoringUITest.php
index 947a84c..c5dafec 100644
--- a/src/Tests/MonitoringUITest.php
+++ b/src/Tests/MonitoringUITest.php
@@ -422,6 +422,33 @@ class MonitoringUITest extends MonitoringTestBase {
   }
 
   /**
+   * Tests the UI of the requirements sensor.
+   */
+  public function testCoreRequirementsSensorUI() {
+    $account = $this->drupalCreateUser(array('administer monitoring'));
+    $this->drupalLogin($account);
+
+    $this->drupalGet('admin/config/system/monitoring/sensors/core_requirements_system');
+
+    // Verify the current keys to exclude.
+    $this->assertText('cron');
+
+    // Change the excluded keys.
+    $this->drupalPostForm(NULL, array(
+      'settings[exclude_keys]' => 'requirement_excluded'
+    ),  t('Save'));
+
+    $this->assertText('Sensor settings saved.');
+    $this->drupalGet('admin/config/system/monitoring/sensors/core_requirements_system');
+    // Verify the change in excluded keys
+    $this->assertText('requirement_excluded');
+    $this->assertNoText('cron');
+
+
+   // $this->drupalGet('admin/config/system/monitoring/sensors/ui_test_sensor');
+  }
+
+  /**
    * Submits a threshold settings form for a given sensor.
    *
    * @param string $sensor_name
