diff --git a/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parser/TokenizerJSON.java b/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parser/TokenizerJSON.java
index 6b1f66e..13eea4c 100644
--- a/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parser/TokenizerJSON.java
+++ b/jena-arq/src/main/java/org/apache/jena/atlas/json/io/parser/TokenizerJSON.java
@@ -745,7 +745,6 @@
             }
             int inChar = reader.readChar() ;
             if ( inChar != want ) {
-                // System.err.println("N-triple reader error");
                 exception("expected \"" + str + "\"") ;
                 return false ;
             }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
index bf76991..a9cc216 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/system/IRIResolver.java
@@ -24,6 +24,7 @@
 import org.apache.jena.atlas.lib.Cache;
 import org.apache.jena.atlas.lib.CacheFactory;
 import org.apache.jena.atlas.lib.IRILib;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.iri.IRI;
 import org.apache.jena.iri.IRIException;
 import org.apache.jena.iri.IRIFactory;
@@ -186,7 +187,7 @@
         try {
             cwd = iriFactory().construct(globalBase);
         } catch (IRIException e) {
-            System.err.println("Unexpected IRIException in initializer: " + e.getMessage());
+            Log.error(IRIResolver.class, "Unexpected IRIException in initializer: " + e.getMessage());
             cwd = iriFactory().create("file:///");
             e.printStackTrace(System.err);
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
index 9f92fe9..5d39500 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/tokens/TokenizerText.java
@@ -1222,7 +1222,6 @@
             }
             int inChar = reader.peekChar();
             if ( inChar != want ) {
-                // System.err.println("N-triple reader error");
                 error("expected \"" + str + "\"");
                 return false;
             }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
index 0717f1a..41fbef3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/AlgebraGenerator.java
@@ -625,7 +625,6 @@
     
     protected final void broken(String msg)
     {
-        //System.err.println("AlgebraGenerator: "+msg) ;
         throw new ARQInternalErrorException(msg) ;
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
index 5ad1cce..abd57a3 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/TransformQuadBlockGraph.java
@@ -47,8 +47,6 @@
     @Override
     public Op transform(OpGraph opGraph, Op op) {
         
-        //System.err.println("transform(OpGraph)\n"+opGraph+op) ;
-        
         // ?? Could just leave the (graph) in place always - just rewrite BGPs. 
         boolean noPattern = false ;
         
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
index f97929a..11333fb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformFilterPlacement.java
@@ -507,7 +507,7 @@
         Collection<Var> leftVars = fixedVars(left) ;
         Collection<Var> rightVars = fixedVars(right) ;
 
-        // More sophisticated - consider optionl variables as well.
+        // More sophisticated - consider optional variables as well.
         // This code check the two ways to get fixed vars yields the same
         // and it does for the test suite. 
 //        //---
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
index 19e1d46..b8e692f 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/walker/ApplyTransformVisitor.java
@@ -65,21 +65,6 @@
         return pop(exprStack) ;
     }
     
-//    protected Op transform(Op op) {
-//        int x1 = opStack.size() ;
-//        int x2 = exprStack.size() ;
-//        try {
-//            return Walker.transform(op, this, beforeVisitor, afterVisitor) ;
-//        } finally {
-//            int y1 = opStack.size() ;
-//            int y2 = exprStack.size() ;
-//            if ( x1 != y1 )
-//                System.err.println("Misaligned opStack") ;
-//            if ( x2 != y2 )
-//                System.err.println("Misaligned exprStack") ;
-//        }
-//    }
-
     // These three could be calls within WalkerVisitor followed by "collect".
     protected Expr transform(Expr expr) {
         int x1 = opStack.size() ;
@@ -90,9 +75,9 @@
             int y1 = opStack.size() ;
             int y2 = exprStack.size() ;
             if ( x1 != y1 )
-                System.err.println("Misaligned opStack") ;
+                Log.error(ApplyTransformVisitor.class, "Misaligned opStack") ;
             if ( x2 != y2 )
-                System.err.println("Misaligned exprStack") ;
+                Log.error(ApplyTransformVisitor.class, "Misaligned exprStack") ;
         }
     }
     
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
index 940ee48..222cc00 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/ParserSPARQL11.java
@@ -112,7 +112,6 @@
         catch (JenaException ex)  { throw new QueryException(ex.getMessage(), ex) ; }
         catch (Error err)
         {
-            System.err.println(err.getMessage()) ;
             // The token stream can throw errors.
             throw new QueryParseException(err.getMessage(), err, -1, -1) ;
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
index 6a9b4b6..0847050 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateEngineWorker.java
@@ -33,6 +33,7 @@
 import org.apache.jena.atlas.iterator.Iter ;
 import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.atlas.lib.Sink ;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.GraphUtil ;
@@ -544,7 +545,7 @@
     // Catch all individual deletes of quads
     private static void deleteFromDatasetGraph(DatasetGraph datasetGraph, Quad quad) {
         if ( datasetGraph instanceof DatasetGraphReadOnly )
-            System.err.println("READ ONLY") ;
+            Log.warn(UpdateEngineWorker.class, "Read only dataset");
         datasetGraph.delete(quad);
     }
 
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/Item.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/Item.java
index 202c219..5005ca2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/Item.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/Item.java
@@ -20,6 +20,7 @@
 
 
 import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.sparql.core.Var ;
@@ -344,7 +345,7 @@
         else if ( isNil() )
             visitor.visitNil() ;
         else
-            System.err.println("broken item") ;
+            Log.error(Item.class, "broken item") ;
     }
     
     public Item transform(ItemTransform transformer)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/ParseHandlerLink.java b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/ParseHandlerLink.java
index 6673d63..3a115b6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/ParseHandlerLink.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/sse/lang/ParseHandlerLink.java
@@ -55,7 +55,6 @@
     {
         if ( list.getFirst().isSymbol(tagLink) )
         {
-            System.err.println("Not written: "+item) ;
             super.declItem(list, item) ;
             return ;
         }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryOutputUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryOutputUtils.java
index d109be5..8d8b6ed 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryOutputUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryOutputUtils.java
@@ -21,6 +21,7 @@
 import org.apache.jena.atlas.io.IndentedLineBuffer ;
 import org.apache.jena.atlas.io.IndentedWriter ;
 import org.apache.jena.atlas.lib.Lib ;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.Query ;
 import org.apache.jena.query.QueryExecution ;
@@ -55,7 +56,7 @@
     {
         QueryEngineFactory f = QueryEngineRegistry.findFactory(query, qe.getDataset().asDatasetGraph(), ARQ.getContext()) ;
         if ( f == null )
-            System.err.println("printPlan: Unknown engine type: "+Lib.className(qe)) ;
+            Log.error(QueryOutputUtils.class, "printPlan: Unknown engine type: "+Lib.className(qe)) ;
         
         Plan plan = f.create(query, qe.getDataset().asDatasetGraph(), BindingRoot.create(), ARQ.getContext()) ;
         SerializationContext sCxt = new SerializationContext(query) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
index ef7a04e..4cfc74a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/QueryUtils.java
@@ -64,10 +64,8 @@
             }
         } catch (SSEParseException | BuildException ex)
         { 
-            System.err.println(str);
             throw ex ; 
-        }      // Breakpoint
-
+        }
     }
     
     private static void dump(Op op, Op op2)
diff --git a/jena-cmds/src/main/java/jena/cmd/CmdLineArgs.java b/jena-cmds/src/main/java/jena/cmd/CmdLineArgs.java
index 2ba515c..700aa5a 100644
--- a/jena-cmds/src/main/java/jena/cmd/CmdLineArgs.java
+++ b/jena-cmds/src/main/java/jena/cmd/CmdLineArgs.java
@@ -42,9 +42,9 @@
     }
 
     private boolean processedArgs = false ;
-    protected Map<String, ArgDecl> argMap = new HashMap<>() ;          // Map from string name to ArgDecl
-    protected Map<String, Arg> args = new HashMap<>() ;            // Name to Arg
-    protected List<String> positionals = new ArrayList<>() ;  // Positional arguments as strings.
+    protected Map<String, ArgDecl> argMap = new HashMap<>() ;   // Map from string name to ArgDecl
+    protected Map<String, Arg> args = new HashMap<>() ;         // Name to Arg
+    protected List<String> positionals = new ArrayList<>() ;    // Positional arguments as strings.
     
     public void process() throws IllegalArgumentException
     {
diff --git a/jena-cmds/src/main/java/jena/cmd/CmdMain.java b/jena-cmds/src/main/java/jena/cmd/CmdMain.java
index 3caca21..4148509 100644
--- a/jena-cmds/src/main/java/jena/cmd/CmdMain.java
+++ b/jena-cmds/src/main/java/jena/cmd/CmdMain.java
@@ -60,7 +60,6 @@
         catch (IllegalArgumentException ex)
         {
             ex.printStackTrace(System.err) ;
-            //System.err.println(ex.getMessage()) ;
             if ( exitOnFailure ) System.exit(1) ;
             return 1 ; 
         }
diff --git a/jena-core/src/main/java/org/apache/jena/assembler/ModelExpansion.java b/jena-core/src/main/java/org/apache/jena/assembler/ModelExpansion.java
index 45f3712..262b616 100644
--- a/jena-core/src/main/java/org/apache/jena/assembler/ModelExpansion.java
+++ b/jena-core/src/main/java/org/apache/jena/assembler/ModelExpansion.java
@@ -204,22 +204,18 @@
         result.add( toAdd );
         }
     
-    protected static void addSupertypes( Model result )
-        {
+    protected static void addSupertypes(Model result) {
         Model temp = ModelFactory.createDefaultModel();
-        for (StmtIterator it = result.listStatements( ANY, RDF.type, ANY ); it.hasNext();)
-            {
+        for ( StmtIterator it = result.listStatements(ANY, RDF.type, ANY) ; it.hasNext() ; ) {
             Statement s = it.nextStatement();
-            Resource c = AssemblerHelp.getResource( s );
-            for (StmtIterator subclasses = result.listStatements( c, RDFS.subClassOf, ANY ); subclasses.hasNext();)
-                {
+            Resource c = AssemblerHelp.getResource(s);
+            for ( StmtIterator subclasses = result.listStatements(c, RDFS.subClassOf, ANY) ; subclasses.hasNext() ; ) {
                 RDFNode type = subclasses.nextStatement().getObject();
-                // System.err.println( ">> adding super type: subject " + s.getSubject() + ", type " + type );
-                temp.add( s.getSubject(), RDF.type, type );
-                }
+                temp.add(s.getSubject(), RDF.type, type);
             }
-        result.add( temp );
         }
+        result.add(temp);
+    }
     
     private static void addIntersections( Model result, Model schema )
         {
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/BMPattern.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/BMPattern.java
index bcaa216..ac1f004 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/BMPattern.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/BMPattern.java
@@ -98,7 +98,6 @@
         if (plength == 0)  return start;
         int index = start+plength;
         while (index <= limit) {
-            //System.err.println("Starts at "+index);
             int pindex = plength;
             int nindex = index+1;
             char ch;
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Op.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Op.java
index 7ec84f6..09faaad 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Op.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Op.java
@@ -70,7 +70,6 @@
     }
     static UnionOp createUnion(int size) {
         if (Op.COUNT)  Op.nofinstances ++;
-        //System.err.println("Creates UnionOp");
         return new UnionOp(Op.UNION, size);
     }
     static ChildOp createClosure(int id) {
diff --git a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Token.java b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Token.java
index c4b4e70..6d21fdd 100644
--- a/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Token.java
+++ b/jena-core/src/main/java/org/apache/jena/ext/xerces/impl/xpath/regex/Token.java
@@ -984,8 +984,6 @@
     static protected boolean isRegisterNonXS(String name) {
         if (Token.nonxs == null)
             return false;
-        //DEBUG
-        //System.err.println("isRegisterNonXS: "+name);
         return Token.nonxs.containsKey(name);
     }
 
diff --git a/jena-core/src/main/java/org/apache/jena/mem/ArrayBunch.java b/jena-core/src/main/java/org/apache/jena/mem/ArrayBunch.java
index 2963b22..8baf555 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/ArrayBunch.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/ArrayBunch.java
@@ -103,9 +103,6 @@
     @Override
     public ExtendedIterator<Triple> iterator( final HashCommon.NotifyEmpty container )
         {
-//        System.err.println( ">> ArrayBunch::iterator: intial state" );
-//        for (int j = 0; j < size; j += 1) System.err.println( "==    " + elements[j] );
-//        System.err.println( ">> (done)" );
         return new NiceIterator<Triple>()
             {
             protected final int initialChanges = changes;
@@ -129,16 +126,10 @@
             @Override public void remove()
                 {
                 if (changes > initialChanges) throw new ConcurrentModificationException();
-//                System.err.println( ">> ArrayBunch.iterator::remove" );
-//                System.err.println( "++  size currently " + size );
-//                System.err.println( "++  container is " + container );
-//                System.err.println( "++  selector currently " + i + " (triple " + e[i] + ")" );
                 int last = --size;
                 e[i] = e[last];
                 e[last] = null;
                 if (size == 0) container.emptied();
-//                System.err.println( "++  post remove, triples are:" );
-//                for (int j = 0; j < size; j += 1) System.err.println( "==    " + e[j] );
                 }
             };
         }
diff --git a/jena-core/src/main/java/org/apache/jena/mem/HashCommon.java b/jena-core/src/main/java/org/apache/jena/mem/HashCommon.java
index 326b8a1..2c818f0 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/HashCommon.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/HashCommon.java
@@ -258,12 +258,9 @@
                     { /* Nothing. We'd have preferred an `unless` statement. */}
                 else
                     {
-                    // System.err.println( ">> move from " + scan + " to " + here + " [original = " + original + ", r = " + r + "]" );
-                    if (here <= original && scan > original) 
-                        {
-                        // System.err.println( "]] recording wrapped " );
+                    if (here <= original && scan > original) {
                         wrappedAround = keys[scan];
-                        }
+                    }
                     keys[here] = keys[scan];
                     moveAssociatedValues( here, scan );
                     here = scan;
diff --git a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapBase.java b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapBase.java
index c8b9b66..74ec968 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapBase.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapBase.java
@@ -89,7 +89,7 @@
         { return size; }
 
     public void removedOneViaIterator()
-        { size -= 1; /* System.err.println( ">> rOVI: size := " + size ); */ }
+        { size -= 1; }
 
     public boolean isEmpty()
         { return size == 0; }
diff --git a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
index bac0833..f95bab6 100644
--- a/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
+++ b/jena-core/src/main/java/org/apache/jena/mem/NodeToTriplesMapMem.java
@@ -86,7 +86,6 @@
     */
     @Override public Iterator<Triple> iterator( Object o, HashCommon.NotifyEmpty container ) 
        {
-       // System.err.println( ">> BOINK" ); // if (true) throw new JenaException( "BOINK" );
        TripleBunch s = bunchMap.get( o );
        return s == null ? NullIterator.<Triple>instance() : s.iterator( container );
        }
diff --git a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java
index bb90ba8..9806fe1 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java
+++ b/jena-core/src/main/java/org/apache/jena/n3/N3JenaWriterCommon.java
@@ -22,6 +22,7 @@
 import java.math.BigDecimal;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
 import java.text.CharacterIterator;
 import java.text.StringCharacterIterator;
 import java.util.*;
@@ -199,14 +200,9 @@
 	@Override
     public synchronized void write(Model model, OutputStream output, String base) 
 	{
-		try {
-			Writer w =  new BufferedWriter(new OutputStreamWriter(output, "UTF-8")) ;
-			write(model, w, base) ;
-			try { w.flush() ; } catch (IOException ioEx) { throw new JenaException(ioEx) ; }
-		} catch (java.io.UnsupportedEncodingException ex)
-		{
-			System.err.println("Failed to create UTF-8 writer") ;
-		}
+	    Writer w =  new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8)) ;
+	    write(model, w, base) ;
+	    try { w.flush() ; } catch (IOException ioEx) { throw new JenaException(ioEx) ; }
 	}
 
     // ----------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java b/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java
index b9312bb..cdec2d9 100644
--- a/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java
+++ b/jena-core/src/main/java/org/apache/jena/n3/turtle/Turtle2NTriples.java
@@ -22,6 +22,7 @@
 import java.io.PrintWriter;
 import java.util.Locale ;
 
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.Triple ;
 
@@ -92,7 +93,7 @@
             }
             return ; 
         }
-        System.err.println("Illegal node: "+node) ;
+        Log.error(this, "Illegal node: "+node) ;
     }
 
     @Override
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Property.java b/jena-core/src/main/java/org/apache/jena/rdf/model/Property.java
index 4eeac22..e13ae3c 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Property.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Property.java
@@ -21,29 +21,41 @@
 /** An RDF Property.
  */
 public interface Property extends Resource {
-	
-  public boolean isProperty();
 
-  /** Returns the namespace associated with this property.
-     * @return The namespace for this property.
+    public boolean isProperty();
+    /** Returns the namespace associated with this resource if it is a URI, else return null. 
+     * <p> 
+     * The namespace is suitable for use with localname in in RDF/XML.
+     * XML does not allow QNames to start with a digit and this method
+     * reflects that restriction in the values for namespace and localname.
+     * <p>
+     * See functions in {@code SplitIRI} for other split algorithms.
+     *  
+     * @return The namespace for this resource or null.
      */
-  @Override
-public String getNameSpace();
+    @Override
+    public String getNameSpace();
 
-  /**
+    /**
       Override RDFNode.inModel() to produce a staticly-typed Property
       in the given Model.
-  */
-  @Override
-public Property inModel( Model m );
-  
-    /** Returns the name of this property within its namespace.
-     * @return The name of this property within its namespace.
      */
-  @Override
-public String getLocalName();
-  
-  /** Returns the ordinal value of a containment property.
+    @Override
+    public Property inModel( Model m );
+
+    /** Returns the localname of this resource within its namespace if it is a URI else null.
+     * <p>
+     * Note: XML requires QNames to start with a letter, not a digit,
+     * and this method reflects that restriction.
+     * <p>
+     * See functions in {@code SplitIRI}.
+     * @return The localname of this property within its namespace.
+     */
+
+    @Override
+    public String getLocalName();
+
+    /** Returns the ordinal value of a containment property.
      *
      * <p>RDF containers use properties of the form _1, _2, _3 etc to represent
      * the containment relationship between the container and the objects it
@@ -54,5 +66,5 @@
      * or 0 otherwise.
      *
      */
-  public int    getOrdinal();
+    public int    getOrdinal();
 }
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/Resource.java b/jena-core/src/main/java/org/apache/jena/rdf/model/Resource.java
index aaa7245..ac55405 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/Resource.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/Resource.java
@@ -82,13 +82,25 @@
      */
     public String getURI();
 
-    /** Returns the namespace associated with this resource.
-     * @return The namespace for this property.
+    /** Returns the namespace associated with this resource if it is a URI, else return null. 
+     * <p> 
+     * The namespace is suitable for use with localname in in RDF/XML.
+     * XML does not allow QNames to start with a digit and this method
+     * reflects that restriction in the values for namespace and localname.
+     * <p>
+     * See functions in {@code SplitIRI} for other split algorithms.
+     *  
+     * @return The namespace for this resource or null.
      */
     public String getNameSpace();
 
-    /** Returns the name of this resource within its namespace.
-     * @return The name of this property within its namespace.
+    /** Returns the localname of this resource within its namespace if it is a URI else null.
+     * <p>
+     * Note: XML requires QNames to start with a letter, not a digit,
+     * and this method reflects that restriction.
+     * <p>
+     * See functions in {@code SplitIRI} for other split algorithms.
+     * @return The localname of this property within its namespace.
      */
     public String getLocalName();
 
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/NTripleReader.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/NTripleReader.java
index 8acd02d..2f60a3d 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/NTripleReader.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/NTripleReader.java
@@ -18,17 +18,20 @@
 
 package org.apache.jena.rdf.model.impl;
 
+import java.io.*;
+import java.net.URL;
+import java.util.Hashtable;
+
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.graph.GraphEvents ;
 import org.apache.jena.rdf.model.* ;
-import org.apache.jena.shared.* ;
+import org.apache.jena.shared.JenaException;
+import org.apache.jena.shared.SyntaxError;
+import org.apache.jena.shared.UnknownPropertyException;
 import org.apache.jena.util.FileUtils ;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.net.URL;
-import java.io.*;
-import java.util.*;
-
 /** N-Triple Reader
  */
 public class NTripleReader extends Object implements RDFReader {
@@ -173,7 +176,7 @@
         char inChar = in.readChar();
         if (badEOF())
         {
-            System.err.println("**** Bad EOF") ;
+            Log.error(this, "**** Bad EOF") ;
             return null;
         }
 
@@ -386,7 +389,6 @@
             char inChar = in.readChar();
 
             if (inChar != want) {
-                //System.err.println("N-triple reader error");
                 syntaxError("expected \"" + str + "\"");
                 return false;
             }
diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/SeqImpl.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/SeqImpl.java
index c77fa39..5def585 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/SeqImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/SeqImpl.java
@@ -280,11 +280,8 @@
     
     @Override
     public Container remove(Statement s) {
-        // System.err.println( "]] SeqImpl.remove " + s );
         getModel().remove(s);
-        // System.err.println( "]] SeqImpl.remove - about to shift down " + (s.getPredicate().getOrdinal()+1) + " to " + (size()+1) );
         shiftDown(s.getPredicate().getOrdinal()+1, size()+1);
-        // System.err.println( "]] SeqImpl.remov completed" );
         return this;
     } 
     
@@ -297,7 +294,6 @@
     
     @Override
     public Container remove(int index, RDFNode o)  {
-        // System.err.println( "]] SeqImpl::remove( " + index + ", " + o + ")" );
         return remove(getModel().createStatement(this, RDF.li(index), o).remove());
     }
     
@@ -360,9 +356,7 @@
     protected void shiftDown(int start, int finish)  {
         for (int i=start; i<=finish; i++) {
             Statement stmt = getRequiredProperty( RDF.li(i) );
-            // System.err.println( "]]* remove " + stmt );
             stmt.remove();
-            // System.err.println( "]]* addProperty( " + RDF.li(i-1) + " " + stmt.getObject() );
             addProperty(RDF.li(i-1), stmt.getObject());
         }
     }
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/SAX2Model.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/SAX2Model.java
index b8ac483..50db95c 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/SAX2Model.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/SAX2Model.java
@@ -138,7 +138,6 @@
 
     @Override
     public void close() {
-        // System.err.println("closing;");
         if (!closed) {
             super.close();
             closed = true;
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/StAX2SAX.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/StAX2SAX.java
index a4e0c3c..a675c0c 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/StAX2SAX.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/StAX2SAX.java
@@ -89,8 +89,7 @@
             else if (e instanceof Comment) emitComment((Comment) e);
             else if (e instanceof DTD) emitDTD((DTD) e);
             else {
-                //System.err.println("Unknown / unhandled event type " + e);
-                //throw new SAXException("Unknown / unhandled event type " + e);
+                throw new SAXException("Unknown / unhandled event type " + e);
             }            
         }
     }
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/impl/QNameLexer.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/impl/QNameLexer.java
index a8c144d..76bcdc4 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/impl/QNameLexer.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/impl/QNameLexer.java
@@ -93,7 +93,6 @@
             // How disgusting.
             // When xmlns="eg:a"
             // xmlns is the prefix ...
-//            System.err.println(getUri());
             if (this.getUri().equals(xmlnsns)) 
                 return A_XMLNS;
             throw e;
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
index 14ccc64..b0c907b 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/BaseXMLWriter.java
@@ -395,11 +395,7 @@
 		return tag( uriref.substring( 0, split ), uriref.substring( split ), type, true );
     }
     
-	static public boolean dbg = false;
-    
 	String tag( String namespace, String local, int type, boolean localIsQname)  {
-		if (dbg)
-			System.err.println(namespace + " - " + local);
 		String prefix = ns.get( namespace );
 		if (type != FAST && type != FASTATTR) {
 			if ((!localIsQname) && !XMLChar.isValidNCName(local))
@@ -577,7 +573,6 @@
 		String decl = null;
 		if (out instanceof OutputStreamWriter) {
 			String javaEnc = ((OutputStreamWriter) out).getEncoding();
-			// System.err.println(javaEnc);
 			if (!(javaEnc.equals("UTF8") || javaEnc.equals("UTF-16"))) {
 			    CharEncoding encodingInfo = CharEncoding.create(javaEnc);
 		        
@@ -781,7 +776,6 @@
 			Vector<Resource> v = new Vector<>();
 			while (tkn.hasMoreElements()) {
 				String frag = tkn.nextToken();
-				//  System.err.println("Blocking " + frag);
 				v.add(new ResourceImpl(RDFSyntax.getURI() + frag));
 			}
 
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Basic.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Basic.java
index c5d8222..c44a6e1 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Basic.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Basic.java
@@ -119,7 +119,6 @@
     
     @Override protected void blockRule( Resource r ) {
         if (r.equals( RDFSyntax.parseTypeLiteralPropertyElt )) {
-     //       System.err.println("Blocking");
             blockLiterals = true;
         } else
            logger.warn("Cannot block rule <"+r.getURI()+">");
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Unparser.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Unparser.java
index 99e3f20..350e7e1 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Unparser.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/Unparser.java
@@ -944,10 +944,6 @@
      */
     private void wIdAttrReified(Statement s) {
         if (wantReification(s)) {
-            /*
-             * if ( prettyWriter.sReification ) System.err.println("???"); else
-             * System.err.println("!!!");
-             */
             Statement reify[] = reification(s);
             Resource res = statement2res.get(s);
             idDone.add(res);
diff --git a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java
index affef9e..dfff2de 100755
--- a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java
+++ b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/BasicForwardRuleInfGraph.java
@@ -326,7 +326,6 @@
         this.requirePrepared();
         int baseSize = fdata.getGraph().size();
         int dedSize = fdeductions.getGraph().size();
-        // System.err.println( ">> BasicForwardRuleInfGraph::size = " + baseSize + "(base) + " + dedSize + "(deductions)" );
         return baseSize + dedSize;
     }
     
diff --git a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/WrappedReasonerFactory.java b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/WrappedReasonerFactory.java
index 2246df2..ed3e6c2 100644
--- a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/WrappedReasonerFactory.java
+++ b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/impl/WrappedReasonerFactory.java
@@ -18,6 +18,7 @@
 
 package org.apache.jena.reasoner.rulesys.impl;
 
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.rdf.model.* ;
 import org.apache.jena.reasoner.* ;
 import org.apache.jena.util.FileManager ;
@@ -55,10 +56,7 @@
         {
         StmtIterator schemas = R.listProperties( schemaURL );
         if (schemas.hasNext())
-            {
-            System.err.println( "WARNING: detected obsolete use of jms:schemaURL when wrapping a reasoner factory" );
-            System.err.println( "  This will fail to work in the next release of Jena" );
-            }
+            Log.error(WrappedReasonerFactory.class, "ERROR: detected obsolete use of jms:schemaURL when wrapping a reasoner factory" );
         while (schemas.hasNext())
             {
             Statement s = schemas.nextStatement();
diff --git a/jena-core/src/main/java/org/apache/jena/util/URIref.java b/jena-core/src/main/java/org/apache/jena/util/URIref.java
index 79ac25a..9148b93 100644
--- a/jena-core/src/main/java/org/apache/jena/util/URIref.java
+++ b/jena-core/src/main/java/org/apache/jena/util/URIref.java
@@ -24,6 +24,9 @@
 
 package org.apache.jena.util;
 
+import javax.xml.crypto.URIReference;
+
+import org.apache.jena.atlas.logging.Log;
 
 /**
  * This class provides methods to encode and decode URI References
@@ -79,7 +82,7 @@
                         } catch (IllegalArgumentException e)
                         {
                             // Illformed - should issue message ....
-                            System.err.println("Confusing IRI to encode - contains literal '%': " + unicode) ;
+                            Log.error(URIReference.class, "Confusing IRI to encode - contains literal '%': " + unicode) ;
                             // Fall through.
                         }
                     }
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestReifier.java b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestReifier.java
index 04cc982..222be08 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestReifier.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestReifier.java
@@ -122,7 +122,6 @@
         assertTrue( ReifierStd.hasTriple( g , SPO ) );
         graphAdd( g,  clashingStatement );
         assertEquals( null, ReifierStd.getTriple( g , node( "x" ) ) );
-        // System.err.println( ">> tRC: clashing = " + clashingStatement );
         assertFalse( ReifierStd.hasTriple(g, SPO ) );
     }
 
diff --git a/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestReifiedStatements.java b/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestReifiedStatements.java
index cb5cc1f..ec3332a 100644
--- a/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestReifiedStatements.java
+++ b/jena-core/src/test/java/org/apache/jena/rdf/model/test/AbstractTestReifiedStatements.java
@@ -117,9 +117,7 @@
 		{
 			try
 			{
-				// System.err.println( "| hello. mask = " + mask );
 				final ReifiedStatement rs = R.as(ReifiedStatement.class);
-				// System.err.println( "+  we constructed " + rs );
 
 				if ((mask & 15) != 15)
 				{
@@ -129,10 +127,9 @@
 				Assert.assertTrue(
 						"should not reify: not all components present [" + mask
 								+ "]: " + rs, (mask & 15) == 15);
-				// System.err.println( "+  and we passed the assertion." );
 			}
 			catch (final DoesNotReifyException e)
-			{ // System.err.println( "+  we exploded" );
+			{
 				Assert.assertFalse("should reify: all components present",
 						mask == 15);
 			}
diff --git a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNodeMgr.java b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNodeMgr.java
index 52b6d62..70bd0f2 100644
--- a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNodeMgr.java
+++ b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeNodeMgr.java
@@ -77,7 +77,6 @@
     }
 
     boolean isWritable(int id) {
-        //System.err.println("BPTreeNodeMgr.isWritable");
         return false;
 //      return bpTree.state.modifiableNodeBlock(id);
     }
diff --git a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeRecords.java b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeRecords.java
index 3964909..e5e8afc 100644
--- a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeRecords.java
+++ b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/BPTreeRecords.java
@@ -214,8 +214,6 @@
 
         if ( CheckingNode ) {
             if ( !Record.keyEQ(r, maxRecord()) ) {
-                System.err.println(rBuff);
-                System.err.println(other.rBuff);
                 error("BPTreeRecords.split: Not returning expected record");
             }
         }
diff --git a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/rewriter/BPTreeNodeBuilder.java b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/rewriter/BPTreeNodeBuilder.java
index b41b759..e99c51d 100644
--- a/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/rewriter/BPTreeNodeBuilder.java
+++ b/jena-db/jena-dboe-trans-data/src/main/java/org/apache/jena/dboe/trans/bplustree/rewriter/BPTreeNodeBuilder.java
@@ -22,6 +22,7 @@
 import java.util.NoSuchElementException;
 
 import org.apache.jena.atlas.lib.Pair;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.dboe.base.buffer.PtrBuffer;
 import org.apache.jena.dboe.base.buffer.RecordBuffer;
 import org.apache.jena.dboe.base.record.Record;
@@ -108,7 +109,7 @@
             // Always add - so ptrBuff is one ahead when we finish.
             // There is always one more ptr than record in a B+Tree node.
             if ( ptrBuff.isFull() )
-                System.err.println("PtrBuffer is full");
+                Log.error(this, "PtrBuffer is full");
 
             // Add pointer.
             ptrBuff.add(pair.car());
@@ -127,7 +128,7 @@
 
                 // Internal consistency check.
                 if ( !ptrBuff.isFull() )
-                    System.err.println("PtrBuffer is not full");
+                    Log.error(this, "PtrBuffer is not full");
 
                 // The split point for the next level up.
                 slot = new Pair<>(bptNode.getId(), pair.cdr());
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/DataToTuples.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/DataToTuples.java
index a0886a9..24b30bb 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/DataToTuples.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/DataToTuples.java
@@ -18,10 +18,13 @@
 
 package org.apache.jena.tdb2.loader.main;
 
+import static org.apache.jena.tdb2.loader.main.PhasedOps.acquire;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Semaphore;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
@@ -101,6 +104,9 @@
         }
     }
 
+    /** Semaphore for the other thread to indicate it has finished. */
+    private final Semaphore termination = new Semaphore(0);
+
     @Override
     public void startBulk() {
         thread = new Thread(()->action());
@@ -109,11 +115,7 @@
 
     @Override
     public void finishBulk() {
-        try {
-            thread.join();
-        } catch (InterruptedException e) {
-            throw new BulkLoaderException("InterruptedException", e);
-        }
+        acquire(termination);
     }
 
     // Triples.
@@ -155,6 +157,7 @@
         }
         transaction.end();
         CoLib.finish(coordinator);
+        termination.release();
     }
 
     //@Override
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/Indexer.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/Indexer.java
index 02cd56f..54aef8f 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/Indexer.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/Indexer.java
@@ -18,6 +18,8 @@
 
 package org.apache.jena.tdb2.loader.main;
 
+import static org.apache.jena.tdb2.loader.main.PhasedOps.acquire;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ArrayBlockingQueue;
@@ -25,7 +27,6 @@
 import java.util.concurrent.Semaphore;
 
 import org.apache.jena.atlas.lib.ArrayUtils;
-import org.apache.jena.atlas.lib.Timer;
 import org.apache.jena.atlas.lib.tuple.Tuple;
 import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.dboe.transaction.txn.Transaction;
@@ -65,16 +66,6 @@
         }
     }
 
-    private static long acquire(Semaphore semaphore, int numPermits) {
-        return Timer.time(()->{
-            try { semaphore.acquire(numPermits); }
-            catch (InterruptedException e) {
-                Log.error(Indexer.class, "Interrupted", e);
-                throw new RuntimeException(e);
-            }
-        });
-    }
-
     /** Return a function that delivers multiple {@code List<Tuple<NodeId>>>} to this indexer */
     public Destination<Tuple<NodeId>> index() {
         return this::index;
diff --git a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/PhasedOps.java b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/PhasedOps.java
index 7ee8d3e..852127e 100644
--- a/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/PhasedOps.java
+++ b/jena-db/jena-tdb2/src/main/java/org/apache/jena/tdb2/loader/main/PhasedOps.java
@@ -19,11 +19,14 @@
 package org.apache.jena.tdb2.loader.main;
 
 import java.util.*;
+import java.util.concurrent.Semaphore;
 import java.util.function.Consumer;
 import java.util.function.IntFunction;
 import java.util.stream.Stream;
 
+import org.apache.jena.atlas.lib.Timer;
 import org.apache.jena.atlas.lib.tuple.Tuple;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.tdb2.loader.BulkLoaderException;
 import org.apache.jena.tdb2.loader.base.MonitorOutput;
 import org.apache.jena.tdb2.loader.base.ProgressMonitor;
@@ -37,6 +40,22 @@
  */
 class PhasedOps {
 
+    /** Acquire one permit from a semaphore. Return the time spent waiting. */
+    /* package */ static long acquire(Semaphore termination) {
+        return acquire(termination, 1);
+    }
+
+    /** Acquire permits from a semaphore. Return the time spent waiting. */
+    /* package */ static long acquire(Semaphore semaphore, int numPermits) {
+        return Timer.time(()->{
+            try { semaphore.acquire(numPermits); }
+            catch (InterruptedException e) {
+                Log.error(Indexer.class, "Interrupted", e);
+                throw new RuntimeException(e);
+            }
+        });
+    }
+
     static Map<String, TupleIndex> indexMap(DatasetGraphTDB dsgtdb) {
         Map<String, TupleIndex> indexMap = new HashMap<>();
         // All triple/quad indexes.
diff --git a/jena-fuseki2/jena-fuseki-access/src/main/java/org/apache/jena/fuseki/access/GraphFilter.java b/jena-fuseki2/jena-fuseki-access/src/main/java/org/apache/jena/fuseki/access/GraphFilter.java
index 0e6248e..6929542 100644
--- a/jena-fuseki2/jena-fuseki-access/src/main/java/org/apache/jena/fuseki/access/GraphFilter.java
+++ b/jena-fuseki2/jena-fuseki-access/src/main/java/org/apache/jena/fuseki/access/GraphFilter.java
@@ -75,13 +75,5 @@
     // The per graph test.
     private boolean perGraphTest(X g) {
         return graphs.contains(g);
-//        if ( g == slot ) {
-//            System.err.println("Slot hit");
-//            return true;
-//        }
-//        boolean b = matches.contains(g);
-//        if ( b )
-//            slot = g;
-//        return b;
     }
 }
\ No newline at end of file
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/DataValidatorHTML.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/DataValidatorHTML.java
index cb619dc..c6c76a6 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/DataValidatorHTML.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/validation/html/DataValidatorHTML.java
@@ -136,7 +136,6 @@
 
         @Override
         public void write(int b) throws IOException {
-            //System.err.printf("0x%02X\n", b);
             if ( b == '&' )      writeEsc(escAmp);
             else if ( b == '>' ) writeEsc(escGT);
             else if ( b == '<' ) writeEsc(escLT);
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeNodeBuilder.java b/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeNodeBuilder.java
index ec07a44..e17b0f1 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeNodeBuilder.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeNodeBuilder.java
@@ -22,6 +22,7 @@
 import java.util.NoSuchElementException;
 
 import org.apache.jena.atlas.lib.Pair ;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.tdb.base.buffer.PtrBuffer ;
 import org.apache.jena.tdb.base.buffer.RecordBuffer ;
 import org.apache.jena.tdb.base.record.Record ;
@@ -72,10 +73,8 @@
         recBuff.setSize(0) ;
         ptrBuff.setSize(0) ;    // Creation leaves this junk.
         
-        final boolean debug = false ;
         int rMax = recBuff.maxSize() ;
         int pMax = ptrBuff.maxSize() ;
-        if ( debug ) System.out.printf("Max: (%d, %d)\n", rMax, pMax) ;
 
         for ( ; iter.hasNext() ; )
         {
@@ -91,7 +90,6 @@
             //System.out.printf("N: %d/%d : P %d/%d : R %d/%d\n", X, X2, P, P2, R, R2) ;
             
             Pair<Integer, Record> pair = iter.next() ;
-            if ( debug ) System.out.println("** Item: "+pair) ;
             Record r = pair.cdr() ;
             
             // [Issue: FREC]
@@ -107,7 +105,7 @@
             // Always add - so ptrBuff is one ahead when we finish.
             // There is always one more ptr than record in a B+Tree node.
             if ( ptrBuff.isFull() )
-                System.err.println("PtrBuffer is full") ;
+               Log.error(this, "PtrBuffer is full") ;
             
             // Add pointer.
             ptrBuff.add(pair.car()) ;
@@ -126,14 +124,11 @@
                 
                 // Internal consistency check.
                 if ( ! ptrBuff.isFull() )
-                    System.err.println("PtrBuffer is not full") ;
+                    Log.error(this, "PtrBuffer is not full") ;
                 
                 // The split point for the next level up.
                 slot = new Pair<>(bptNode.getId(), pair.cdr()) ;
 
-                if ( debug ) System.out.printf("Write(1): %d\n", bptNode.getId()) ;
-                if ( debug ) System.out.println(bptNode) ;
-                if ( debug ) System.out.println("Slot = "+slot) ;
                 mgr.put(bptNode) ;
                 // No count increment needed.
                 return true ;
@@ -153,9 +148,6 @@
         bptNode.setCount(bptNode.getCount()-1) ;
         slot = new Pair<>(bptNode.getId(), r) ;
         
-        if ( debug ) System.out.printf("Write(2): %d\n", bptNode.getId()) ;
-        if ( debug ) System.out.println(bptNode) ;
-        if ( debug ) System.out.println("Slot = "+slot) ;
         mgr.put(bptNode) ;
         return true ;
     }
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeRecords.java b/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeRecords.java
index 462c0c6..42823a3 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeRecords.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/index/bplustree/BPTreeRecords.java
@@ -191,12 +191,8 @@
         
         if ( CheckingNode )
         {
-            if ( ! Record.keyEQ(r, maxRecord()) )
-            {
-                System.err.println(rBuff) ;
-                System.err.println(other.rBuff) ;
+            if ( !Record.keyEQ(r, maxRecord()) )
                 error("BPTreeRecords.split: Not returning expected record") ;
-            }
         }
         return other ;
     }
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/setup/DatasetBuilderStd.java b/jena-tdb/src/main/java/org/apache/jena/tdb/setup/DatasetBuilderStd.java
index 7cce8cb..c6500be 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/setup/DatasetBuilderStd.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/setup/DatasetBuilderStd.java
@@ -465,7 +465,6 @@
         public BlockMgr buildBlockMgr(FileSet fileSet, String ext, IndexParams params) {
             BlockMgr blkMgr = builder.buildBlockMgr(fileSet, ext, params) ;
             FileRef ref = FileRef.create(fileSet, ext) ;
-            //System.err.println("Record (BlockMgr)   = "+ref);
             recorder.record(ref, blkMgr) ;
             return blkMgr ;
         }
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/ProcRewriteIndex.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/ProcRewriteIndex.java
index 2da82a6..927e297 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/ProcRewriteIndex.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/bulkloader2/ProcRewriteIndex.java
@@ -20,6 +20,7 @@
 
 import java.util.Iterator ;
 
+import org.apache.jena.atlas.logging.FmtLog;
 import org.apache.jena.tdb.base.block.BlockMgr ;
 import org.apache.jena.tdb.base.block.BlockMgrFactory ;
 import org.apache.jena.tdb.base.file.FileSet ;
@@ -51,7 +52,7 @@
             dftKeyLength = SystemTDB.LenIndexQuadRecord;
             dftValueLength = 0;
         } else {
-            System.err.printf("Can't determine record size for %s\n", indexName);
+            FmtLog.error(ProcRewriteIndex.class, "Can't determine record size for %s\n", indexName);
             return;
         }
 
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetable/NodeTableCache.java b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetable/NodeTableCache.java
index 8507a82..e01dccf 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetable/NodeTableCache.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/store/nodetable/NodeTableCache.java
@@ -123,7 +123,7 @@
                 return n ; 
 
             if ( baseTable == null )
-                System.err.println(""+this) ;
+                Log.error(this, "Null base table : "+this) ;
             
             n = baseTable.getNodeForNodeId(id) ;
             cacheUpdate(n, id) ;
diff --git a/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java b/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java
index 0006de4..4650e47 100644
--- a/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java
+++ b/jena-tdb/src/main/java/org/apache/jena/tdb/transaction/BlockMgrJournal.java
@@ -76,7 +76,7 @@
         
         reset(txn, fileRef, underlyingBlockMgr) ;
         if ( txn.getTxnMode() == ReadWrite.READ &&  underlyingBlockMgr instanceof BlockMgrJournal )
-            System.err.println("Two level BlockMgrJournal") ;
+            log.error("Two level BlockMgrJournal") ;
     }
 
     @Override
