diff --git a/config/extlink.settings.yml b/config/extlink.settings.yml
deleted file mode 100644
index cde9d31..0000000
--- a/config/extlink.settings.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-extlink_target: 0
-extlink_nofollow: 0
-extlink_subdomains: 1
-extlink_alert: 0
-extlink_alert_text: 'This link will take you to an external web site. We are not responsible for their content.'
-extlink_exclude: ''
-extlink_include: ''
-extlink_class: 'ext'
-extlink_mailto_class: 'mailto'
diff --git a/config/install/extlink.settings.yml b/config/install/extlink.settings.yml
new file mode 100644
index 0000000..f50b50b
--- /dev/null
+++ b/config/install/extlink.settings.yml
@@ -0,0 +1,14 @@
+extlink_target: false
+extlink_nofollow: false
+extlink_subdomains: true
+extlink_alert: true
+extlink_alert_text: 'This link will take you to an external web site. We are not responsible for their content.'
+extlink_exclude: ''
+extlink_include: ''
+extlink_class: 'ext'
+extlink_label: '(link is external)'
+extlink_img_class: false
+extlink_css_exclude: ''
+extlink_css_explicit: ''
+extlink_mailto_class: 'mailto'
+extlink_mailto_label: '(link sends email)'
diff --git a/config/schema/extlink.schema.yml b/config/schema/extlink.schema.yml
index 97b6178..bbcae2c 100644
--- a/config/schema/extlink.schema.yml
+++ b/config/schema/extlink.schema.yml
@@ -1,7 +1,7 @@
 # Schema for the configuration files of the exlink module.
 
 extlink.settings:
-  type: mapping
+  type: config_object
   label: 'External Links Settings'
   mapping:
     extlink_target:
@@ -28,6 +28,9 @@ extlink.settings:
     extlink_class:
       type: string
       label: 'Add icon to external links'
+    extlink_label:
+      type: string
+      label: 'Alternative text for external link icon'
     extlink_img_class:
       type: boolean
       label: 'Treat images wrapped in an anchor tag as external links'
@@ -40,3 +43,6 @@ extlink.settings:
     extlink_mailto_class:
       type: string
       label: 'Add icon to mailto links'
+    extlink_mailto_label:
+      type: string
+      label: 'Alternative text for mailto icon'
diff --git a/extlink.install b/extlink.install
index d55d059..1d1c385 100644
--- a/extlink.install
+++ b/extlink.install
@@ -12,3 +12,14 @@ function extlink_install() {
   // Weight needs to be 1 for compatibility with SpamSpan.
   module_set_weight('extlink', 1);
 }
+
+/**
+ * Add extlink and mailto icon labels to the default configuration.
+ */
+function extlink_update_8101() {
+  $config_factory = \Drupal::configFactory();
+  $config = $config_factory->getEditable('extlink.settings');
+  $config->set('extlink_label', '(link is external)');
+  $config->set('extlink_mailto_label', '(link sends email)');
+  $config->save(TRUE);
+}
diff --git a/extlink.js b/extlink.js
index edf843c..caeb260 100644
--- a/extlink.js
+++ b/extlink.js
@@ -185,10 +185,10 @@
       var $link = $($links_to_process[i]);
       if (class_name !== '0' && ($link.css('display') === 'inline' || $link.css('display') === 'inline-block' || $link.css('display') === 'block')) {
         if (class_name === drupalSettings.data.extlink.mailtoClass) {
-          $link.append('<span class="' + class_name + '"><span class="element-invisible"> ' + drupalSettings.data.extlink.mailtoLabel + '</span></span>');
+          $link.append('<span class="' + class_name + '"><span class="visually-hidden"> ' + drupalSettings.data.extlink.mailtoLabel + '</span></span>');
         }
         else {
-          $link.append('<span class="' + class_name + '"><span class="element-invisible"> ' + drupalSettings.data.extlink.extLabel + '</span></span>');
+          $link.append('<span class="' + class_name + '"><span class="visually-hidden"> ' + drupalSettings.data.extlink.extLabel + '</span></span>');
         }
       }
     }
diff --git a/extlink.min.js b/extlink.min.js
index 413cc9f..9583465 100644
--- a/extlink.min.js
+++ b/extlink.min.js
@@ -1 +1 @@
-!function(a,b,c){"use strict";b.extlink=b.extlink||{},b.extlink.attach=function(c,d){if(d.data.hasOwnProperty("extlink")){var h,e=/^(([^\/:]+?\.)*)([^\.:]{1,})((\.[a-z0-9]{1,253})*)(:[0-9]{1,5})?$/,f=window.location.host.replace(e,"$3$4"),g=window.location.host.replace(e,"$1");h=d.data.extlink.extSubdomains?"([^/]*\\.)?":"www."===g||""===g?"(www\\.)?":g.replace(".","\\.");var i=new RegExp("^https?://"+h+f,"i"),j=!1;d.data.extlink.extInclude&&(j=new RegExp(d.data.extlink.extInclude.replace(/\\/,"\\"),"i"));var k=!1;d.data.extlink.extExclude&&(k=new RegExp(d.data.extlink.extExclude.replace(/\\/,"\\"),"i"));var l=!1;d.data.extlink.extCssExclude&&(l=d.data.extlink.extCssExclude);var m=!1;d.data.extlink.extCssExplicit&&(m=d.data.extlink.extCssExplicit);var n=[],o=[];a("a:not(."+d.data.extlink.extClass+", ."+d.data.extlink.mailtoClass+"), area:not(."+d.data.extlink.extClass+", ."+d.data.extlink.mailtoClass+")",c).each(function(b){try{var c="";"string"==typeof this.href?c=this.href.toLowerCase():"object"==typeof this.href&&(c=this.href.baseVal),0!==c.indexOf("http")||(c.match(i)||k&&c.match(k))&&(!j||!c.match(j))||l&&a(this).parents(l).length>0||m&&a(this).parents(m).length<1?"AREA"===this.tagName||0!==c.indexOf("mailto:")||l&&a(this).parents(l).length>0||m&&a(this).parents(m).length<1||o.push(this):n.push(this)}catch(a){return!1}}),d.data.extlink.extClass&&b.extlink.applyClassAndSpan(n,d.data.extlink.extClass),d.data.extlink.mailtoClass&&b.extlink.applyClassAndSpan(o,d.data.extlink.mailtoClass),d.data.extlink.extTarget&&(a(n).attr({target:"_blank"}),a(n).attr("rel",function(a,b){return null===b||"undefined"==typeof b?"noopener noreferrer":b.indexOf("noopener")>-1||b.indexOf("noreferrer")>-1?b.indexOf("noopener")===-1?b+" noopener":b.indexOf("noreferrer")===-1?b+" noreferrer":b:b+" noopener noreferrer"})),d.data.extlink.extNofollow&&a(n).attr("rel",function(a,b){if(b.indexOf("nofollow")===-1)return b+" nofollow"}),b.extlink=b.extlink||{},b.extlink.popupClickHandler=b.extlink.popupClickHandler||function(){if(d.data.extlink.extAlert)return confirm(d.data.extlink.extAlertText)},a(n).click(function(a){return b.extlink.popupClickHandler(a,this)})}},b.extlink.applyClassAndSpan=function(b,d){var e;if(c.data.extlink.extImgClass)e=a(b);else{var f=a(b).find("img").parents("a");e=a(b).not(f)}"0"!==d&&e.addClass(d);var g,h=e.length;for(g=0;g<h;g++){var i=a(e[g]);"0"===d||"inline"!==i.css("display")&&"inline-block"!==i.css("display")&&"block"!==i.css("display")||(d===c.data.extlink.mailtoClass?i.append('<span class="'+d+'"><span class="element-invisible"> '+c.data.extlink.mailtoLabel+"</span></span>"):i.append('<span class="'+d+'"><span class="element-invisible"> '+c.data.extlink.extLabel+"</span></span>"))}},b.behaviors.extlink=b.behaviors.extlink||{},b.behaviors.extlink.attach=function(a,c){"function"==typeof extlinkAttach?extlinkAttach(a):b.extlink.attach(a,c)}}(jQuery,Drupal,drupalSettings);
+!function(a,b,c){"use strict";b.extlink=b.extlink||{},b.extlink.attach=function(c,d){if(d.data.hasOwnProperty("extlink")){var h,e=/^(([^\/:]+?\.)*)([^\.:]{1,})((\.[a-z0-9]{1,253})*)(:[0-9]{1,5})?$/,f=window.location.host.replace(e,"$3$4"),g=window.location.host.replace(e,"$1");h=d.data.extlink.extSubdomains?"([^/]*\\.)?":"www."===g||""===g?"(www\\.)?":g.replace(".","\\.");var i=new RegExp("^https?://"+h+f,"i"),j=!1;d.data.extlink.extInclude&&(j=new RegExp(d.data.extlink.extInclude.replace(/\\/,"\\"),"i"));var k=!1;d.data.extlink.extExclude&&(k=new RegExp(d.data.extlink.extExclude.replace(/\\/,"\\"),"i"));var l=!1;d.data.extlink.extCssExclude&&(l=d.data.extlink.extCssExclude);var m=!1;d.data.extlink.extCssExplicit&&(m=d.data.extlink.extCssExplicit);var n=[],o=[];a("a:not(."+d.data.extlink.extClass+", ."+d.data.extlink.mailtoClass+"), area:not(."+d.data.extlink.extClass+", ."+d.data.extlink.mailtoClass+")",c).each(function(b){try{var c="";"string"==typeof this.href?c=this.href.toLowerCase():"object"==typeof this.href&&(c=this.href.baseVal),0!==c.indexOf("http")||(c.match(i)||k&&c.match(k))&&(!j||!c.match(j))||l&&a(this).parents(l).length>0||m&&a(this).parents(m).length<1?"AREA"===this.tagName||0!==c.indexOf("mailto:")||l&&a(this).parents(l).length>0||m&&a(this).parents(m).length<1||o.push(this):n.push(this)}catch(a){return!1}}),d.data.extlink.extClass&&b.extlink.applyClassAndSpan(n,d.data.extlink.extClass),d.data.extlink.mailtoClass&&b.extlink.applyClassAndSpan(o,d.data.extlink.mailtoClass),d.data.extlink.extTarget&&(a(n).attr({target:"_blank"}),a(n).attr("rel",function(a,b){return null===b||"undefined"==typeof b?"noopener noreferrer":b.indexOf("noopener")>-1||b.indexOf("noreferrer")>-1?b.indexOf("noopener")===-1?b+" noopener":b.indexOf("noreferrer")===-1?b+" noreferrer":b:b+" noopener noreferrer"})),d.data.extlink.extNofollow&&a(n).attr("rel",function(a,b){if(b.indexOf("nofollow")===-1)return b+" nofollow"}),b.extlink=b.extlink||{},b.extlink.popupClickHandler=b.extlink.popupClickHandler||function(){if(d.data.extlink.extAlert)return confirm(d.data.extlink.extAlertText)},a(n).click(function(a){return b.extlink.popupClickHandler(a,this)})}},b.extlink.applyClassAndSpan=function(b,d){var e;if(c.data.extlink.extImgClass)e=a(b);else{var f=a(b).find("img").parents("a");e=a(b).not(f)}"0"!==d&&e.addClass(d);var g,h=e.length;for(g=0;g<h;g++){var i=a(e[g]);"0"===d||"inline"!==i.css("display")&&"inline-block"!==i.css("display")&&"block"!==i.css("display")||(d===c.data.extlink.mailtoClass?i.append('<span class="'+d+'"><span class="visually-hidden"> '+c.data.extlink.mailtoLabel+"</span></span>"):i.append('<span class="'+d+'"><span class="visually-hidden"> '+c.data.extlink.extLabel+"</span></span>"))}},b.behaviors.extlink=b.behaviors.extlink||{},b.behaviors.extlink.attach=function(a,c){"function"==typeof extlinkAttach?extlinkAttach(a):b.extlink.attach(a,c)}}(jQuery,Drupal,drupalSettings);
diff --git a/extlink.module b/extlink.module
index 3764428..4e5b450 100644
--- a/extlink.module
+++ b/extlink.module
@@ -9,6 +9,9 @@ use Drupal\Component\Utility\Html;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
 
+/**
+ * Implements hook_modules_installed().
+ */
 function extlink_modules_installed($modules) {
   if (in_array('extlink', $modules)) {
     // Be friendly to your users: what to do after install?
@@ -40,19 +43,19 @@ function extlink_page_attachments(array &$attachments) {
   $attachments['#attached']['library'][] = 'extlink/drupal.extlink';
 
   $attachments['#attached']['drupalSettings']['data']['extlink'] = [
-    'extTarget'      => $config->get('extlink_target', 0),
-    'extNofollow'      => $config->get('extlink_nofollow', 0),
-    'extClass'       => $config->get('extlink_class', 'ext'),
-    'extLabel'       => Html::escape($config->get('extlink_label', t('(link is external)'))),
-    'extImgClass'    => $config->get('extlink_img_class', 0),
-    'extSubdomains'  => $config->get('extlink_subdomains', 1),
-    'extExclude'     => $config->get('extlink_exclude', ''),
-    'extInclude'     => $config->get('extlink_include', ''),
-    'extCssExclude'  => $config->get('extlink_css_exclude', ''),
-    'extCssExplicit' => $config->get('extlink_css_explicit', ''),
-    'extAlert'       => $config->get('extlink_alert', 0),
-    'extAlertText'   => $config->get('extlink_alert_text', t('This link will take you to an external web site. We are not responsible for their content.')),
-    'mailtoClass'    => $config->get('extlink_mailto_class', 'mailto'),
-    'mailtoLabel'    => Html::escape($config->get('extlink_mailto_label', t('(link sends e-mail)'))),
+    'extTarget'      => $config->get('extlink_target'),
+    'extNofollow'    => $config->get('extlink_nofollow'),
+    'extClass'       => $config->get('extlink_class'),
+    'extLabel'       => Html::escape($config->get('extlink_label')),
+    'extImgClass'    => $config->get('extlink_img_class'),
+    'extSubdomains'  => $config->get('extlink_subdomains'),
+    'extExclude'     => $config->get('extlink_exclude'),
+    'extInclude'     => $config->get('extlink_include'),
+    'extCssExclude'  => $config->get('extlink_css_exclude'),
+    'extCssExplicit' => $config->get('extlink_css_explicit'),
+    'extAlert'       => $config->get('extlink_alert'),
+    'extAlertText'   => $config->get('extlink_alert_text'),
+    'mailtoClass'    => $config->get('extlink_mailto_class'),
+    'mailtoLabel'    => Html::escape($config->get('extlink_mailto_label')),
   ];
 }
