diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 259a2d8..3a8fc7d 100644
*** a/doc/src/sgml/config.sgml
--- b/doc/src/sgml/config.sgml
*************** include_dir 'conf.d'
*** 696,703 ****
  
         <para>
          The default value is three connections. The value must be less
!         than the value of <varname>max_connections</varname>. This
!         parameter can only be set at server start.
         </para>
        </listitem>
       </varlistentry>
--- 696,704 ----
  
         <para>
          The default value is three connections. The value must be less
!         than <varname>max_connections</varname> minus
!         <xref linkend="guc-max-wal-senders"/>.
!         This parameter can only be set at server start.
         </para>
        </listitem>
       </varlistentry>
*************** include_dir 'conf.d'
*** 2982,2994 ****
          maximum number of simultaneously running WAL sender
          processes). The default is 10. The value 0 means replication is
          disabled. WAL sender processes count towards the total number
!         of connections, so the parameter cannot be set higher than
!         <xref linkend="guc-max-connections"/>.  Abrupt streaming client
!         disconnection might cause an orphaned connection slot until
          a timeout is reached, so this parameter should be set slightly
          higher than the maximum number of expected clients so disconnected
          clients can immediately reconnect.  This parameter can only
!         be set at server start. <varname>wal_level</varname> must be set to
          <literal>replica</literal> or higher to allow connections from standby
          servers.
         </para>
--- 2983,2998 ----
          maximum number of simultaneously running WAL sender
          processes). The default is 10. The value 0 means replication is
          disabled. WAL sender processes count towards the total number
!         of connections, so this parameter's value must be less than
!         <xref linkend="guc-max-connections"/> minus
!         <xref linkend="guc-superuser-reserved-connections"/>.
!         Abrupt streaming client disconnection might leave an orphaned
!         connection slot behind until
          a timeout is reached, so this parameter should be set slightly
          higher than the maximum number of expected clients so disconnected
          clients can immediately reconnect.  This parameter can only
!         be set at server start.
!         Also, <varname>wal_level</varname> must be set to
          <literal>replica</literal> or higher to allow connections from standby
          servers.
         </para>
*************** include_dir 'conf.d'
*** 3007,3016 ****
           (see <xref linkend="streaming-replication-slots"/>) that the server
           can support. The default is 10.  This parameter can only be set at
           server start.
!          <varname>wal_level</varname> must be set
!          to <literal>replica</literal> or higher to allow replication slots to
!          be used. Setting it to a lower value than the number of currently
           existing replication slots will prevent the server from starting.
          </para>
         </listitem>
        </varlistentry>
--- 3011,3021 ----
           (see <xref linkend="streaming-replication-slots"/>) that the server
           can support. The default is 10.  This parameter can only be set at
           server start.
!          Setting it to a lower value than the number of currently
           existing replication slots will prevent the server from starting.
+          Also, <varname>wal_level</varname> must be set
+          to <literal>replica</literal> or higher to allow replication slots to
+          be used.
          </para>
         </listitem>
        </varlistentry>
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index f3ddf82..660f318 100644
*** a/src/backend/postmaster/postmaster.c
--- b/src/backend/postmaster/postmaster.c
*************** char	   *ListenAddresses;
*** 202,210 ****
  
  /*
   * ReservedBackends is the number of backends reserved for superuser use.
!  * This number is taken out of the pool size given by MaxBackends so
   * number of backend slots available to non-superusers is
!  * (MaxBackends - ReservedBackends).  Note what this really means is
   * "if there are <= ReservedBackends connections available, only superusers
   * can make new connections" --- pre-existing superuser connections don't
   * count against the limit.
--- 202,210 ----
  
  /*
   * ReservedBackends is the number of backends reserved for superuser use.
!  * This number is taken out of the pool size given by MaxConnections so
   * number of backend slots available to non-superusers is
!  * (MaxConnections - ReservedBackends).  Note what this really means is
   * "if there are <= ReservedBackends connections available, only superusers
   * can make new connections" --- pre-existing superuser connections don't
   * count against the limit.
*************** PostmasterMain(int argc, char *argv[])
*** 882,895 ****
  	/*
  	 * Check for invalid combinations of GUC settings.
  	 */
! 	if (ReservedBackends >= MaxConnections)
! 	{
! 		write_stderr("%s: superuser_reserved_connections must be less than max_connections\n", progname);
! 		ExitPostmaster(1);
! 	}
! 	if (max_wal_senders >= MaxConnections)
  	{
! 		write_stderr("%s: max_wal_senders must be less than max_connections\n", progname);
  		ExitPostmaster(1);
  	}
  	if (XLogArchiveMode > ARCHIVE_MODE_OFF && wal_level == WAL_LEVEL_MINIMAL)
--- 882,892 ----
  	/*
  	 * Check for invalid combinations of GUC settings.
  	 */
! 	if (ReservedBackends + max_wal_senders >= MaxConnections)
  	{
! 		write_stderr("%s: superuser_reserved_connections (%d) plus max_wal_senders (%d) must be less than max_connections (%d)\n",
! 					 progname,
! 					 ReservedBackends, max_wal_senders, MaxConnections);
  		ExitPostmaster(1);
  	}
  	if (XLogArchiveMode > ARCHIVE_MODE_OFF && wal_level == WAL_LEVEL_MINIMAL)
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index 4846289..d8f45b3 100644
*** a/src/backend/utils/init/postinit.c
--- b/src/backend/utils/init/postinit.c
*************** InitPostgres(const char *in_dbname, Oid 
*** 778,784 ****
  	}
  
  	/*
! 	 * The last few connections slots are reserved for superusers. Although
  	 * replication connections currently require superuser privileges, we
  	 * don't allow them to consume the reserved slots, which are intended for
  	 * interactive use.
--- 778,784 ----
  	}
  
  	/*
! 	 * The last few connection slots are reserved for superusers.  Although
  	 * replication connections currently require superuser privileges, we
  	 * don't allow them to consume the reserved slots, which are intended for
  	 * interactive use.
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 1db7845..d91ba05 100644
*** a/src/backend/utils/misc/guc.c
--- b/src/backend/utils/misc/guc.c
*************** static struct config_int ConfigureNamesI
*** 1873,1878 ****
--- 1873,1879 ----
  	},
  
  	{
+ 		/* see max_connections and max_wal_senders */
  		{"superuser_reserved_connections", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
  			gettext_noop("Sets the number of connection slots reserved for superusers."),
  			NULL
*************** static struct config_int ConfigureNamesI
*** 2375,2381 ****
  	},
  
  	{
! 		/* see max_connections */
  		{"max_wal_senders", PGC_POSTMASTER, REPLICATION_SENDING,
  			gettext_noop("Sets the maximum number of simultaneously running WAL sender processes."),
  			NULL
--- 2376,2382 ----
  	},
  
  	{
! 		/* see max_connections and superuser_reserved_connections */
  		{"max_wal_senders", PGC_POSTMASTER, REPLICATION_SENDING,
  			gettext_noop("Sets the maximum number of simultaneously running WAL sender processes."),
  			NULL
*************** static struct config_int ConfigureNamesI
*** 2386,2392 ****
  	},
  
  	{
! 		/* see max_connections */
  		{"max_replication_slots", PGC_POSTMASTER, REPLICATION_SENDING,
  			gettext_noop("Sets the maximum number of simultaneously defined replication slots."),
  			NULL
--- 2387,2393 ----
  	},
  
  	{
! 		/* see max_wal_senders */
  		{"max_replication_slots", PGC_POSTMASTER, REPLICATION_SENDING,
  			gettext_noop("Sets the maximum number of simultaneously defined replication slots."),
  			NULL
