diff --git a/site/src/site/releasenotes/groovy-4.0.adoc b/site/src/site/releasenotes/groovy-4.0.adoc
index 03aaedc..29402b4 100644
--- a/site/src/site/releasenotes/groovy-4.0.adoc
+++ b/site/src/site/releasenotes/groovy-4.0.adoc
@@ -492,19 +492,93 @@
 --------------------------------------
 
 [[Groovy4.0-ongoing]]
-== On-going work still in progress or undergoing investigation
+== On-going work
 
 === JSR308 improvements (work in progress)
 
 Groovy has been improving JSR-308 support over recent versions.
 In Groovy 4.0, additional support has been added.
 
-=== Java-inspired changes (under investigation)
+=== Other areas under investigation
 
-The following changes are being explored as candidate for Groovy 4:
+==== .Net-inspired changes (under investigation)
+
+Can we provide a Groovy equivalent to .Net's Language Integrated Query (LINQ)?
+It would support code like below:
+
+[source,groovy]
+--------------------------------------
+from p of persons
+leftjoin c of cities
+on p.city.name == c.name
+select p.name, c.name
+
+from p of persons
+groupby p.gender
+having p.gender == 'Male'
+select p.gender, max(p.age)
+
+from p of persons
+orderby p.age desc
+thenby p.name asc
+select p.name
+--------------------------------------
+
+==== Python-inspired changes (under investigation)
+
+Can we support additional destructuring options
+for e.g. switch statements as per https://www.python.org/dev/peps/pep-0622/[PEP 622 -- Structural Pattern Matching]?
+
+If supported, then instead of the following existing code:
+
+[source,groovy]
+--------------------------------------
+def make3D(pt) {
+    switch(pt) {
+        case Point3D:
+            return pt
+        case Point2D:
+            return new Point3D(pt.x, pt.y, 0)
+        case List:
+            def (x, y, z) = pt
+            if (x == 0 && y == 0 && z == 0)
+                throw new IllegalArgumentException("Origin not allowed")
+            return new Point3D(x, y, z)
+            ...
+    }
+}
+--------------------------------------
+
+You could use something like:
+
+[source,groovy]
+--------------------------------------
+def make3D(pt) {
+    switch(pt) {
+        case Point3D:
+            return pt
+        case Point2D(x, y):
+            return new Point3D(x, y, 0)
+        case [0, 0, 0]:
+            throw new IllegalArgumentException("Origin not allowed")
+        case [x, y, z]:
+            return new Point3D(x, y, z)
+            ...
+    }
+}
+--------------------------------------
+
+==== Java-inspired changes (under investigation)
+
+The following are being explored as candidate changes for Groovy 4:
 
 * Switch expressions
-* Module definitions written in Groovy
+link:https://openjdk.java.net/jeps/354[JEP 354: Switch Expressions (Second Preview)]
+link:https://openjdk.java.net/jeps/361[JEP 361: Switch Expressions]
+
+* Module definitions written in Groovy (i.e. module-info.groovy)
+link:https://issues.apache.org/jira/browse/GROOVY-9273[GROOVY-9273]
+* Use of "_" (underscore) for unused parameters (see "Treatment of underscores" in https://openjdk.java.net/jeps/302[JEP 302: Lambda Leftovers])
 
 [[Groovy4.0-breaking]]
 == Other breaking changes
