diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
new file mode 100644
index 7a7177c..095caa1
*** a/doc/src/sgml/config.sgml
--- b/doc/src/sgml/config.sgml
*************** include_dir 'conf.d'
*** 2726,2752 ****
          for their WAL records to be replicated to the standby server(s).
          When set to <literal>on</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have received
!         the commit record of the transaction and flushed it to disk.  This
          ensures the transaction will not be lost unless both the primary and
          all synchronous standbys suffer corruption of their database storage.
-         When set to <literal>remote_apply</literal>, commits will wait until replies
-         from the current synchronous standby(s) indicate they have received the
-         commit record of the transaction and applied it, so that it has become
-         visible to queries on the standby(s).
          When set to <literal>remote_write</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have
!         received the commit record of the transaction and written it out to
!         their operating system. This setting is sufficient to
!         ensure data preservation even if a standby instance of
!         <productname>PostgreSQL</productname> were to crash, but not if the standby
!         suffers an operating-system-level crash, since the data has not
          necessarily reached stable storage on the standby.
!         Finally, the setting <literal>local</literal> causes commits to wait for
!         local flush to disk, but not for replication.  This is not usually
          desirable when synchronous replication is in use, but is provided for
          completeness.
         </para>
         <para>
          If <varname>synchronous_standby_names</varname> is empty, the settings
          <literal>on</literal>, <literal>remote_apply</literal>, <literal>remote_write</literal>
          and <literal>local</literal> all provide the same synchronization level:
--- 2726,2756 ----
          for their WAL records to be replicated to the standby server(s).
          When set to <literal>on</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have received
!         the commit record of the transaction and flushed it to durable storage.  This
          ensures the transaction will not be lost unless both the primary and
          all synchronous standbys suffer corruption of their database storage.
          When set to <literal>remote_write</literal>, commits will wait until replies
          from the current synchronous standby(s) indicate they have
!         received the commit record of the transaction and written it to
!         their file systems. This setting ensures data preservation if a standby instance of
!         <productname>PostgreSQL</productname> crashes, but not if the standby
!         suffers an operating-system-level crash because the data has not
          necessarily reached stable storage on the standby.
!         The setting <literal>local</literal> causes commits to wait for
!         local flush to disk, but not for replication.  This is usually not
          desirable when synchronous replication is in use, but is provided for
          completeness.
         </para>
         <para>
+         Finally, when set to <literal>remote_apply</literal>, commits
+         will wait until replies from the current synchronous standby(s)
+         indicate they have received the commit record of the transaction
+         and applied it, so that it has become visible to queries on the
+         standby(s), and also written to durable storage on the standbys.
+         This will cause much larger commit delays than previous settings
+         since it involves WAL replay.
+        </para>
+        <para>
          If <varname>synchronous_standby_names</varname> is empty, the settings
          <literal>on</literal>, <literal>remote_apply</literal>, <literal>remote_write</literal>
          and <literal>local</literal> all provide the same synchronization level:
diff --git a/src/include/access/xact.h b/src/include/access/xact.h
new file mode 100644
index df1b43a..f44b4c4
*** a/src/include/access/xact.h
--- b/src/include/access/xact.h
*************** typedef enum
*** 72,78 ****
  	SYNCHRONOUS_COMMIT_REMOTE_WRITE,	/* wait for local flush and remote
  										 * write */
  	SYNCHRONOUS_COMMIT_REMOTE_FLUSH,	/* wait for local and remote flush */
! 	SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local flush and remote apply */
  }			SyncCommitLevel;
  
  /* Define the default setting for synchronous_commit */
--- 72,78 ----
  	SYNCHRONOUS_COMMIT_REMOTE_WRITE,	/* wait for local flush and remote
  										 * write */
  	SYNCHRONOUS_COMMIT_REMOTE_FLUSH,	/* wait for local and remote flush */
! 	SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local and remote flush and remote apply */
  }			SyncCommitLevel;
  
  /* Define the default setting for synchronous_commit */
