diff --git a/css/version_information.css b/css/version_information.css
index 7d4ec20..7097ed9 100644
--- a/css/version_information.css
+++ b/css/version_information.css
@@ -52,11 +52,11 @@
   background-position: 50% center;
 }
 
-.version-info-general-info__item-icon--d8:before {
+.version-info-general-info__item-icon--drupal:before {
   background-image: url('../images/d8-logo.svg');
 }
 
-.version-info-general-info__item-icon--clock:before {
+.version-info-general-info__item-icon--cron:before {
   background-image: url('../images/clock.svg');
 }
 
diff --git a/src/Controller/VersionInformationController.php b/src/Controller/VersionInformationController.php
index 47653c8..9dab1e7 100644
--- a/src/Controller/VersionInformationController.php
+++ b/src/Controller/VersionInformationController.php
@@ -2,14 +2,38 @@
 
 namespace Drupal\version_information\Controller;
 
-use Drupal\system\Controller\SystemInfoController;
 use Drupal\Core\Controller\ControllerBase;
+use Drupal\version_information\VersionInformationManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Class VersionInformationController.
  */
 class VersionInformationController extends ControllerBase {
 
+  /**
+   * The version information manager.
+   *
+   * @var \Drupal\version_information\VersionInformationManagerInterface
+   */
+  protected $versionInformationManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(VersionInformationManagerInterface $version_information_manager) {
+    $this->versionInformationManager = $version_information_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('version_information.manager')
+    );
+  }
+
   /**
    * Displays the site status report.
    *
@@ -18,21 +42,7 @@ class VersionInformationController extends ControllerBase {
    *   installation and whether this installation meets the requirements.
    */
   public function status() {
-    $versionInformation = new SystemInfoController(\Drupal::service('system.manager'));
-    $result = $versionInformation->status();
-    $build = [
-      '#title' => $this->t('Version Information'),
-      '#theme' => 'version_information_theme',
-      '#drupal' => $result['#requirements']['drupal'],
-      '#webserver' => $result['#requirements']['webserver'],
-      '#cron' => $result['#requirements']['cron'],
-      '#php' => $result['#requirements']['php'],
-      '#php_memory_limit' => $result['#requirements']['php_memory_limit'],
-      '#database_system' => $result['#requirements']['database_system'],
-      '#database_system_version' => $result['#requirements']['database_system_version'],
-    ];
-
-    return $build;
+    return $this->versionInformationManager->buildRenderableSystemInformation();
   }
 
 }
diff --git a/src/VersionInformationManager.php b/src/VersionInformationManager.php
new file mode 100644
index 0000000..0ecc2b1
--- /dev/null
+++ b/src/VersionInformationManager.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Drupal\version_information;
+
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\system\SystemManager;
+use Drupal\system\Controller\SystemInfoController;
+
+/**
+ * Main service class.
+ */
+class VersionInformationManager implements VersionInformationManagerInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * System manager.
+   *
+   * @var Drupal\system\SystemManager
+   */
+  protected $systemManager;
+
+  /**
+   * Module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Constructor method.
+   *
+   * @param \Drupal\system\SystemManager $system_manager
+   */
+  public function __construct(SystemManager $system_manager, ModuleHandlerInterface $module_handler) {
+    $this->systemManager = $system_manager;
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * Build a renderable array of the system information.
+   */
+  public function buildRenderableSystemInformation() {
+    $versionInformation = new SystemInfoController($this->systemManager);
+    $result = $versionInformation->status();
+    $build = [
+      '#theme' => 'version_information_theme',
+      '#items' => [
+        'drupal' => [
+          'type' => 'drupal',
+          'label' => $this->t('Drupal Version'),
+          'value' => $result['#requirements']['drupal'],
+        ],
+        'cron' => [
+          'type' => 'cron',
+          'label' => $this->t('Last Cron Run'),
+          'value' => $result['#requirements']['cron'],
+        ],
+        'server_software' => [
+          'type' => 'server',
+          'label' => $this->t('Web Server'),
+          'value' => $result['#requirements']['webserver'],
+        ],
+        'php' => [
+          'type' => 'php',
+          'label' => $this->t('PHP version'),
+          'value' => $result['#requirements']['php'],
+        ],
+        'database' => [
+          'type' => 'database',
+          'label' => $this->t('Database version and system'),
+          'value' => [
+            'system' => $result['#requirements']['database_system'],
+            'version' => $result['#requirements']['database_system_version'],
+          ],
+        ],
+      ],
+    ];
+    // Allow external modules to alter version information.
+    $this->moduleHandler->invokeAll('version_information_build_alter', [$this->systemManager, $this->moduleHandler, &$build]);
+
+    return $build;
+  }
+
+}
diff --git a/src/VersionInformationManagerInterface.php b/src/VersionInformationManagerInterface.php
new file mode 100644
index 0000000..3e274a2
--- /dev/null
+++ b/src/VersionInformationManagerInterface.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Drupal\version_information;
+
+/**
+ * Interface for Version information manager.
+ */
+interface VersionInformationManagerInterface {
+
+}
diff --git a/templates/version-information-theme.html.twig b/templates/version-information-theme.html.twig
index 07d5e25..adf4cb9 100644
--- a/templates/version-information-theme.html.twig
+++ b/templates/version-information-theme.html.twig
@@ -1,91 +1,33 @@
 <div class="version-information-container">
-  <div class="version-info-general-info__item">
-    <span class="version-info-general-info__item-icon version-info-general-info__item-icon--d8"></span>
-    <div class="version-info-general-info__item-value">
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Drupal Version'|t }}</strong>
-      </div>
-      {{ drupal.value }}
-      {% if drupal.description %}
-        {{ drupal.description }}
-      {% endif %}
-    </div>
-  </div>
-  <div class="version-info-general-info__item">
-    <span class="version-info-general-info__item-icon version-info-general-info__item-icon--clock"></span>
-    <div class="version-info-general-info__item-value">
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Last Cron Run'|t }}</strong>
-      </div>
-      {{ cron.value }}
-      {% if cron.run_cron %}
-        {{ cron.run_cron }}
-      {% endif %}
-      <div class="version-info-general-info__item-title">
-        {% if cron.description %}
-          {{ cron.description }}
-        {% endif %}
-      </div>
-    </div>
-  </div>
-  <div class="version-info-general-info__item">
-    <span class="version-info-general-info__item-icon version-info-general-info__item-icon--server"></span>
-    <div class="version-info-general-info__item-value">
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Web Server'|t }}</strong>
-      </div>
-      {{ webserver.value }}
-      {% if webserver.description %}
-        {{ webserver.description }}
-      {% endif %}
-    </div>
-  </div>
-  <div class="version-info-general-info__item">
-    <span class="version-info-general-info__item-icon version-info-general-info__item-icon--php"></span>
-    <div class="version-info-general-info__item-value">
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'PHP'|t }}</strong>
-      </div>
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Version'|t }}</strong>
-        <div class="version-info-general-info__item-content">
-          {{ php.value }}
-          {% if php.description %}
-            {{ php.description }}
+  {% if items %}
+    {% for item in items %}
+      <div class="version-info-general-info__item">
+        <span class="version-info-general-info__item-icon version-info-general-info__item-icon--{{ item.type }}"></span>
+        <div class="version-info-general-info__item-value">
+          {% if item.label %}
+            <div class="version-info-general-info__item-title">
+              <strong>{{ item.label }}</strong>
+            </div>
           {% endif %}
-        </div>
-      </div>
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Memory limit'|t }}</strong>
-        <div class="version-info-general-info__item-content">
-          {{ php_memory_limit.value }}
-          {% if php_memory_limit.description %}
-            {{ php_memory_limit.description }}
+          <div class="version-info-general-info__item-value-value">
+            {% if item.value.value %}
+              {{ item.value.value }}
+            {% elseif item.value.version.value is defined and item.value.system.value is defined %}
+              {{ item.value.version.value }}
+              {{ item.value.system.value }}
+            {% else %}
+              {{ item.value }}
+            {% endif %}
+          </div>
+          {% if item.value.description %}
+            <div class="version-info-general-info__item-value-description">
+              {{ item.value.description }}
+            </div>
           {% endif %}
+        <!--/version-info-general-info__item-value-->
         </div>
+      <!--/version-info-general-info__item-->
       </div>
-    </div>
-  </div>
-  <div class="version-info-general-info__item">
-    <span class="version-info-general-info__item-icon version-info-general-info__item-icon--database"></span>
-    <div class="version-info-general-info__item-value">
-      <div class="version-info-general-info__item-title">
-        <strong>{{ 'Database'|t }}</strong>
-      </div>
-      <strong>{{ 'Version'|t }}</strong>
-      <div class="version-info-general-info__item-content">
-        {{ database_system_version.value }}
-        {% if database_system_version.description %}
-          {{ database_system_version.description }}
-        {% endif %}
-      </div>
-      <strong>{{ 'System'|t }}</strong>
-      <div class="version-info-general-info__item-content">
-        {{ database_system.value }}
-        {% if database_system.description %}
-          {{ database_system.description }}
-        {% endif %}
-      </div>
-    </div>
-  </div>
+    {% endfor %}
+  {% endif %}
 </div>
diff --git a/version_information.api.php b/version_information.api.php
new file mode 100644
index 0000000..bb589f9
--- /dev/null
+++ b/version_information.api.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @file
+ * Hooks for the version_information module.
+ */
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\system\SystemManager;
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * Alter version information before being displayed.
+ */
+function hook_version_information_build_alter(SystemManager $system_manager, ModuleHandlerInterface $module_handler, array &$build) {
+}
+
+/**
+ * @} End of "addtogroup hooks".
+ */
diff --git a/version_information.module b/version_information.module
index 02b3469..5b68446 100644
--- a/version_information.module
+++ b/version_information.module
@@ -45,17 +45,11 @@ function version_information_toolbar() {
 /**
  * Implements hook_theme().
  */
-function version_information_theme() {
+function version_information_theme($existing, $type, $theme, $path) {
   return [
     'version_information_theme' => [
       'variables' => [
-        'drupal' => NULL,
-        'webserver' => NULL,
-        'cron' => NULL,
-        'php' => NULL,
-        'php_memory_limit' => NULL,
-        'database_system' => NULL,
-        'database_system_version' => NULL,
+        'items' => [],
       ],
     ],
   ];
diff --git a/version_information.services.yml b/version_information.services.yml
new file mode 100644
index 0000000..f691f40
--- /dev/null
+++ b/version_information.services.yml
@@ -0,0 +1,4 @@
+services:
+  version_information.manager:
+    class: Drupal\version_information\VersionInformationManager
+    arguments: ['@system.manager', '@module_handler']
