diff --git a/CHANGELOG.md b/CHANGELOG.md
index e98fe1f..55c085e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,24 @@
 # Changelog
 
-## [2.4.1] - 2023-XX-XX
+## [2.4.1] - 2024-01-18
 - Fix issue [#292](https://github.com/intersystems/language-server/issues/292): Add intellisense for instance variable (i%PropertyName) syntax
 - Fix issue [#296](https://github.com/intersystems/language-server/issues/296): Code completion doesn't appear when typing dot in a class name at the class level
 - Fix issue [#299](https://github.com/intersystems/language-server/issues/299): Add intellisense for class name parameters
 - Fix issue [#300](https://github.com/intersystems/language-server/issues/300): Allow `UnknownUser` to not have a password
+- Parser changes:
+  - DP-426315: Coloring for FREEZE & UNFREEZE PLAN
+  - DP-426334: Correct syntax coloring when a parenthesis-enclosed dollar function is used as an oref
+  - DP-426396: Coloring for PURGE QUERIES
+  - DP-426989: Coloring for CREATE INDEX ... AS ...
+  - DP-427139: Coloring for COMPUTECODE [PYTHON | OBJECTSCRIPT]
+  - DP-427233: Coloring for EXPLAIN
+  - DP-427413: Coloring for CREATE MODEL
+  - DP-427471: Coloring for ALTER MODEL
+  - DP-427478: Coloring for DROP MODEL
+  - DP-427665: Coloring for TRAIN MODEL
+  - DP-427729: Coloring for VALIDATE MODEL
+  - DP-427985: Coloring for new ML Admin Privileges
+  - DP-428056: Coloring for SET ML CONFIGURATION
 
 ## [2.4.0] - 2023-10-17
 - Fix issue [#282](https://github.com/intersystems/language-server/issues/282): Syntax error in SQL query using PARTITION or OVER
diff --git a/client/package-lock.json b/client/package-lock.json
index 28ade4f..5bc6c03 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -1,19 +1,19 @@
 {
   "name": "language-server-client",
-  "version": "2.4.0-SNAPSHOT",
+  "version": "2.4.1-SNAPSHOT",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "language-server-client",
-      "version": "2.4.0-SNAPSHOT",
+      "version": "2.4.1-SNAPSHOT",
       "dependencies": {
-        "axios": "^1.5.1",
+        "axios": "^1.6.5",
         "vscode-cache": "^0.3.0",
         "vscode-languageclient": "^9.0.1"
       },
       "devDependencies": {
-        "@types/semver": "^7.5.3",
+        "@types/semver": "^7.5.6",
         "@types/vscode": "1.82.0"
       },
       "engines": {
@@ -21,9 +21,9 @@
       }
     },
     "node_modules/@types/semver": {
-      "version": "7.5.3",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz",
-      "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==",
+      "version": "7.5.6",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+      "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
       "dev": true
     },
     "node_modules/@types/vscode": {
@@ -38,11 +38,11 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "node_modules/axios": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
-      "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
+      "version": "1.6.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+      "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
       "dependencies": {
-        "follow-redirects": "^1.15.0",
+        "follow-redirects": "^1.15.4",
         "form-data": "^4.0.0",
         "proxy-from-env": "^1.1.0"
       }
@@ -80,9 +80,9 @@
       }
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+      "version": "1.15.5",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
       "funding": [
         {
           "type": "individual",
@@ -219,9 +219,9 @@
   },
   "dependencies": {
     "@types/semver": {
-      "version": "7.5.3",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz",
-      "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==",
+      "version": "7.5.6",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+      "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
       "dev": true
     },
     "@types/vscode": {
@@ -236,11 +236,11 @@
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "axios": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
-      "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
+      "version": "1.6.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+      "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
       "requires": {
-        "follow-redirects": "^1.15.0",
+        "follow-redirects": "^1.15.4",
         "form-data": "^4.0.0",
         "proxy-from-env": "^1.1.0"
       }
@@ -272,9 +272,9 @@
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
     },
     "follow-redirects": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+      "version": "1.15.5",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw=="
     },
     "form-data": {
       "version": "4.0.0",
diff --git a/client/package.json b/client/package.json
index a02b517..03b6175 100644
--- a/client/package.json
+++ b/client/package.json
@@ -7,12 +7,12 @@
     "vscode": "^1.82.0"
   },
   "dependencies": {
-    "axios": "^1.5.1",
+    "axios": "^1.6.5",
     "vscode-cache": "^0.3.0",
     "vscode-languageclient": "^9.0.1"
   },
   "devDependencies": {
-    "@types/semver": "^7.5.3",
+    "@types/semver": "^7.5.6",
     "@types/vscode": "1.82.0"
   }
 }
diff --git a/package-lock.json b/package-lock.json
index b0a222a..5e6abf0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,23 +1,23 @@
 {
   "name": "language-server",
-  "version": "2.4.0-SNAPSHOT",
+  "version": "2.4.1-SNAPSHOT",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "language-server",
-      "version": "2.4.0-SNAPSHOT",
+      "version": "2.4.1-SNAPSHOT",
       "hasInstallScript": true,
       "license": "SEE LICENSE IN LICENSE.txt",
       "devDependencies": {
         "@types/node": "^18.15.3",
-        "@vscode/vsce": "^2.21.1",
+        "@vscode/vsce": "^2.22.0",
         "merge-options": "^3.0.4",
         "node-loader": "^2.0.0",
         "ovsx": "^0.8.3",
         "rimraf": "^5.0.5",
-        "ts-loader": "^9.5.0",
-        "typescript": "^5.2.2",
+        "ts-loader": "^9.5.1",
+        "typescript": "^5.3.3",
         "webpack": "^5.89.0",
         "webpack-cli": "^5.1.4"
       },
@@ -158,9 +158,9 @@
       "dev": true
     },
     "node_modules/@vscode/vsce": {
-      "version": "2.21.1",
-      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.21.1.tgz",
-      "integrity": "sha512-f45/aT+HTubfCU2oC7IaWnH9NjOWp668ML002QiFObFRVUCoLtcwepp9mmql/ArFUy+HCHp54Xrq4koTcOD6TA==",
+      "version": "2.22.0",
+      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.22.0.tgz",
+      "integrity": "sha512-8df4uJiM3C6GZ2Sx/KilSKVxsetrTBBIUb3c0W4B1EWHcddioVs5mkyDKtMNP0khP/xBILVSzlXxhV+nm2rC9A==",
       "dev": true,
       "dependencies": {
         "azure-devops-node-api": "^11.0.1",
@@ -2804,9 +2804,9 @@
       }
     },
     "node_modules/ts-loader": {
-      "version": "9.5.0",
-      "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz",
-      "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==",
+      "version": "9.5.1",
+      "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
+      "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
       "dev": true,
       "dependencies": {
         "chalk": "^4.1.0",
@@ -2866,9 +2866,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
-      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -3360,9 +3360,9 @@
       "dev": true
     },
     "@vscode/vsce": {
-      "version": "2.21.1",
-      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.21.1.tgz",
-      "integrity": "sha512-f45/aT+HTubfCU2oC7IaWnH9NjOWp668ML002QiFObFRVUCoLtcwepp9mmql/ArFUy+HCHp54Xrq4koTcOD6TA==",
+      "version": "2.22.0",
+      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.22.0.tgz",
+      "integrity": "sha512-8df4uJiM3C6GZ2Sx/KilSKVxsetrTBBIUb3c0W4B1EWHcddioVs5mkyDKtMNP0khP/xBILVSzlXxhV+nm2rC9A==",
       "dev": true,
       "requires": {
         "azure-devops-node-api": "^11.0.1",
@@ -5321,9 +5321,9 @@
       }
     },
     "ts-loader": {
-      "version": "9.5.0",
-      "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.0.tgz",
-      "integrity": "sha512-LLlB/pkB4q9mW2yLdFMnK3dEHbrBjeZTYguaaIfusyojBgAGf5kF+O6KcWqiGzWqHk0LBsoolrp4VftEURhybg==",
+      "version": "9.5.1",
+      "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
+      "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
       "dev": true,
       "requires": {
         "chalk": "^4.1.0",
@@ -5369,9 +5369,9 @@
       }
     },
     "typescript": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
-      "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
       "dev": true
     },
     "uc.micro": {
diff --git a/package.json b/package.json
index 14e4870..d3fc10a 100644
--- a/package.json
+++ b/package.json
@@ -1769,13 +1769,13 @@
   },
   "devDependencies": {
     "@types/node": "^18.15.3",
-    "@vscode/vsce": "^2.21.1",
+    "@vscode/vsce": "^2.22.0",
     "merge-options": "^3.0.4",
     "node-loader": "^2.0.0",
     "ovsx": "^0.8.3",
     "rimraf": "^5.0.5",
-    "ts-loader": "^9.5.0",
-    "typescript": "^5.2.2",
+    "ts-loader": "^9.5.1",
+    "typescript": "^5.3.3",
     "webpack": "^5.89.0",
     "webpack-cli": "^5.1.4"
   },
diff --git a/server/lib/alpine-arm64-isclexer.node b/server/lib/alpine-arm64-isclexer.node
index d706e33..ac47016 100755
Binary files a/server/lib/alpine-arm64-isclexer.node and b/server/lib/alpine-arm64-isclexer.node differ
diff --git a/server/lib/alpine-x64-isclexer.node b/server/lib/alpine-x64-isclexer.node
index e8915d6..28d1d59 100755
Binary files a/server/lib/alpine-x64-isclexer.node and b/server/lib/alpine-x64-isclexer.node differ
diff --git a/server/lib/darwin-arm64-isclexer.node b/server/lib/darwin-arm64-isclexer.node
index a0360a1..b57df76 100755
Binary files a/server/lib/darwin-arm64-isclexer.node and b/server/lib/darwin-arm64-isclexer.node differ
diff --git a/server/lib/darwin-x64-isclexer.node b/server/lib/darwin-x64-isclexer.node
index 4a97c3b..a8edfbd 100755
Binary files a/server/lib/darwin-x64-isclexer.node and b/server/lib/darwin-x64-isclexer.node differ
diff --git a/server/lib/linux-arm64-isclexer.node b/server/lib/linux-arm64-isclexer.node
index 0f3e66b..534e7a0 100755
Binary files a/server/lib/linux-arm64-isclexer.node and b/server/lib/linux-arm64-isclexer.node differ
diff --git a/server/lib/linux-x64-isclexer.node b/server/lib/linux-x64-isclexer.node
index c165c28..9641317 100755
Binary files a/server/lib/linux-x64-isclexer.node and b/server/lib/linux-x64-isclexer.node differ
diff --git a/server/lib/win32-x64-isclexer.node b/server/lib/win32-x64-isclexer.node
index d910748..ca16296 100644
Binary files a/server/lib/win32-x64-isclexer.node and b/server/lib/win32-x64-isclexer.node differ
diff --git a/server/package-lock.json b/server/package-lock.json
index 5fa16d4..a2c0cd0 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -1,14 +1,14 @@
 {
   "name": "language-server-server",
-  "version": "2.4.0-SNAPSHOT",
+  "version": "2.4.1-SNAPSHOT",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "language-server-server",
-      "version": "2.4.0-SNAPSHOT",
+      "version": "2.4.1-SNAPSHOT",
       "dependencies": {
-        "node-html-parser": "^6.1.10",
+        "node-html-parser": "^6.1.12",
         "turndown-ext": "^7.0.5",
         "vscode-languageserver": "^9.0.1",
         "vscode-languageserver-textdocument": "^1.0.11",
@@ -125,9 +125,9 @@
       }
     },
     "node_modules/node-html-parser": {
-      "version": "6.1.10",
-      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.10.tgz",
-      "integrity": "sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==",
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.12.tgz",
+      "integrity": "sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==",
       "dependencies": {
         "css-select": "^5.1.0",
         "he": "1.2.0"
@@ -268,9 +268,9 @@
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
     },
     "node-html-parser": {
-      "version": "6.1.10",
-      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.10.tgz",
-      "integrity": "sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==",
+      "version": "6.1.12",
+      "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.12.tgz",
+      "integrity": "sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==",
       "requires": {
         "css-select": "^5.1.0",
         "he": "1.2.0"
diff --git a/server/package.json b/server/package.json
index 9d6f94d..b395bd1 100644
--- a/server/package.json
+++ b/server/package.json
@@ -7,7 +7,7 @@
     "node": "*"
   },
   "dependencies": {
-    "node-html-parser": "^6.1.10",
+    "node-html-parser": "^6.1.12",
     "turndown-ext": "^7.0.5",
     "vscode-languageserver": "^9.0.1",
     "vscode-languageserver-textdocument": "^1.0.11",