diff --git a/js/select2boxes.js b/js/select2boxes.js
index e141655..6a3fb04 100644
--- a/js/select2boxes.js
+++ b/js/select2boxes.js
@@ -5,6 +5,65 @@
 (function ($, Drupal, drupalSettings) {
   'use strict';
 
+  /**
+   * Customize tokenizer.
+   *
+   * @param {object} $params
+   *   Tokenizer parameters
+   * @param {object} $e
+   *   Tokenizer element
+   * @param {function} $callback
+   *   Tokenizer callback
+   */
+  const tokenizer = function(params, e, callback) {
+    var separators = e.options.tokenSeparators || [];
+    var term = params.term;
+    var i = 0;
+
+    var createTag = this.createTag || function (params) {
+      return {
+        id: params.term,
+        text: params.term
+      };
+    };
+
+    if (term.length && separators.length && $.inArray(term.slice(-1), separators) === -1) {
+      term = term + separators[0];
+    }
+
+    while (i < term.length) {
+      var termChar = term[i];
+
+      if ($.inArray(termChar, separators) === -1) {
+        i++;
+
+        continue;
+      }
+
+      var part = term.substr(0, i);
+      var partParams = $.extend({}, params, {
+        term: part
+      });
+
+      var data = createTag(partParams);
+
+      if (data == null) {
+        i++;
+        continue;
+      }
+
+      callback(data);
+
+      // Reset the term to not include the tokenized portion
+      term = term.substr(i + 1) || '';
+      i = 0;
+    }
+
+    return {
+      term: term
+    };
+  }
+
   Drupal.behaviors.select2widget = {
     attach: function (context) {
       // Additional code to make removing/creating elements correctly works.
@@ -61,6 +120,7 @@
           width: 'style',
           tags: autocreate,
           tokenSeparators: [','],
+          tokenizer,
           containerCssClass: (drupalSettings.preloaded_entries && drupalSettings.preloaded_entries[field_name])
             ? 'preloaded'
             : '',
@@ -195,6 +255,7 @@
           multiple: multiple,
           tags: autocreate,
           tokenSeparators: [','],
+          tokenizer,
           templateResult: flagsIcons,
           templateSelection: flagsIcons
         });
