diff --git a/README.md b/README.md
index 68d360fcd0b810be8fa162a96350c951962ea21f..8b9252ac3e584bd068b39efeb017943ee8735b86 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,41 @@
+# Javascript Timer module
 
-# OVERVIEW
 The Javascript Timer module provides a timer api that can hook html elements to
 javascript widget objects. This is useful if you want a moving timer/clock or a
 widget that updates every second. It comes with widgets for a countdown timer, a
 countup timer, and a clock.
 
+## Table of contents
 
-# INSTALLING
-Simply by activating the module and a widget.
-There are no module dependencies.
-There are no table components.
+- Requirements
+- Recommended modules
+- Installation
+- Configuration
+- General Usage
+  - Inline HTML Examples
+  - PHP Input Format Examples
+- Timer widget OUTPUT FORMAT
+- Maintainers
 
+## Requirements
 
-# GENERAL USAGE
+This module has no dependencies
+
+## Recommended modules
+
+This module has no recommended modules
+
+## Installation
+
+Install as you would normally install a contributed Drupal module. For further information, see [Installing Drupal Modules](https://www.drupal.org/docs/extending-drupal/installing-drupal-modules).
+
+## Configuration
+
+Module configuration can be found at `admin/config/system/jstimer`. The config
+relies on other modules to generate the config form. For example the jst_clock or
+jst_timer modules bundled with this module.
+
+## General Usage
 You can either build-up your own nested <span> tags within
 a full html (or filtered with <spans allowed>) input format, or
 use php directly. There are now theme functions to help with
@@ -21,7 +44,7 @@ the php formatted strings.
 NOTE: the date format is an ISO8601 subset, so use the formats as you see them below.
 
 
-## Inline HTML Examples
+### Inline HTML Examples
 
 Countdown timer (with DateTime specified):
 ```
@@ -87,7 +110,7 @@ HTML Canvas Clock:
 
 
 
-## PHP Input Format Examples
+### PHP Input Format Examples
 
 Countdown timer:
 ```
@@ -156,10 +179,7 @@ print theme('jstimer', array(
 ```
 
 
-# Timer widget OUTPUT FORMAT
-The display of the actual timer is configurable in the Site configuration
-admin menu: countdowntimer.
-
+## Timer widget OUTPUT FORMAT
 IMPORTANT: If you have a format_num and a format_txt in a timer, the format_txt
 value will trump the format_num value.
 
@@ -190,14 +210,9 @@ Duration/Interval replacements:
 - %tot_seconds%  - Total seconds from set date, can be larger than 59 (integer number)
 - %sign%         - Is used for NASA style countdown, will be '-' before set date and '' after set date (blank or '-')
 
+## Maintainers
 
-
-
-# CAVEATS
-If a daylight saving time shift should occur in either the client's tz or
-the target's tz between the current date/time and your target datetime,
-you could be off by one hour until you pass the point of conversion.
-
-If you use the PHP input format beware. If you have a syntax or other PHP error
-and you've put your code in a block visible on all pages your entire site
-may go down and you'll need to edit your database directly to delete that block!
+- [Aaron Ferris] - [aaron.ferris](https://www.drupal.org/u/aaronferris)
+- [Ivan Trokhanenko] - [i-trokhanenko](https://www.drupal.org/u/i-trokhanenko)
+- [John Vandervort] - [jvandervort](https://www.drupal.org/u/jvandervort)
+- [Paul Sebborn] - [psebborn](https://www.drupal.org/u/psebborn)
diff --git a/jstimer.module b/jstimer.module
index 4b591bdbefe045e8f3a03c046ada054cdc5a2ec0..2438c2b6f495ec463b072699b9244636d01e43dc 100644
--- a/jstimer.module
+++ b/jstimer.module
@@ -1,6 +1,8 @@
 <?php
 
 use Drupal\Core\File\FileSystemInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+
 /**
  * @file
  * A module which creates javascript timed dhtml things.
@@ -13,19 +15,17 @@ use Drupal\Core\File\FileSystemInterface;
 /**
  * Implementation of hook_help().
  */
-function jstimer_help($path, $arg) {
-  switch ($path) {
-    case 'admin/modules#description':
-      return t('A module which creates javascript timers.');
-    case 'admin/help#jstimer':
-    $output = <<<HELP_TXT
-<p>Please look at the readme.txt file that comes with this module.  It really has a lot of great information.</p>
-<p>The javascript timer module provides an api to allow you to make dhtml widgets which are updated every second.
-There are some good examples for node and block usage in the readme.txt file.
-Please look at it.</p>
-HELP_TXT;
-      $output .= '<p>Usage Example for a Node<br/>&lt;span class="jst_timer"&gt;Count Up to 11:30<br/>&lt;span style="display:none" class="datetime"&gt;2007-02-26T09:30:00&lt;/span&gt;<br/>&lt;span style="display:none"<br/>';
-      $output .= '&lt;span style="display:none" class="dir"&gt;up&lt;/span&gt;<br/>&lt;/span&gt;</p>';
+function jstimer_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.jstimer':
+      $output = '<p>' . t('Please look at the README.md file that comes with this module.  It really has a lot of great information.') . '</p>';
+      $output .= '<p>' . t('The javascript timer module provides an api to allow you to make dhtml widgets which are updated every second.') . '</p>';
+      $output .= '<p>' . t('Usage Example for a Node:<br/>');
+      $output .= '<pre>' . t('&lt;span class="jst_timer"&gt;Count Up to 11:30<br/>');
+      $output .= t('&#9;&lt;span style="display:none" class="datetime"&gt;2025-02-26T11:30:00&lt;/span&gt;<br/>');
+      $output .= t('&#9;&lt;span style="display:none"<br/>');
+      $output .= t('&#9;&lt;span style="display:none" class="dir"&gt;up&lt;/span&gt;<br/>');
+      $output .= t('&lt;/span&gt;</p>') . '</pre>';
       return ($output);
   }
 }