diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
index 90dba1b..0c8393e 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
@@ -123,6 +123,7 @@
                                                      .addAltNames("RDF_THRIFT", "RDFTHRIFT", "RDF/THRIFT", "TRDF")
                                                      .addFileExtensions("rt", "trdf")
                                                      .build() ;
+    /** @deprecated Use {@link #RDFTHRIFT} */
     public static final Lang THRIFT     = RDFTHRIFT;
 
     /** Text */
@@ -184,7 +185,7 @@
         Lang.NQUADS     = RDFLanguages.NQUADS ;
         Lang.NQ         = RDFLanguages.NQ ;
         Lang.TRIG       = RDFLanguages.TRIG ;
-        Lang.RDFTHRIFT  = RDFLanguages.THRIFT ;
+        Lang.RDFTHRIFT  = RDFLanguages.RDFTHRIFT ;
         Lang.TRIX       = RDFLanguages.TRIX ;
         Lang.RDFNULL    = RDFLanguages.RDFNULL ;
         Lang.SHACLC     = RDFLanguages.SHACLC ;
@@ -215,7 +216,7 @@
         register(RDFJSON) ;
         register(TRIG) ;
         register(NQUADS) ;
-        register(THRIFT) ;
+        register(RDFTHRIFT) ;
         register(TRIX) ;
         register(RDFNULL) ;
         register(SHACLC) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
index 4109d2c..4f0b3d9 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
@@ -18,117 +18,118 @@
 
 package org.apache.jena.riot.thrift;
 
-import java.io.OutputStream ;
+import java.io.OutputStream;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.RiotException ;
-import org.apache.jena.riot.system.PrefixMap ;
-import org.apache.jena.riot.system.PrefixMapFactory ;
-import org.apache.jena.riot.system.StreamRDF ;
-import org.apache.jena.riot.thrift.wire.* ;
-import org.apache.jena.sparql.core.Quad ;
-import org.apache.thrift.TException ;
-import org.apache.thrift.protocol.TProtocol ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.riot.RiotException;
+import org.apache.jena.riot.system.PrefixMap;
+import org.apache.jena.riot.system.PrefixMapFactory;
+import org.apache.jena.riot.system.StreamRDF;
+import org.apache.jena.riot.thrift.wire.*;
+import org.apache.jena.sparql.core.Quad;
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TProtocol;
 
 /** Encode StreamRDF in Thrift.
- *  Usually used via {@link BinRDF} functions. 
- * 
+ *  Usually used via {@link BinRDF} functions.
+ *
  * @see Thrift2StreamRDF (for each RDF_StreamRow) for the reverse process.
- */ 
-public class StreamRDF2Thrift implements StreamRDF, AutoCloseable 
+ */
+public class StreamRDF2Thrift implements StreamRDF, AutoCloseable
 {
     // No REPEAT support.
-    private final OutputStream out ;
-    private final TProtocol protocol ;
-    private PrefixMap pmap = PrefixMapFactory.create() ;
-    private final boolean encodeValues ;
+    private final OutputStream out;
+    private final TProtocol protocol;
+    private PrefixMap pmap = PrefixMapFactory.create();
+    private final boolean encodeValues;
 
-//    public StreamRDF2Thrift(OutputStream out) {
-//        this(out, false) ;
-//    }
-    
+    public StreamRDF2Thrift(OutputStream out) {
+        this(out, false);
+    }
+
     public StreamRDF2Thrift(OutputStream out, boolean encodeValues) {
-        this.out = out ;
-        this.protocol = TRDF.protocol(out) ;
-        this.encodeValues = encodeValues ;
+        this(TRDF.protocol(out), encodeValues);
     }
 
 //    public StreamRDF2Thrift(TProtocol out) {
-//        this(out, false) ;
+//        this(out, false);
 //    }
-    
-    public StreamRDF2Thrift(TProtocol out, boolean encodeValues) { 
-        this.out = null ;
-        this.protocol = out ;
-        this.pmap = PrefixMapFactory.create() ;
-        this.encodeValues = encodeValues ;
+
+    public StreamRDF2Thrift(TProtocol out, boolean encodeValues) {
+        this.out = null;
+        this.protocol = out;
+        this.pmap = PrefixMapFactory.create();
+        this.encodeValues = encodeValues;
     }
 
     @Override
     public void start() { }
 
-    private final RDF_StreamRow  tStreamRow   = new RDF_StreamRow() ;
-    
-    private final RDF_Triple ttriple    = new RDF_Triple() ;
-    private final RDF_Quad   tquad      = new RDF_Quad() ;
-    
-    private final RDF_Term   tsubject   = new RDF_Term() ;
-    private final RDF_Term   tpredicate = new RDF_Term() ;
-    private final RDF_Term   tobject    = new RDF_Term() ;
-    private final RDF_Term   tgraph     = new RDF_Term() ;
-    
+    private final RDF_StreamRow  tStreamRow   = new RDF_StreamRow();
+
+    private final RDF_Triple ttriple    = new RDF_Triple();
+    private final RDF_Quad   tquad      = new RDF_Quad();
+
+    private final RDF_Term   tsubject   = new RDF_Term();
+    private final RDF_Term   tpredicate = new RDF_Term();
+    private final RDF_Term   tobject    = new RDF_Term();
+    private final RDF_Term   tgraph     = new RDF_Term();
+
     @Override
     public void triple(Triple triple) {
-        doTriple(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
+        doTriple(triple.getSubject(), triple.getPredicate(), triple.getObject());
     }
 
     private void doTriple(Node subject, Node predicate, Node object) {
-        ThriftConvert.toThrift(subject, pmap, tsubject, encodeValues) ;
-        ThriftConvert.toThrift(predicate, pmap, tpredicate, encodeValues) ;
-        ThriftConvert.toThrift(object, pmap, tobject, encodeValues) ;
-        ttriple.setS(tsubject) ;
-        ttriple.setP(tpredicate) ;
-        ttriple.setO(tobject) ;
+        ThriftConvert.toThrift(subject, pmap, tsubject, encodeValues);
+        ThriftConvert.toThrift(predicate, pmap, tpredicate, encodeValues);
+        ThriftConvert.toThrift(object, pmap, tobject, encodeValues);
+        ttriple.setS(tsubject);
+        ttriple.setP(tpredicate);
+        ttriple.setO(tobject);
 
-        tStreamRow.setTriple(ttriple) ;
-        try { tStreamRow.write(protocol) ; }
-        catch (TException e) { TRDF.exception(e) ; }
-        tStreamRow.clear();
-        ttriple.clear();
-        tsubject.clear();
-        tpredicate.clear() ;
-        tobject.clear() ;
+        tStreamRow.setTriple(ttriple);
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        finally {
+            tStreamRow.clear();
+            ttriple.clear();
+            tsubject.clear();
+            tpredicate.clear();
+            tobject.clear();
+        }
     }
-    
+
     @Override
     public void quad(Quad quad) {
         if ( quad.getGraph() == null || quad.isDefaultGraph() ) {
-            doTriple(quad.getSubject(), quad.getPredicate(), quad.getObject()) ;
-            return ;
+            doTriple(quad.getSubject(), quad.getPredicate(), quad.getObject());
+            return;
         }
-        
-        ThriftConvert.toThrift(quad.getGraph(), pmap, tgraph, encodeValues) ;
-        ThriftConvert.toThrift(quad.getSubject(), pmap, tsubject, encodeValues) ;
-        ThriftConvert.toThrift(quad.getPredicate(), pmap, tpredicate, encodeValues) ;
-        ThriftConvert.toThrift(quad.getObject(), pmap, tobject, encodeValues) ;
-        
-        tquad.setG(tgraph) ;
-        tquad.setS(tsubject) ;
-        tquad.setP(tpredicate) ;
-        tquad.setO(tobject) ;
-        tStreamRow.setQuad(tquad) ;
-        
-        try { tStreamRow.write(protocol) ; } 
-        catch (TException e) { TRDF.exception(e) ; }
-        
-        tStreamRow.clear() ;
-        tquad.clear();
-        tgraph.clear();
-        tsubject.clear();
-        tpredicate.clear() ;
-        tobject.clear() ;
+
+        ThriftConvert.toThrift(quad.getGraph(), pmap, tgraph, encodeValues);
+        ThriftConvert.toThrift(quad.getSubject(), pmap, tsubject, encodeValues);
+        ThriftConvert.toThrift(quad.getPredicate(), pmap, tpredicate, encodeValues);
+        ThriftConvert.toThrift(quad.getObject(), pmap, tobject, encodeValues);
+
+        tquad.setG(tgraph);
+        tquad.setS(tsubject);
+        tquad.setP(tpredicate);
+        tquad.setO(tobject);
+        tStreamRow.setQuad(tquad);
+
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        finally {
+            tStreamRow.clear();
+            tquad.clear();
+            tgraph.clear();
+            tsubject.clear();
+            tpredicate.clear();
+            tobject.clear();
+        }
     }
 
     @Override
@@ -138,24 +139,24 @@
 
     @Override
     public void prefix(String prefix, String iri) {
-        try { pmap.add(prefix, iri) ; }
+        try { pmap.add(prefix, iri); }
         catch ( RiotException ex) {
-            Log.warn(this, "Prefix mapping error", ex) ;
+            Log.warn(this, "Prefix mapping error", ex);
         }
-        RDF_PrefixDecl tprefix = new RDF_PrefixDecl(prefix, iri) ; 
-        tStreamRow.setPrefixDecl(tprefix) ;
-        try { tStreamRow.write(protocol) ; }
-        catch (TException e) { TRDF.exception(e) ; }
-        tStreamRow.clear(); 
+        RDF_PrefixDecl tprefix = new RDF_PrefixDecl(prefix, iri);
+        tStreamRow.setPrefixDecl(tprefix);
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        tStreamRow.clear();
     }
 
     @Override
     public void close() {
-        finish() ;
+        finish();
     }
-    
+
     @Override
     public void finish() {
-        TRDF.flush(protocol) ;
+        TRDF.flush(protocol);
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
index e7bd316..a896709 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
@@ -41,9 +41,9 @@
 
 /** Support operations for RDF Thrift */
 public class TRDF {
-    public static final int InputBufferSize     = 128*1024 ; 
-    public static final int OutputBufferSize    = 128*1024 ; 
-    
+    public static final int InputBufferSize     = 128*1024 ;
+    public static final int OutputBufferSize    = 128*1024 ;
+
     /**
      * Create Thrift protocol for the InputStream.
      * @param in InputStream
@@ -61,13 +61,13 @@
 
     /**
      * Create Thrift protocol for the OutputStream.
-     * The caller must call {@link TRDF#flush(TProtocol)} 
-     * which will flush the underlying (internally buffered) output stream. 
+     * The caller must call {@link TRDF#flush(TProtocol)}
+     * which will flush the underlying (internally buffered) output stream.
      * @param out OutputStream
      */
     public static TProtocol protocol(OutputStream out) {
         try {
-            // Flushing the protocol will flush the BufferedOutputStream 
+            // Flushing the protocol will flush the BufferedOutputStream
             if ( !( out instanceof BufferedOutputStream ) )
                 out = new BufferedOutputStream(out, OutputBufferSize) ;
             TTransport transport = new TIOStreamTransport(out) ;
@@ -89,26 +89,26 @@
 
     public static TProtocol protocol(TTransport transport) {
         if ( true ) return new TCompactProtocol(transport) ;
-    
+
         // Keep the warnings down.
         if ( false ) return new TTupleProtocol(transport) ;
         if ( false ) return new TJSONProtocol(transport) ;
         throw new RiotThriftException("No protocol impl choosen") ;
     }
 
-    /** Flush a TProtocol; exceptions converted to {@link RiotException} */  
+    /** Flush a TProtocol; exceptions converted to {@link RiotException} */
     public static void flush(TProtocol protocol) {
         flush(protocol.getTransport()) ;
     }
 
-    /** Flush a TTransport; exceptions converted to {@link RiotException} */  
+    /** Flush a TTransport; exceptions converted to {@link RiotException} */
     public static void flush(TTransport transport) {
         try { transport.flush() ; }
         catch (TException ex) { TRDF.exception(ex) ; }
     }
 
     public static final RDF_ANY ANY = new RDF_ANY() ;
-    /** The Thrift RDF Term 'ANY' */ 
+    /** The Thrift RDF Term 'ANY' */
     public static final RDF_Term tANY = new RDF_Term() ;
     /** The Thrift RDF Term 'UNDEF' */
     public static final RDF_UNDEF UNDEF = new RDF_UNDEF() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
index c1b0ef9..f1308f5 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 
 import java.io.OutputStream ;
 import java.io.Writer ;
@@ -41,7 +41,7 @@
     }
     @Override
     public Lang getLang() {
-        return THRIFT ;
+        return RDFTHRIFT ;
     }
     @Override
     public void write(Writer out, DatasetGraph dsg, PrefixMap prefixMap, String baseURI, Context context) {
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
index 2ec3a47..665fca9 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 
 import java.io.OutputStream ;
 import java.io.Writer ;
@@ -42,12 +42,13 @@
     }
     @Override
     public Lang getLang() {
-        return THRIFT ;
+        return RDFTHRIFT ;
     }
     @Override
     public void write(Writer out, Graph graph, PrefixMap prefixMap, String baseURI, Context context) {
         throw new NotImplemented("Writing binary data to a java.io.Writer is not supported. Please use an OutputStream") ;
     }
+
     @Override
     public void write(OutputStream out, Graph graph, PrefixMap prefixMap, String baseURI, Context context) {
         StreamRDF stream = BinRDF.streamToOutputStream(out, withValues) ;
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
index 5590b6e..0b650a7 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -29,25 +29,25 @@
 public class TestThriftSetup {
 
     @Test public void setup_01() {
-        assertTrue(RDFLanguages.isRegistered(THRIFT)) ;
+        assertTrue(RDFLanguages.isRegistered(RDFTHRIFT)) ;
     }
 
     @Test public void setup_02() {
         Lang lang = RDFLanguages.filenameToLang("data.rt") ;
-        assertEquals(lang, THRIFT) ;
+        assertEquals(lang, RDFTHRIFT) ;
     }
 
     @SuppressWarnings("deprecation")
     @Test public void setup_03() {
-        assertTrue(RDFParserRegistry.isQuads(THRIFT)) ;
-        assertTrue(RDFParserRegistry.isTriples(THRIFT)) ;
-        assertTrue(RDFParserRegistry.isRegistered(THRIFT));
-        assertNotNull(RDFParserRegistry.getFactory(THRIFT)) ;
+        assertTrue(RDFParserRegistry.isQuads(RDFTHRIFT)) ;
+        assertTrue(RDFParserRegistry.isTriples(RDFTHRIFT)) ;
+        assertTrue(RDFParserRegistry.isRegistered(RDFTHRIFT));
+        assertNotNull(RDFParserRegistry.getFactory(RDFTHRIFT)) ;
     }
-    
+
     @Test public void setup_04() {
-        assertTrue(RDFWriterRegistry.contains(THRIFT)) ;
-        assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(THRIFT)) ;
+        assertTrue(RDFWriterRegistry.contains(RDFTHRIFT)) ;
+        assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(RDFTHRIFT)) ;
         assertTrue(RDFWriterRegistry.contains(RDFFormat.RDF_THRIFT)) ;
         assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(RDFFormat.RDF_THRIFT)) ;
         assertTrue(RDFWriterRegistry.contains(RDFFormat.RDF_THRIFT_VALUES)) ;
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
index a261689..285d9bf 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
@@ -20,7 +20,7 @@
 
 import static java.lang.String.format;
 import static org.apache.commons.lang3.StringUtils.isEmpty;
-import static org.apache.jena.fuseki.server.Operation.*;
+import static org.apache.jena.fuseki.server.Operation.GSP_R;
 import static org.apache.jena.fuseki.server.Operation.GSP_RW;
 import static org.apache.jena.fuseki.server.Operation.Query;
 import static org.apache.jena.fuseki.server.Operation.Update;
@@ -37,6 +37,7 @@
 import org.apache.jena.fuseki.auth.Auth;
 import org.apache.jena.fuseki.servlets.*;
 import org.apache.jena.fuseki.system.ActionCategory;
+import org.apache.jena.riot.WebContent;
 import org.apache.jena.riot.web.HttpNames;
 import org.apache.jena.web.HttpSC;
 import org.slf4j.Logger;
@@ -228,23 +229,31 @@
      * look for a named endpoint that supplies the operation.
      */
     private static Endpoint chooseEndpoint(HttpAction action, DataService dataService, String endpointName) {
-        Endpoint ep = chooseEndpointNoLegacy(action, dataService, endpointName);
-        if ( ep != null )
-            return ep;
-        // No dispatch so far.
+        try {
+            Endpoint ep = chooseEndpointNoLegacy(action, dataService, endpointName);
+            if ( ep != null )
+                return ep;
+            // No dispatch so far.
 
-        if ( ! isEmpty(endpointName) )
-            return ep;
-        // [DISPATCH LEGACY]
+            if ( ! isEmpty(endpointName) )
+                return ep;
+            // [DISPATCH LEGACY]
 
-        // When it is a unnamed service request (operation on the dataset) and there
-        // is no match, search the named services.
-        Operation operation = chooseOperation(action);
-        // Search for an endpoint that provides the operation.
-        // No guarantee it has the access controls for the operation
-        // but in this case, access control will validate against all possible endpoints.
-        ep = findEndpointForOperation(action, dataService, operation, true);
-        return ep;
+            // When it is a unnamed service request (operation on the dataset) and there
+            // is no match, search the named services.
+            Operation operation = chooseOperation(action);
+            // Search for an endpoint that provides the operation.
+            // No guarantee it has the access controls for the operation
+            // but in this case, access control will validate against all possible endpoints.
+            ep = findEndpointForOperation(action, dataService, operation, true);
+            return ep;
+        } catch (ActionErrorException ex) {
+            throw ex;
+        } catch (RuntimeException ex) {
+            // Example: Jetty throws BadMessageException when it is an HTML form and it is too big.
+            ServletOps.errorBadRequest(ex.getMessage());
+            return null;
+        }
     }
 
     /**
@@ -267,7 +276,7 @@
             return null;
 
         // If there is one endpoint, dispatch there directly.
-        Endpoint ep = epSet.getOnly();
+        Endpoint ep = epSet.getExactlyOne();
         if ( ep != null )
             return ep;
         // No single direct dispatch. Multiple choices (different operation, same endpoint name)
@@ -373,11 +382,23 @@
 
         // -- Any other queryString
         // Query string now unexpected.
+
         // Place for an extension point.
         boolean hasParams = request.getParameterMap().size() > 0;
         if ( hasParams ) {
+            // One nasty case:
+            // Bad HTML form (content-type  application/x-www-form-urlencoded), but body is not an HTML form.
+            //  map is one entry, and the key is all of the body,
+            if ( WebContent.contentTypeHTMLForm.equals(request.getContentType()) ) {
+                ServletOps.errorBadRequest("Malformed request: unrecognized HTML form request");
+                return null;
+            }
             // Unrecognized ?key=value
-            ServletOps.errorBadRequest("Malformed request: unrecognized query string parameters: " + request.getQueryString());
+            String qs = request.getQueryString();
+            if ( qs != null )
+                ServletOps.errorBadRequest("Malformed request: unrecognized parameters: " + qs);
+            else
+                ServletOps.errorBadRequest(HttpSC.getMessage(HttpSC.BAD_REQUEST_400));
         }
 
 
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
index 8aa9c98..c4f2b5a 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
@@ -104,7 +104,7 @@
     public Collection<Operation> operations() { return endpoints.keySet(); }
     
     /** Get the Endpoint for a singleton EndpointSet */
-    public Endpoint getOnly() {
+    public Endpoint getExactlyOne() {
         return single;
     }
     
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
index 8f6e75f..2b09b94 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
@@ -273,7 +273,7 @@
         static {
             // This is the CrossOriginFilter default.
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
-            // Variatiosn from CrossOriginFilter defaults.
+            // Variations from CrossOriginFilter defaults.
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,DELETE,PUT,HEAD,OPTIONS,PATCH");
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_HEADERS_PARAM,
                 "X-Requested-With, Content-Type, Accept, Origin, Last-Modified, Authorization");
@@ -974,6 +974,8 @@
             context.setDisplayName(Fuseki.servletRequestLogName);
             context.setErrorHandler(new FusekiErrorHandler1());
             context.setContextPath(contextPath);
+            // SPARQL Update by HTML - not the best way but.
+            context.setMaxFormContentSize(1024*1024);
             // securityHandler done in buildAccessControl
             return context;
         }
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
index a51d754..48d322c 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
@@ -286,7 +286,7 @@
         return this;
     }
 
-    /** Build an {RDFConnection}. */
+    /** Build an {@link RDFConnection}. */
     public RDFConnection build() {
         requireNonNull(txnLifecycle);
 
