diff --git a/qa/rpc-tests/abc-cmdline.py b/qa/rpc-tests/abc-cmdline.py
--- a/qa/rpc-tests/abc-cmdline.py
+++ b/qa/rpc-tests/abc-cmdline.py
@@ -56,18 +56,17 @@
         self.check_subversion("/Bitcoin ABC:.*\(EB2\.0\)/")
 
         print("  Attempt to set below legacy limit of 1MB - try %d bytes" %
-              (LEGACY_MAX_BLOCK_SIZE - 1))
+              LEGACY_MAX_BLOCK_SIZE)
         outputchecker = OutputChecker()
         stop_node(self.nodes[0], 0)
         try:
-            self.extra_args = [["-excessiveblocksize=%d" %
-                                (LEGACY_MAX_BLOCK_SIZE - 1)]]
+            self.extra_args = [["-excessiveblocksize=%d" % LEGACY_MAX_BLOCK_SIZE]]
             self.nodes[0] = start_node(0, self.options.tmpdir,
                                        self.extra_args[0],
                                        stderr_checker=outputchecker)
         except Exception as e:
             assert(outputchecker.contains(
-                'Error: Excessive block size must be >= 1,000,000 bytes (1MB)'))
+                'Error: Excessive block size must be > 1,000,000 bytes (1MB)'))
             assert_equal('bitcoind exited with status 1 during initialization', str(e))
         else:
             raise AssertionError("Must not accept excessiveblocksize"
@@ -83,13 +82,14 @@
                                        stderr_checker=outputchecker)
         except Exception as e:
             assert(outputchecker.contains(
-                'Error: Max generated block size (blockmaxsize) cannot '
-                'exceed the excessive block size (excessiveblocksize)'))
+                'Error: Max generated block size (blockmaxsize) cannot be '
+                'lower than 1MB or exceed the excessive block size (excessiveblocksize)'))
             assert_equal('bitcoind exited with status 1 during initialization', str(e))
         else:
             raise AssertionError('Must not accept excessiveblocksize'
                                  ' below blockmaxsize')
 
+
     def run_test(self):
 
         # Run tests on -excessiveblocksize option
diff --git a/qa/rpc-tests/abc-rpc.py b/qa/rpc-tests/abc-rpc.py
--- a/qa/rpc-tests/abc-rpc.py
+++ b/qa/rpc-tests/abc-rpc.py
@@ -38,22 +38,22 @@
         assert_equal(ebs, DEFAULT_MAX_BLOCK_SIZE)
 
         # Check that setting to legacy size is ok
-        self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE)
+        self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE + 1)
         getsize = self.nodes[0].getexcessiveblock()
         ebs = getsize['excessiveBlockSize']
-        assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE)
+        assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1)
 
         # Check that going below legacy size is not accepted
         try:
-            self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE - 1)
+            self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE)
         except JSONRPCException as e:
             assert("Invalid parameter, excessiveblock must be larger than %d" % LEGACY_MAX_BLOCK_SIZE
                        in e.error['message'])
         else:
-            raise AssertionError("Must not accept excessiveblock values < %d bytes" % LEGACY_MAX_BLOCK_SIZE)
+            raise AssertionError("Must not accept excessiveblock values <= %d bytes" % LEGACY_MAX_BLOCK_SIZE)
         getsize = self.nodes[0].getexcessiveblock()
         ebs = getsize['excessiveBlockSize']
-        assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE)
+        assert_equal(ebs, LEGACY_MAX_BLOCK_SIZE + 1)
 
         # Check setting to 2MB
         self.nodes[0].setexcessiveblock(2 * ONE_MEGABYTE)
diff --git a/qa/rpc-tests/p2p-fullblocktest.py b/qa/rpc-tests/p2p-fullblocktest.py
--- a/qa/rpc-tests/p2p-fullblocktest.py
+++ b/qa/rpc-tests/p2p-fullblocktest.py
@@ -74,8 +74,6 @@
         self.test.add_all_connections(self.nodes)
         # Start up network handling in another thread
         NetworkThread().start()
-        # Set the blocksize to legacy cap (1MB) as initial condition
-        self.nodes[0].setexcessiveblock(LEGACY_MAX_BLOCK_SIZE)
         self.test.run()
 
     def add_transactions_to_block(self, block, tx_list):
diff --git a/src/config.cpp b/src/config.cpp
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -9,7 +9,8 @@
 
 bool GlobalConfig::SetMaxBlockSize(uint64_t maxBlockSize) {
     // Do not allow maxBlockSize to be set below historic 1MB limit
-    if (maxBlockSize < LEGACY_MAX_BLOCK_SIZE) {
+    // It cannot be equal either because of the "must be big" UAHF rule.
+    if (maxBlockSize <= LEGACY_MAX_BLOCK_SIZE) {
         return false;
     }
 
diff --git a/src/init.cpp b/src/init.cpp
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -751,7 +751,7 @@
             HelpMessageOpt("-excessiveblocksize=<n>",
                            strprintf(_("Do not accept blocks larger than this "
                                        "limit, in bytes (default: %d)"),
-                                     DEFAULT_MAX_BLOCK_SIZE));
+                                     LEGACY_MAX_BLOCK_SIZE));
         strUsage += HelpMessageOpt(
             "-incrementalrelayfee=<amt>",
             strprintf(
@@ -1386,25 +1386,21 @@
     // Configure excessive block size.
     const uint64_t nProposedExcessiveBlockSize =
         GetArg("-excessiveblocksize", DEFAULT_MAX_BLOCK_SIZE);
-    if (nProposedExcessiveBlockSize < ONE_MEGABYTE) {
+    if (!config.SetMaxBlockSize(nProposedExcessiveBlockSize)) {
         return InitError(
-            _("Excessive block size must be >= 1,000,000 bytes (1MB)"));
-    } else {
-        if (!config.SetMaxBlockSize(nProposedExcessiveBlockSize)) {
-            return InitError(strprintf(
-                _("Unable to validate excessive block size value (%d)"),
-                nProposedExcessiveBlockSize));
-        }
-        assert(nProposedExcessiveBlockSize == config.GetMaxBlockSize());
+            _("Excessive block size must be > 1,000,000 bytes (1MB)"));
     }
 
     // Check blockmaxsize does not exceed maximum accepted block size.
+    // Also checks that it isn't smaller than 1MB, as to make sure we can
+    // satisfy the "must be big" UAHF rule.
     const uint64_t nProposedMaxGeneratedBlockSize =
         GetArg("-blockmaxsize", DEFAULT_MAX_GENERATED_BLOCK_SIZE);
-    if (nProposedMaxGeneratedBlockSize > config.GetMaxBlockSize()) {
+    if (nProposedMaxGeneratedBlockSize <= LEGACY_MAX_BLOCK_SIZE ||
+        nProposedMaxGeneratedBlockSize > config.GetMaxBlockSize()) {
         return InitError(
-            _("Max generated block size (blockmaxsize) cannot exceed the "
-              "excessive block size (excessiveblocksize)"));
+            _("Max generated block size (blockmaxsize) cannot be lower than "
+              "1MB or exceed the excessive block size (excessiveblocksize)"));
     }
 
     const int64_t nProposedUAHFStartTime =
diff --git a/src/rpc/abc.cpp b/src/rpc/abc.cpp
--- a/src/rpc/abc.cpp
+++ b/src/rpc/abc.cpp
@@ -54,7 +54,7 @@
     }
 
     // Do not allow maxBlockSize to be set below historic 1MB limit
-    if (ebs < LEGACY_MAX_BLOCK_SIZE)
+    if (ebs <= LEGACY_MAX_BLOCK_SIZE)
         throw JSONRPCError(
             RPC_INVALID_PARAMETER,
             std::string(
diff --git a/src/test/config_tests.cpp b/src/test/config_tests.cpp
--- a/src/test/config_tests.cpp
+++ b/src/test/config_tests.cpp
@@ -18,10 +18,11 @@
     BOOST_CHECK(!config.SetMaxBlockSize(0));
     BOOST_CHECK(!config.SetMaxBlockSize(12345));
     BOOST_CHECK(!config.SetMaxBlockSize(LEGACY_MAX_BLOCK_SIZE - 1));
+    BOOST_CHECK(!config.SetMaxBlockSize(LEGACY_MAX_BLOCK_SIZE));
 
-    // LEGACY_MAX_BLOCK_SIZE
-    BOOST_CHECK(config.SetMaxBlockSize(LEGACY_MAX_BLOCK_SIZE));
-    BOOST_CHECK_EQUAL(config.GetMaxBlockSize(), LEGACY_MAX_BLOCK_SIZE);
+    // LEGACY_MAX_BLOCK_SIZE + 1
+    BOOST_CHECK(config.SetMaxBlockSize(LEGACY_MAX_BLOCK_SIZE + 1));
+    BOOST_CHECK_EQUAL(config.GetMaxBlockSize(), LEGACY_MAX_BLOCK_SIZE + 1);
 
     // 2MB
     BOOST_CHECK(config.SetMaxBlockSize(2 * ONE_MEGABYTE));
@@ -38,8 +39,8 @@
     // Setting it back down
     BOOST_CHECK(config.SetMaxBlockSize(7 * ONE_MEGABYTE));
     BOOST_CHECK_EQUAL(config.GetMaxBlockSize(), 7 * ONE_MEGABYTE);
-    BOOST_CHECK(config.SetMaxBlockSize(ONE_MEGABYTE));
-    BOOST_CHECK_EQUAL(config.GetMaxBlockSize(), ONE_MEGABYTE);
+    BOOST_CHECK(config.SetMaxBlockSize(ONE_MEGABYTE + 1));
+    BOOST_CHECK_EQUAL(config.GetMaxBlockSize(), ONE_MEGABYTE + 1);
 }
 
 BOOST_AUTO_TEST_CASE(chain_params) {
diff --git a/src/test/excessiveblock_tests.cpp b/src/test/excessiveblock_tests.cpp
--- a/src/test/excessiveblock_tests.cpp
+++ b/src/test/excessiveblock_tests.cpp
@@ -34,11 +34,14 @@
     BOOST_CHECK_THROW(CallRPC(std::string("setexcessiveblock ") +
                               std::to_string(ONE_MEGABYTE - 1)),
                       std::runtime_error);
+    BOOST_CHECK_THROW(CallRPC(std::string("setexcessiveblock ") +
+                              std::to_string(ONE_MEGABYTE)),
+                      std::runtime_error);
 
     BOOST_CHECK_NO_THROW(CallRPC(std::string("setexcessiveblock ") +
-                                 std::to_string(ONE_MEGABYTE)));
-    BOOST_CHECK_NO_THROW(CallRPC(std::string("setexcessiveblock ") +
                                  std::to_string(ONE_MEGABYTE + 1)));
+    BOOST_CHECK_NO_THROW(CallRPC(std::string("setexcessiveblock ") +
+                                 std::to_string(ONE_MEGABYTE + 10)));
 
     // Default can be higher than 1MB in future - test it too
     BOOST_CHECK_NO_THROW(CallRPC(std::string("setexcessiveblock ") +
diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp
--- a/src/test/miner_tests.cpp
+++ b/src/test/miner_tests.cpp
@@ -731,8 +731,8 @@
 
     BOOST_CHECK(IsUAHFenabledForCurrentBlock(config));
 
-    // Test around historical 1MB
-    config.SetMaxBlockSize(ONE_MEGABYTE);
+    // Test around historical 1MB (plus one byte because that's mandatory)
+    config.SetMaxBlockSize(ONE_MEGABYTE + 1);
     CheckBlockMaxSize(chainparams, 0, 1000);
     CheckBlockMaxSize(chainparams, 1000, 1000);
     CheckBlockMaxSize(chainparams, 1001, 1001);
@@ -740,8 +740,8 @@
 
     CheckBlockMaxSize(chainparams, ONE_MEGABYTE - 1001, ONE_MEGABYTE - 1001);
     CheckBlockMaxSize(chainparams, ONE_MEGABYTE - 1000, ONE_MEGABYTE - 1000);
-    CheckBlockMaxSize(chainparams, ONE_MEGABYTE - 999, ONE_MEGABYTE - 1000);
-    CheckBlockMaxSize(chainparams, ONE_MEGABYTE, ONE_MEGABYTE - 1000);
+    CheckBlockMaxSize(chainparams, ONE_MEGABYTE - 999, ONE_MEGABYTE - 999);
+    CheckBlockMaxSize(chainparams, ONE_MEGABYTE, ONE_MEGABYTE - 999);
 
     // Test around higher limit such as 8MB
     config.SetMaxBlockSize(EIGHT_MEGABYTES);