Update transaction documentation
diff --git a/source/documentation/txn/txn.md b/source/documentation/txn/txn.md
index 52cdffe..0ab9940 100644
--- a/source/documentation/txn/txn.md
+++ b/source/documentation/txn/txn.md
@@ -28,9 +28,25 @@
         dataset.end() ;
     }
 
-`Txn` simplifies writing transaction handling by wrapping application code,
-contained in a Java lambda expression or a Java Runnable object, in the correct entry
-and exit code for a transaction, eliminating coding errors.
+This can be simplified by wrapping application code, contained in a Java lambda
+expression or a Java Runnable object, and calling a method of the daatset or
+other transactional object.  This wil apply the correct entry and exit code for
+a transaction, eliminating coding errors.
+
+This is also available via transactional objects such as `Dataset`.
+
+The pattern is:
+
+    Dataset dataset = ...
+    dataset.executeRead(()-> {
+        . . .
+    }) ;
+
+and
+
+    dataset.executeWrite(()-> {
+        . . .
+    }) ;
 
 The form is:
 
@@ -44,14 +60,17 @@
         . . .
     }) ;
 
+is also avilable (`Txn` is the implementation of this machinary). Using Txn is
+this way is necessary for Jena3.
+
 ## Usage
 
 This first example shows how to write a SPARQL query .
 
-    Dataset ds = ... ;
+    Dataset dataset = ... ;
     Query query = ... ;
-    Txn.executeRead(ds, ()-> {
-        try(QueryExecution qExec = QueryExecutionFactory.create(query, ds)) {
+    dataset.executeRead(()-> {
+        try(QueryExecution qExec = QueryExecutionFactory.create(query, dataset)) {
             ResultSetFormatter.out(qExec.execSelect()) ;
         }
     }) ;
@@ -62,36 +81,36 @@
 Writing to a file is a read-action (it does not update the RDF data, the
 writer needs to read the dataset or model):
 
-    Dataset ds = ... ;
-    Txn.executeRead(ds, ()-> {
-        RDFDataMgr.write(System.out, ds, Lang.TRIG) ;
+    Dataset dataset = ... ;
+    dataset.executeRead(()-> {
+        RDFDataMgr.write(System.out, dataset, Lang.TRIG) ;
     }) ;
 
 whereas reading data into an RDF dataset needs to be a write transaction
 (the dataset or model is changed).
 
-    Dataset ds = ... ;
-    Txn.executeWrite(ds, ()-> {
-        RDFDataMgr.read(ds, "data.ttl") ;
+    Dataset dataset = ... ;
+    dataset.executeWrite(()-> {
+        RDFDataMgr.read("data.ttl") ;
     }) ;
 
 Applications are not limited to a single operation inside a transaction. It
 can involve multiple applications read operations, such as making several
 queries:
 
-    Dataset ds = ... ;
+    Dataset dataset = ... ;
     Query query1 = ... ;
     Query query2 = ... ;
-    Txn.executeRead(ds, ()-> {
-         try(QueryExecution qExec1 = QueryExecutionFactory.create(query1, ds)) {
+    dataset.executeRead(()-> {
+         try(QueryExecution qExec1 = QueryExecutionFactory.create(query1, dataset)) {
              ...
          }
-         try(QueryExecution qExec2 = QueryExecutionFactory.create(query2, ds)) {
+         try(QueryExecution qExec2 = QueryExecutionFactory.create(query2, dataset)) {
              ...
          }
     }) ;
 
-A `Txn.calculateRead` block can return a result but only with the condition
+A `calculateRead` block can return a result but only with the condition
 that what is returned does not touch the data again unless it uses a new
 transaction.
 
@@ -101,11 +120,11 @@
 called, new data might be read from the RDF dataset.  A copy of the
 results needs to be take:
 
-    Dataset ds = ... ;
+    Dataset dataset = ... ;
     Query query = ... ;
-    List<String> results = Txn.calculateRead(ds, ()-> {
+    List<String> results = dataset.calculateRead(()-> {
          List<String> accumulator = new ArrayList<>() ;
-         try(QueryExecution qExec = QueryExecutionFactory.create(query, ds)) {
+         try(QueryExecution qExec = QueryExecutionFactory.create(query, dataset)) {
              qExec.execSelect().forEachRemaining((row)->{
                  String strThisRow = row.getLiteral("variable").getLexicalForm() ;
                  accumulator.add(strThisRow) ;
@@ -115,20 +134,20 @@
     }) ;
     // use "results"
 
-    Dataset ds = ... ;
+    Dataset dataset = ... ;
     Query query = ... ;
-    ResultSet List<String> resultSet = Txn.calculateRead(ds, ()-> {
+    ResultSet List<String> resultSet = dataset.calculateRead(()-> {
          List<String> accumulator = new ArrayList<>() ;
-         try(QueryExecution qExec = QueryExecutionFactory.create(query, ds)) {
+         try(QueryExecution qExec = QueryExecutionFactory.create(query, dataset)) {
              return ResultSetFactory.copyResults(qExec.execSelect()) ;
          }
     }) ;
     // use "resultSet"
 
-The functions `Txn.execute` and `Txn.calculate` start `READ_PROMOTE`
+The functions `execute` and `calculate` start `READ_PROMOTE`
 transactions which start in "read" mode but convert to "write" mode if
 needed.  For details of transaction promotion see the
-c[section in the transaction API documentation](transactions_api.html#types-modes-promotion).
+[section in the transaction API documentation](transactions_api.html#types-modes-promotion).
 
 ## Working with RDF Models
 
@@ -138,9 +157,10 @@
 
 ## Autocommit and Transaction continuation
 
-If there is a transaction already started for the thread, the `Txn.execute...` will be performed as part of
+If there is a transaction already started for the thread, then 
+`execute...` or `calculate...` will be performed as part of
 the transaction and that transaction is not terminated.  If there is not transaction already started,
-a transaction is wrapped around the `Txn.execute...` action.
+a transaction is wrapped around the `execute...` or `calculate...` action.
 
     Dataset dataset = ...
     // Main transaction.
@@ -148,11 +168,12 @@
     try {
       ...
       // Part of the transaction above.
-      Txn.executeRead(dataset, () -> ...) ;
+      dataset.executeRead(() -> ...) ;
       ...
       // Part of the transaction above - no commit/abort
-      Txn.executeWrite(dataset, () -> ...) ;
+      dataset.executeWrite(() -> ...) ;
 
+      // Outer transaction
       dataset.commit() ;
     } finally { dataset.end() ; }