diff --git a/js/select2boxes.js b/js/select2boxes.js
index e141655..240edc0 100644
--- a/js/select2boxes.js
+++ b/js/select2boxes.js
@@ -61,6 +61,7 @@
           width: 'style',
           tags: autocreate,
           tokenSeparators: [','],
+          tokenizer,
           containerCssClass: (drupalSettings.preloaded_entries && drupalSettings.preloaded_entries[field_name])
             ? 'preloaded'
             : '',
@@ -195,6 +196,7 @@
           multiple: multiple,
           tags: autocreate,
           tokenSeparators: [','],
+          tokenizer,
           templateResult: flagsIcons,
           templateSelection: flagsIcons
         });
@@ -283,6 +285,65 @@
           $container.append('<span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>');
         }
       }
+
+      /**
+       * 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
+        };
+      }
     }
   };
 
