TEXT-219: StringTokenizer.getTokenList to return an independent list
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 3a557ac..3893deb 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -46,6 +46,7 @@
   <body>
   <release version="1.10.1" date="20YY-MM-DD" description="Release 1.10.1. Requires Java 8.">
     <!-- FIX -->
+    <action issue="TEXT-219" type="fix" dev="aherbert" due-to="Jaap Sperling">Fix StringTokenizer.getTokenList to return an independent modifiable list</action>
     <!-- ADD -->
     <!-- UPDATE -->
     <action                  type="update" dev="kinow" due-to="Dependabot">Bump actions/cache from 3.0.8 to 3.0.10 #361, #365.</action>
diff --git a/src/main/java/org/apache/commons/text/StringTokenizer.java b/src/main/java/org/apache/commons/text/StringTokenizer.java
index 731c468..3df7423 100644
--- a/src/main/java/org/apache/commons/text/StringTokenizer.java
+++ b/src/main/java/org/apache/commons/text/StringTokenizer.java
@@ -558,7 +558,7 @@
      */
     public List<String> getTokenList() {
         checkTokenized();
-        return Arrays.asList(tokens);
+        return new ArrayList<>(Arrays.asList(tokens));
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/text/StringTokenizerTest.java b/src/test/java/org/apache/commons/text/StringTokenizerTest.java
index 6bf9788..458cc81 100644
--- a/src/test/java/org/apache/commons/text/StringTokenizerTest.java
+++ b/src/test/java/org/apache/commons/text/StringTokenizerTest.java
@@ -767,10 +767,24 @@
         final String input = "a  b c";
         final StringTokenizer tok = new StringTokenizer(input);
         final String[] array = tok.getTokenArray();
-        final List<?> list = tok.getTokenList();
+        final List<String> list = tok.getTokenList();
 
         assertEquals(Arrays.asList(array), list);
         assertEquals(3, list.size());
+
+        // Test modification of the returned list
+        list.set(0, "z");
+        list.remove(1);
+        list.set(1, "y");
+        list.add("x");
+
+        assertEquals(Arrays.asList(new String[] {"z", "y", "x"}), list);
+
+        // The tokenizer is unchanged
+        assertEquals(Arrays.asList(array), tok.getTokenList());
+        assertEquals("a", tok.next());
+        assertEquals("b", tok.next());
+        assertEquals("c", tok.next());
     }
 
     @Test