Merge pull request #695 from afs/jena1758-semaphore

JENA-1758: Use a semaphore to notify thread has finished
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-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