diff --git a/README.md b/README.md
index 2830356903bfbab8c6075d0ba8fc0f2ef3715a9f..c891591341e7b7f07dfba62dd73253613eaefb0d 100644
--- a/README.md
+++ b/README.md
@@ -80,29 +80,20 @@ Marking.
 As well as being an assignment repository, this codebase is also a sample codebase, showing you a few things:
 
 * It uses a *gradle wrapper* (a script that will download the correct version of gradle for you.) This means you can
-  `gradlew build` and it'll go get gradle before it builds. Normally, that would fetch from a URL on the gradle site,
-  but so this works behind UNE's webproxy, we've got it fetching the gradle jar from a url on turing instead.
-  
-* It is a *modular* application. JavaFX is provided as a set of modules. At the moment, that might seem like an esoteric
-  distinction, but if we wanted to *distribute* our application, it would be helpful. If the app is written as a 
-  modular app (it has a `module-info.java` file), then the `gradlew distZip` task can generate a distributable zip 
-  for us, containing not only our code but also the modules our app depends on (including JavaFX).
+  `./gradlew build` and it'll go get gradle before it builds. Normally, that would fetch from a URL on the gradle site,
+  but so this works behind UNE's webproxy, the gradle jar is also checked into the repository.
   
 * It contains Log4J, which is the logging library (basically, super-powered printlns) that we will use.
 
-* We pass lambdas around, especially as listeners and event handlers. 
-  Lambdas may be familiar to students who've studied Scala, but they are making 
-  their way into Java too. For instance, notice that in `DotsAndBoxesUI` we register a number of listeners onto the dots
-  and boxes grid by registering lambda functions.
+* It uses some more recent Java features. e.g. record classes and lambdas.
+  These may be familiar to students who've studied Scala, but they are making their way into Java too. 
+  For instance, notice that in `DotsAndBoxesUI` we register listeners onto the dots and boxes grid by registering lambda functions.
   
   ```java
-  grid.addConsumer((g) -> {
-      if (g.getHorizontal(x, y)) {
-          line.setStroke(Color.BLACK);
-      } else {
-          line.setStroke(Color.LIGHTGRAY);
-      }
-  });
+   grid.addConsumer((g) -> {
+      updateLabel();
+      canvas.repaint();
+   });
   ```
   
   In Java, functions aren't "first class citizens" in the way they are in Scala, however. Our code here is really 
@@ -112,13 +103,32 @@ As well as being an assignment repository, this codebase is also a sample codeba
   `Consumer<DotsAndBoxesGrid>`. But `Consumer<>` has only one abstract method. So, Java gives us the shorthand
   that if we just describe how we want to implement the abstract method (`(g) -> { ...`) then the Java compiler will 
   fill in the rest of the code about creating an anonymous inner class of type `Consumer<>` for us.
-  
-* JavaFX uses a lot of observable lists. So for instance notice the line for adding a line to the anchorpane:
+
+  Record classes are similar to Scala's "case classes", e.g. 
 
   ```java
-  anchorPane.getChildren().add(line);
+  record Vertical(int col, int row) {
+      Rectangle rect() {
+            int x = corner(col);
+            int y = corner(row) + dotDiameter + gap;
+            return new Rectangle(x, y, dotDiameter, lineLength);
+      }
+
+      /** Whether or not this line contains this point */
+      boolean contains(int x, int y) {
+            return rect().contains(x, y);
+      }
+
+      /** Paints this element, based on the passed in grid */
+      public void draw(DotsAndBoxesGrid grid, Graphics2D g2d) {
+            g2d.setColor(grid.getVertical(col, row) ? Color.DARK_GRAY : Color.LIGHT_GRAY);
+            g2d.fill(this.rect());
+      }
+  }
   ```
 
-  We get the pane's list of children *and we add the line to it*. That *get ... add* code is something that is fairly
-  common in JavaFX code. The list of children is a mutable list that has some triggers on it, so that if you add 
-  an element, JavaFX knows it needs to go and repaint the parent component.
\ No newline at end of file
+  Particularly, `col` and `row` are made to be fields of a `Vertical` instance and the constructor is
+  automatically defined. (So is `toString` and `hashCode`, but we're not using those.)
+
+  Record classes aren't as common in Java code-bases, but they're available in Java 17, so students might use 
+  them in the group project, so let's give you a little example of them!
\ No newline at end of file